Skip to main content

Part 4: Recommended Security Settings and System Hardening

Sinnvolle Einstellungen fuer Nextcloud um das System sicherer zu machen.Recommended Nextcloud Security Settings

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 an (jedepending nachon Konsoleconsole oderor SSH).SSH Führeaccess) sofortand aus:immediately run:

apt update && apt full-upgrade -y
.
Das
holt

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:

hast du
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

und

Set:

setze
PermitRootLogin prohibit-password
sowie PasswordAuthentication no
.
Generiere
auf

Generate deineman ClientSSH einenkey SSH-Schlüsselon (your client:

ssh-keygen
),
kopiere

Copy denthe Public-Keypublic mitkey to the server:

ssh-copy-id ncadmin@deine-ncadmin@your-vm-ip
und

Restart starteSSH:

den Dienst neu:
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
und

Add:

füge hinzu:
*/5 * * * * php -f /var/www/cloud.zn80.net/cron.php
.
Alternativ

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
anzulegen.

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
.
Es

Enable überwachtand SSH-Logsstart automatischit:

und bannt IPs nach mehreren Fehlversuchen (Standard: 5 in 10 Minuten). Die Debian-Defaults sind für Homelab meist ausreichend. Starte und aktiviere:
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:

Führe
sudo -u www-data php occ maintenance:repair
aus,

Add damitsecurity Nextcloud sie automatisch aktualisiert. Ergänze zusätzlich Security-Headersheaders in derthe Apache-VirtualHost-KonfigurationApache VirtualHost configuration (innerhalbpreferably under <VirtualHost *:80>443) oder 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ötigeUnnecessary Referrer-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
  • → Ja (leitet HTTP → HTTPS um)
  • HSTS Enabled
  • → Ja
  • HSTS Subdomains → Ja (fallsif duapplicable)
  • Subdomains mit abdeckst)

NPMNextcloud setztexpects dannat automatisch einen vernünftigen HSTS-Header (meist max-age=31536000 oder ähnlich).least:

Nextcloud erwartet mindestens

max-age=15552000
(ca.

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ützliche

Additional 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


diesen

Adjust 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 770 und/srv/cloud.zn80.net/data
chown -R www-data:www-data /srv/cloud.zn80.net/data
gesetzt

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
.
Erlaube

Allow nurnecessary SSHports:

(und später HTTP/HTTPS für Nextcloud):
ufw allow OpenSSH
bzw. ufw allow 80,443/tcp
.
Aktiviere

Enable mitand verify:

ufw enable
und prüfe den Status mit ufw status verbose
.

UFW blocktblocks allesall andereother standardmäßigports by ein guter Schutz vor unnötig offenen Ports.default.

Zusätzliche
Empfehlungen

Additional fürSecurity mehrRecommendations

Sicherheit

    Erstelle

  • Use einena dedicated sudo-fähigencapable Useruser ohneand unnötigeavoid Rechtepermanent undroot vermeidelogin.
  • dauerhaftes
  • Enable Root-Login.automatic Aktivieresecurity automatischeupdates:
  • Sicherheits-Updates:
apt install unattended-upgrades -y
und

Review konfiguriereconfiguration in:

/etc/apt/apt.conf.d/50unattended-upgrades
(meist

Check schonfor voreingestelltupdates aufregularly:

security).
Überprüfe regelmäßig mit
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.