Secure_your_data_in_owncloud_nextcloud_with_fail2ban

Daten in deiner Cloud absichern!

Wer eine Nextcloud oder Owncloud Installation auf einem seiner Server am laufen hat, kommt früher oder später in Kontakt mit unliebsamen Bösewichte, welche an die Daten wollen. Wie man Nextcloud absichern kann und den Angreifern am besten an ihrer Arbeit hindern kann, wird euch anhand der Anleitung zur Absicherung des Owncloud oder Nextcloud Dienstes mittels Fail2Ban erklärt.

Fail2Ban als Türsteher für deine Daten

Eine Möglichkeit die Daten in der Cloud abzusichern ist, den Zugriff für Angreifer zu blockieren. Zu diesem Zweck kann man Fail2Ban einsetzen, damit bei wiederkehrenden Anmeldeversuchen mit falschen Benutzername oder Passwort der Angreifer mittels IP-Adresse blockiert wird. Dadurch wird die Anzahl der möglichen Kombinationen die er durchprobieren kann drastisch eingeschränkt. Wichtig ist die richtige Vorbereitung und entsprechende Tests nach den Änderungen.

Vorbereitungen Linux

Damit Fail2Ban die Zeiten zwischen den einzelnen Anmeldeversuchen richtig zuordnet, sollte man die eingestellte Zeitzone von Nextcloud kontrollieren. Dazu öffnet man die Datei config.php im Pfad, in dem man Nextcloud installiert hat. Der Pfad und Dateiname kann als Beispiel so aussehen **/var/www/nextcloud/config/config.php**. Diese PHP-Datei öffnet man mit einem beliebigen Texteditor wie zum Beispiel *vim*.

[code language=bash]
vim /var/www/nextcloud/config/config.php
[/code]

In dieser Datei setzt man die *logtimezone*, also die Zeitzone für die Logeinträge, auf seine [gültige Zeitzone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). In diesem Beispiel auf *Europe/Vienna*.

[code language=bash]
‚logtimezone‘ => ‚Europe/Vienna‘,
[/code]

Danach speichert man die Datei und meldet sich mit einem falschen Passwort auf dem Nextcloud Anmeldeformular an. Dadurch wird ein Logeintrag erzeugt und dieser sollte nun mit der aktuellen Zeit übereinstimmen. Dies kann man im Nextcloud-Log im *data* Verzeichnis verifizieren. Sollte das *data*-Verzeichnis nicht aus dem Nextcloud-Ordner verschoben worden sein, findet ihr die Log-Datei unter **/var/www/nextcloud/data/nextcloud.log**.

Installation & Konfiguration Fail2Ban

Falls nicht bereits Fail2Ban installiert ist kann man dies einfach nachholen. Dazu sollte man zuerst das System bzw. die aktuellen Pakete aktualisieren. Dies geschieht mit dem Befehl:

[code lang=bash]
apt-get update && apt-get upgrade
[/code]

Im Anschluss kann man sich die neueste Version von Fail2Ban installieren:

[code lang=bash]
apt-get install fail2ban
[/code]

Fail2Ban arbeitet mit Filter, welche spezielle Fälle, wie zum Beispiel einen missglückten Anmeldeversuch, registrieren und damit nach einer bestimmten Anzahl von diesen Events die angegebene IP-Adresse blockiert.
Damit diese Anmeldeversuche registriert werden, legt man eine eigene Filterkonfiguration mit folgendem Befehl an:

[code lang=bash]
vim /etc/fail2ban/filter.d/nextcloud.conf
[/code]

Diese Datei befüllt man mit folgendem Filter im Regex-Format.

[code lang=text]
[Definition]
failregex={„reqId“:“.*“,“remoteAddr“:“.*“,“app“:“core“,“message“:“Login failed: ‚.*‘ (Remote IP: ‚‚)“,“level“:2,“time“:“.*“,“method“:“POST“,“url“:“.*“,“user“:“.*“}
ignoreregex =
[/code]

