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:

Two-Factor TOTP Provider

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.

Set up two factor authentication

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:

Two-Factor WebAuthn

Im Register Persönlich > Security kann nun der YubiKey für die Anmeldung auf die Nextcloud registriert werden:

Security key

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
fail2ban Statusabfrage

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:

Results from other categories

Anschliessend wird im Register Administration > Security der Antivirus for Files angezeigt:

Antivirus for Files

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:

Virus Eicar Signature

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.