Part 4: Recommended Security Settings and System Hardening
HierBelow sindare einseveral paaritems Dinge,you dieshould dureview nachagain derafter Einrichtungcompleting amthe bestensetup. nochYou einmalmay durchgehstalready undhave kontrollierst.configured Vielesmany hastof duthem, vielleichtbut schona gemachtsecond –verification aberis einalways zweiter Blick schadet nie und ist meistens sehr sinnvoll.advisable.
Update the System aktualisierenand undInstall PaketeBase installieren
Packages
NachAfter demthe erstenfirst Bootboot, meldestlog duin dichas alsroot rootor oder ncadmin ( anjedepending nachon Konsoleconsole oderor SSH).SSH Führeaccess) sofortand aus:immediately run:
apt update && apt full-upgrade -y.Das
This alleinstalls Sicherheitsupdatesall undsecurity Bugfixesupdates seitand derbug ISO-Erstellung.fixes Danachreleased installieresince nützlichethe Basics:ISO was built.
Then install useful base utilities:
apt install sudo vim htop curl wget net-tools -y.
This ensures sudo availability for regular users and provides improved system and networking tools.
Harden SSH – Disable Password Login and Use Keys
SSH is enabled during installation but not yet hardened.
DamitEdit:
sudo fürnano den normalen User, bessere Tools und Netzwerk-Utilities.
SSH absichern – Passwort-Login deaktivieren und Schlüssel nutzen
SSH ist während der Installation aktiviert, läuft aber unsicher. Editiere /etc/ssh/sshd_config
Set:
PermitRootLogin prohibit-passwordsowiePasswordAuthentication no.Generiere
Generate deineman ClientSSH einenkey SSH-Schlüsselon (your client:
ssh-keygen),
Copy denthe Public-Keypublic mitkey to the server:
ssh-copy-id ncadmin@deine-ncadmin@your-vm-ip
Restart starteSSH:
systemctl restart ssh
From this point forward, only key-based authentication is allowed, effectively preventing password brute-force attacks.
Configure Cron for Nextcloud
Nextcloud requires a recurring background job (file scanning, mail delivery, app updates, etc.).
AbCreate jetzta nurcron noch schlüsselbasiert – Passwort-Brute-Force wird unmöglich.job:
Cron-Job einrichten
Nextcloud benötigt für Hintergrundaufgaben (z. B. Datei-Scanning, E-Mail-Versand, App-Updates) einen regelmäßigen Cron-Job. Richte ihn ein mit:
crontab -e
Add:
*/5 * * * * php -f /var/www/cloud.zn80.net/cron.php.
Alternatively, nutzeuse einena systemd-systemd timer. Ohne Cron läuft Nextcloud nur bei aktivem Webzugriff – viele Funktionen bleiben dann stecken.
NormalerweiseWithout wirdcron, empfohlen,background dentasks cronjobrun mitonly during active web sessions, which can cause delays or stuck jobs.
Note: Normally, the cron job is created with:
crontab -u www-data -e
This Diesesmay funktioniertnot jedochwork in unseremthis Fallsetup nicht,if weilthe dirownership denof Besitzerthe derconfiguration Konfigurations-Dateifile geänderthas haben.been changed earlier.
Install Fail2Ban gegenAgainst Brute-Force-AttackenForce installieren
Attacks
InstalliereInstall Fail2Ban:
apt install fail2ban -y.
Enable überwachtand SSH-Logsstart automatischit:
systemctl enable --now fail2ban
Fail2Ban monitors SSH logs and bans IP addresses after multiple failed login attempts (default: 5 attempts within 10 minutes). The Debian defaults are typically sufficient for a homelab environment.
OptionalOptional: passeAdjust /etc/fail2ban/jail.local an,for z.longer B.ban längeredurations Ban-Zeitenor oderemail E-Mail-Benachrichtigung.notifications.
.htaccess-Optimierungenhtaccess undOptimization Security-and Security Headers
NachAfter derinstallation, Installationupdate solltestthe du die .htaccess-Datei optimieren:file:
sudo -u www-data php occ maintenance:repair
Add damitsecurity Nextcloud sie automatisch aktualisiert. Ergänze zusätzlich Security-Headersheaders in derthe Apache-VirtualHost-KonfigurationApache VirtualHost configuration (innerhalbpreferably under ) <VirtualHost *:80>443oder besser *:443) oderor in denyour Einstellungenreverse deinesproxy Proxys (siehe unten):configuration:
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
DasIf erhöhtrunning denbehind Schutz vor gängigen Web-Angriffen.
Nginx Proxy ManagerManager, setztadd standardmäßigthe einigefollowing Headerunder (z.the B.proxy überhost’s Forcecustom SSL + HSTS-Optionen), aber für eine optimale Absicherung (und um Nextcloud-Warnungen zu vermeiden) kannst du diese Security-Header auch direkt im Proxy-Host konfigurieren. Was die empfohlene Variante ist, wenn Nextcloud hinter einem MPN betrieben wird.
Gehe zu deinem Proxy-Host (z. B. cloud.zn80.net) → Auf die drei Punkte rechts neben dem Eintrag und dann auf das Zahnrad und füge dort folgendes ein:configuration:
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
These Speichereheaders die Änderungen – NPM wendet sie sofort an (kein Neustart nötig).
Diese Header helfen gegen:mitigate:
MIME-Sniffing-AngriffeMIME sniffing attacks (nosniff)- Clickjacking (
SAMEORIGIN) XSS-ReflektionenReflected XSS (mode=block)unnötigeUnnecessaryReferrer-Informationenreferrer exposure (strict-origin-when-cross-origin)
Enable HSTS (Strict-Transport-Security) aktivieren
GeheWithin imthe Proxy-Hostproxy zumhost TabSSL SSLsettings, und aktiviere:enable:
- Force SSL
- HSTS Enabled
- HSTS Subdomains
→ Ja(fallsifduapplicable)
NPMNextcloud setztexpects dannat automatisch einen vernünftigen HSTS-Header (meist max-age=31536000 oder ähnlich).least:
Nextcloud erwartet mindestens
max-age=15552000
If 180necessary, Tage)manually – bei NPM reicht die Standardeinstellung in der Regel aus, um die Warnung zu beseitigen. Falls du einen anderen Wert benutzen möchtest, kannst du ihn auch per Hand einstellen. Füge dazu folgenden Eintrag noch zur der Custom Nginx Configuration hinzu :add:
add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
Wichtig:Important: AktiviereOnly enable HSTS nur, wenn du sicher bist, dassif HTTPS immeris läuftpermanently – sonst sperrst du dich ggf. aus.available.
Weitere
nützlicheAdditional AnpassungenReverse überProxy dieAdjustments Custom Nginx Configuration
(Optional)
FallsTo duprevent Nextcloudheader hinterconflicts NPMor betreibst,WebSocket fügeupgrade diese Zeilen hinzu, um Konflikte zu vermeiden (manchmal nötig bei WebSocket/Upgrade-Problemen oder Header-Überschreibungen):issues:
proxy_hide_header Upgrade;
proxy_hide_header Connection;
OderFor füradditional besseren Schutz:protection:
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
SpeichereAfter danachsaving, undtest testethe deineNextcloud Nextcloud-Instanzinstance (Admin-BereichAdmin → ÜbersichtOverview / Security-Scan)Security – die meisten Header-Warnungen sollten jetzt weg sein.scan).
Mit
diesenAdjust
EinstellungenData bekommstDirectory du in der Regel ein solides A oder A+ bei securityheaders.com oder Mozilla HTTP Observatory Report und Nextcloud zeigt keine großen roten Flaggen mehr. Viel Erfolg!
chmod 750 für das Datenverzeichnis
Permissions
DasThe Datenverzeichnisdata directory /srv/cloud.zn80.net/data sollteshould besserpreferably mituse:
chmod 770und/srv/cloud.zn80.net/datachown -R www-data:www-data /srv/cloud.zn80.net/data
While werden750 (stattmay 750).work, Die770 Nextcloud-Dokumentationis empfiehltrecommended 770,to damitprevent Nextcloudpermission internissues uneingeschränktduring aufapp Dateieninstallation zugreifenor kannlarge (z. B. bei App-Installationen oder großen Uploads). 750 funktioniert meist, kann aber in manchen Szenarien zu Berechtigungsfehlern führen.uploads.
Enable Firewall aktivieren mitwith UFW
SinnvollIf wennthe dieserver Installationis direktdirectly amexposed Internetto hängt.the internet, install UFW:
Wer hier hinter einem Proxy wie Nginx Proxy Manager sitzt, kann sich diese Einrichtung ersparen. Installiere die einfache Firewall:
apt install ufw -y.
Allow nurnecessary SSHports:
ufw allow OpenSSHbzw.ufw allow 80,443/tcp.
Enable mitand verify:
ufw enableund prüfe den Status mitufw status verbose.
UFW blocktblocks allesall andereother standardmäßigports –by ein guter Schutz vor unnötig offenen Ports.default.
Zusätzliche
EmpfehlungenAdditional fürSecurity mehrRecommendations
Sicherheit
- Use
einena dedicated sudo-fähigencapableUseruserohneandunnötigeavoidRechtepermanentundrootvermeidelogin. - Enable
Root-Login.automaticAktivieresecurityautomatischeupdates:
ErstelledauerhaftesSicherheits-Updates:
apt install unattended-upgrades -y
Review konfiguriereconfiguration in:
/etc/apt/apt.conf.d/50unattended-upgrades
Check schonfor voreingestelltupdates aufregularly:
apt list --upgradable.
With these measures in place, your Nextcloud instance should achieve strong security ratings (e.g., A/A+ on securityheaders.com or Mozilla Observatory) and display no major warnings in the Nextcloud admin security overview.