Damit dieser Filter von Fail2Ban berücksichtig wird, muss dieser in der zentralen Konfiguration hinzugefügt werden.

[code lang=bash]
vim /etc/fail2ban/jail.d/defaults-debian.conf
[/code]

In dieser Konfigurationsdatei fügt man am Ende folgenden Text ein.

[code lang=text]
[nextcloud]
enabled = true
port = 80,443
protocol = tcp
filter = nextcloud
maxretry = 3
bantime = 10800
logpath = /var/www/nextcloud/data/nextcloud.log
[/code]

Wichtig sind hier folgende Dinge:

  • enable Zeigt an, dass der Filter aktiv ist
  • port Blockiert bei Sperre alle Zugriffe über Port 80 (HTTP) und 443 (HTTPS)
  • filter Name des Filters bzw. der Filterdatei
  • maxretry Definiert bei wievielen fehlerhaften Anmeldeversuchen die IP gesperrt werden soll
  • bantime Zeit in Sekunden für die Sperre an (10800 Sekunden sind 3 Stunden)
  • logpath Wichtig: Hier muss die Nextcloud Logdatei in dem data-Verzeichnis (wie vorher) angegeben werden!

Damit die Konfiguration aktiv wird muss man Fail2Ban neu starten und den Status prüfen.

[code lang=bash]
service fail2ban restart && fail2ban-client status
[/code]

Dies sollte dann folgenden Output erzeugen. Am Jail mit dem Namen *nextcloud* sieht man das die Konfiguration aktiv ist.

[code lang=bash]
Status
|- Number of jail: 2
`- Jail list: nextcloud, sshd
[/code]

Testing

Um zu überprüfen ob alle Einstellungen passen und Angreifer blockiert werden, sollte man die Erkennung von fehlgeschlagenen Anmeldeversuchen überprüfen. Dies geht mit dem folgenden Befehl.

[code lang=bash]
fail2ban-regex /var/nextcloud/data/nextcloud.log /etc/fail2ban/filter.d/nextcloud.conf
[/code]

Wichtig ist wiederum, dass der Pfad der Nextcloud-Logdatei als auch der Konfiguration stimmen. Als Ausgabe sollte man unter anderem folgende Zeile erhalten.

[code lang=bash]
Lines: 9 lines, 0 ignored, 5 matched, 4 missed [processed in 0.00 sec]
[/code]

Wenn man bei **matched** keine Ergebnisse vorfindet, stimmt entweder der eingestellte Regex-Filter nicht oder man hat sich noch nicht mit einem falschen Passwort versucht anzumelden. Im zweiten Fall geht man auf die Anmeldeseite von Nextcloud und meldet sich mit einem falschen Passwort bei einem z.B. existierenden Benutzernamen an und wiederholt den obenstehenden Befehl. Im Prinzip wird damit kontrolliert ob ein fehlgeschlagener Anmeldeversuch erkannt wird.

Da der Filter und Jail für Fail2Ban bereits aktiv sind kann man sich den aktuellen Status des Jails über folgenden Befehl ausgeben lassen.

[code lang=bash]
fail2ban-client status nextcloud
[/code]

Damit sollte man folgenden Output erhalten.

[code lang=bash]
Status for the jail: nextcloud
|- Filter
| |- Currently failed: 1
| |- Total failed: 1
| `- File list: /var/nextcloud/data/nextcloud.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
[/code]

Man kann nun versuchen sich mehr als drei Mal falsch anzumelden und sollte beim vierten Versuch nicht mehr auf die Nextcloud-Seite kommen. Um den Zugang wieder freizuschalten sollte man folgenden Befehl benutzen, wobei der Platzhalter **** durch die eigene IP-Adresse ausgetauscht werden sollte.

[code lang=bash]
fail2ban-client set nextcloud unbanip
[/code]

Danach sollte der Zugriff auf das Nextcloud Anmeldeformular wieder möglich sein. Wie ihr mit weiteren Maßnahmen eure Nextcloud absichern könnt erfahrt ihr untere den weiterführenden Links.

Nützliche Links