Kürzlich habe ich einen PoC für eine private Cloud Lösung, welche im internen Rechenzentrum gehostet wird, durchgeführt. Die getestete Lösung heisst Nextcloud und läuft beispielsweise auch auf einem Raspberry Pi. In diesem Blog möchte ich mich auf das System Hardening von Nextcloud fokussieren und diesbezüglich Tricks und Tipps mit euch teilen. Folgende Massnahmen tragen dazu bei, die Nextcloud gegen Sicherheitsschwachstellen zu härten (alle Befehle als Root ausgeführt):
Zwei-Faktor-Authentifizierung
Die Nextcloud bietet die Möglichkeit der Nutzung einer klassischen Authentifizierungs-App, wobei ein zeitlich begrenztes Passwort generiert wird. Für das TOTP muss auf der Nextcloud die dazu benötigte App «Two-Factor TOTP Provider» aktiviert werden:
Nun gibt es zwei Möglichkeiten. Unter dem Register Persönlich kann nun jeder User die Zwei-Faktor-Authentifizierung aktivieren oder man geht als Administrator unter den Register Verwaltung und erzwingt die Zwei-Faktor-Authentifizierung für alle User. Wenn sich der User nun das nächste Mal anmeldet, wird er dazu aufgefordert, den zweiten Faktor einzurichten.
Dafür eignet sich beispielsweise die «Google Authenticator» App welche sowohl für iOS wie auch für Android Geräte zur Verfügung steht.
Ist man in Besitz eines Yubikeys, kann in der Nextcloud die App «Two-Factor WebAuthn» installiert und aktiviert werden:
Im Register Persönlich > Security kann nun der YubiKey für die Anmeldung auf die Nextcloud registriert werden:
Fail2ban
Fail2ban prüft in den Logs des Servers die IP-Adressen, welche immer wieder versuchen, sich mit falschen Logindaten anzumelden. Eine definierte Anzahl an Fehlversuchen sorgt dann automatisch dafür, dass die IP-Adresse für einen konfigurierten Zeitraum blockiert (oder eben gebannt) wird.
Installiert wird fail2ban mit folgendem Befehl:
apt install fail2ban -y |
Nun wird der fail2ban Filter eingerichtet. Dieser filtert die Nextcloud Logs nach speziellen Einträgen die den Fingerabdruck einer Anmeldung tragen damit fail2ban weiss was eine Anmeldung ist und was blockiert werden soll. Die Filterdatei wird mit folgendem Befehl angelegt und konfiguriert:
nano /etc/fail2ban/filter.d/nextcloud.conf |
Nun kann die Vorlage, welche Nextcloud für das fail2ban zur Verfügung stellt, in das soeben erstelle File kopiert werden:
[Definition]
_groupsre = (?:(?:,?\s*“\w+“:(?:“[^“]+“|\w+))*) failregex = ^\{%(_groupsre)s,?\s*“remoteAddr“:“<HOST>“%(_groupsre)s,?\s*“message“:“Login failed: ^\{%(_groupsre)s,?\s*“remoteAddr“:“<HOST>“%(_groupsre)s,?\s*“message“:“Trusted domain error. datepattern = ,?\s*“time“\s*:\s*“%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?“ |
Anschliessend wird noch in der Jail-Datei definiert, wie die vom Nextcloud-Filter gefundene und fehlgeschlagene Authentifizierungsversuche behandelt werden sollen:
nano /etc/fail2ban/jail.d/nextcloud.local |
Inhalt der nextclcoud.local Datei:
[nextcloud]
backend = auto enabled = true port = 80,443 protocol = tcp filter = nextcloud maxretry = 5 bantime = 86400 findtime = 43200 logpath = /path/to/data/directory/nextcloud.log |
maxretry = Anzahl Fehlversuche
bantime = Zeit in Sekunden, wie lange die IP-Adresse, gesperrt wird
findtime = Anzahl Sekunden nach dem der Zähler für maxretry zurückgesetzt wird
logpath = Pfad zur Nextcloud Logdatei. In der Regel liegt diese im Datenverzeichnis der Nextcloud.
Schlussendlich den fail2ban Dienst neu starten:
service fail2ban restart |
Nun kann der fail2ban Status abgefragt werden:
fail2ban-client status nextcloud |
Möchte man eine IP-Adresse wieder freigeben, ohne die bantime abzuwarten, dann kann dies mit folgendem Befehl gemacht werden :
fail2ban-client set nextcloud unbanip <ipadress> |
Auto Logout
Nach einer festgelegten Zeit wird automatisch ein Logout durchgeführt und die Session beendet. Anschliessend muss man sich als Benutzer bei der Nextcloud erneut authentifizieren.
Dazu wird die config Datei der Nextcloud bearbeitet:
nano /var/www/nextcloud/config/config.php |
Folgende Zeilen werden hinzugefügt:
‚remember_login_cookie_lifetime‘ => 1296000,
’session_lifetime‘ => 1800, ’session_keepalive‘ => false, ‚auto_logout‘ => true, |
Session_lifetime = wie lange bleibt eine Sitzung in Sekunden aktiv
Anti-Virus
Das Potential, eine mit Virus infizierte Datei über mehrere Geräte zu verteilen ist sehr hoch, da Nextcloud primär oft als Dateizentrale genutzt wird, um die Dateien auf mehreren Geräten zu synchronisieren. Nextcloud bietet hierzu auch eine Anwendung, welche die Dateien nach Viren scannt.
Zuerst wird der CalmAV Dienst auf dem Server installiert:
apt install clamav clamav-freshclam clamav-daemon -y |
Anschliessend wird die Datenbank aktualisiert. Dazu wird der CalmAV Dienst gestoppt:
service clamav-freshclam stop |
Anschliessend wird die Datenbank aktualisiert:
freshclam |
Schliesslich kann der CalmAV Dienst wieder gestartet werden:
service clamav-freshclam start |
Damit auch grössere Dateien (in meinem Beispiel bis 50 MB) und auch Archivdateien bis zu 25 Unterverzeichnissen untersucht werden können wird die Konfigurationsdatei wie folgt angepasst:
cp /etc/clamav/clamd.conf /etc/clamav/clamd.conf.bak
sed -i „s/MaxFileSize.*/MaxFileSize 50M/“ /etc/clamav/clamd.conf sed -i „s/MaxDirectoryRecursion.*/MaxDirectoryRecursion 25/“ /etc/clamav/clamd.conf sed -i „s/PCREMaxFileSize.*/PCREMaxFileSize 50M/“ /etc/clamav/clamd.conf sed -i „s/StreamMaxLength.*/StreamMaxLength 50M/“ /etc/clamav/clamd.conf |
Damit die Änderungen übernommen werden müssen folgende Dienste neu gestartet werden:
service clamav-freshclam restart && service clamav-daemon restart |
Auf der Nextcloud muss unter Apps noch die benötigte App heruntergeladen und aktiviert werden:
Anschliessend wird im Register Administration > Security der Antivirus for Files angezeigt:
Hier muss der Mode auf ClamAV Deamon (Socket) eingestellt werden. Zudem würde ich empfehlen die Stream Lenght auf 50 MB (52428800 Bytes) anzupassen. Wenn eine infizierte Datei gefunden wird, dann soll diese gelöscht werden, also erst gar nicht auf die Nextcloud hochgeladen wird.
Um die Funktion von CalmAV zu testen, habe ich versucht ein Anti Malware Testfile auf die Nextcloud hochzuladen. Die Datei wird von der CalmAV sofort erkannt und der Upload unterbunden:
Schlusswort
Mit diesen Einstellungen wird Ihre Nextcloud schon viel sicherer, da diese nach einer Nextcloud Installation nicht per default vorhanden sind und manuell nachinstalliert werden müssen. Unabhängig von meinen Tricks und Tipps bezüglich dem System Hardening von Nextcloud stellen die Entwickler von Nextcloud im Internet einen Scan zur Verfügung, womit man die eigene Nextcloud Umgebung nach Sicherheitsproblemen scannen kann: scan.nextcloud.com/. Um den Scan durchzuführen, muss die Nextcloud im Internet erreichbar sein.
Lee Monade
Lee Monade ist Security Engineer bei AVANTEC. Neben seiner Leidenschaft für Informatik verbringt er seine Freizeit abwechslungsweise im Gym oder in der Natur. Er liebt den Strand und die Sonne sowie den Duft von Möglichkeiten am frühen Morgen.