Nextcloud via Fail2Ban absichern

Im Zeitraum vom 09.04.2024 - 28.03.2025 ist der Support eingeschränkt. In dem genannten Zeitraum, befinde ich mich auf einer Weiterbildung.

Was ist Fail2Ban?

Fail2ban (sinngemäß „Fehlschlag führt zum Bann“) ist ein in Python geschriebenes Intrusion Prevention System (Framework zur Vorbeugung gegen Einbrüche), das auf allen POSIX-Betriebssystemen läuft, die ein manipulierbares Paketfiltersystem oder eine Firewall besitzen (z. B. iptables unter Linux).

Update:
-
Unterstützung Debian 10 hinzugefügt

Funktionalität

Der Hauptzweck von fail2ban ist das Bestimmen und Blockieren bestimmter IP-Adressen, die wahrscheinlich zu Angreifern gehören, die sich Zugang zum System verschaffen wollen. fail2ban ermittelt aus Log-Dateien IP-Adressen, die in einem vom Administrator angesetzten Zeitrahmen z. B. öfter versuchen, sich mit falschen Passwörtern anzumelden oder andere gefährliche oder sinnlose Aktionen ausführen. Normalerweise ist fail2ban so konfiguriert, dass es blockierte Adressen nach einer bestimmten Zeit wieder freigibt, um keine seriösen Verbindungsversuche zu blockieren (beispielsweise, wenn die Angreifer-IP dynamisch einem anderen Host zugeteilt wird). Als hilfreich gilt eine Blockierzeit von einigen Minuten, um das Fluten des Servers mit bösartigen Verbindungsversuchen (Brute Force) zu stoppen. Fail2ban ist in der Lage, verschiedene Aktionen auszuführen, wenn eine wahrscheinlich bösartige IP entdeckt wurde, beispielsweise diese IP mit einer Regel in iptables oder der zu TCP-Wrappern gehörenden hosts.deny zu blockieren, um nachfolgende Angriffe zurückzuweisen, E-Mail-Benachrichtigungen oder jede benutzerdefinierte Aktion, die mit Python ausgeführt werden kann. Die Kombination aus Filter und Aktion wird als jail (Gefängnis) bezeichnet und ist in der Lage, bösartige Hosts zu blockieren. Ein "jail" kann für jede Software erstellt werden, die Logdateien erstellt welche sich mit Regulären Ausdrücken auswerten lassen. [...]

Installation

Fail2Ban sollte in der Standardinstallation von Plesk Onyx oder Obsidian schon installiert sein. Sollte dies nicht der Fall sein, kann dies unter Tools & Einstellungen -> Updates nachgeholt werden.

Nextcloud konfiguration

Damit Fail2Ban arbeiten kann, muss die config.php ergänzt werden. Gehen Sie also in Ihre Domain/Subdomain wo sich die Nextcloud Installation befindet und öffnen Sie den File Manager. Navigieren Sie hier in den Ordner config und öffnen Sie die config.php. Ergänzen Sie den Eintrag am Ende mit:

Code: config.php
  'log_type' => 'file',
  'logtimezone' => 'Europe/Berlin',
  'logfile' => '/var/www/vhosts/IHRE_DOMAIN/logs/nextcloud.log',
  'loglevel' => 2,
  'syslog_tag' => 'Nextcloud',

Nextcloud.log anlegen

Damit Fail2Ban die .log Datei auslesen kann, muss diese auch erst mal erstellt werden. Hierfür Navigieren Sie im File Manager in Ihre Domain und öffnen das Verzeichnis logs. Erstellen Sie hier eine neue Datei mit dem Namen nextcloud.log.

Fail2Ban Filter & Jail erstellen

Gehen Sie unter Plesk in die Tools & Einstellungen und öffnen Sie den Reiter Sperren von IP-Adressen (Fail2Ban)

Sind Sie hier angekommen, klicken Sie auf Jail und anschließend auf Filter verwalten.

In diesem Untermenü klicken Sie auf Filter hinzufügen.

Benennen Sie den Filter mit dem Namen nextcloud und fügen Sie folgenden Eintrag hinzu:

Code: nextcloud
[Definition]
failregex = ^{"reqId":".*","remoteAddr":".*","app":"core","message":"Login failed: '.*' \(Remote IP: '<HOST>'\)","level":2,"time":".*"}$
    ^{"reqId":".*","level":2,"time":".*","remoteAddr":".*","user,:".*","app":"no app in context".*","method":".*","message":"Login failed: '.*' \(Remote IP: '<HOST>'\)".*}$
    ^{"reqId":".*","level":2,"time":".*","remoteAddr":".*","user":".*","app":".*","method":".*","url":".*","message":"Login failed: .* \(Remote IP: <HOST>\).*}$
ignoreregex = 

Speichern Sie alles und gehen Sie zurück in das Jail Menü. Hier klicken Sie auf Jail hinzufügen.

Vergeben Sie auch hier den Namen nextcloud wählen Sie im Anschluss den erstellten nextcloud Filter aus und fügen Sie unter Aktionen folgendes hinzu:

Code
iptables-multiport[name="nextcloud", port="80,443", protocol="tcp"]

Unter Protokollpfad geben Sie wieder den Pfad zum Log an.

  • /var/www/vhosts/IHRE_DOMAIN/logs/nextcloud.log

Die unteren zwei Optionen, können Sie nach eigenem Ermessen einstellen. Ich empfehle folgende Einstellung:

EinstellungWert (Sekunden/Versuche)
Zeitraum für IP-Adress-Sperre600
Maximale Anzahl an fehlgeschlagenen Anmeldeversuchen 3

Nun sind alle Einstellungen seitens Fail2Ban und Nextcloud erledigt.

Testen

Jetzt sollten Sie natürlich auch überprüfen, ob das ganze auch funktioniert. Versuchen Sie sich auf Ihre Nextcloud mit einem nicht vorhandenen User einzuloggen. Nach dem Dritten versuch sollte die Seite nicht mehr aufrufbar sein. Auch die Plesk Oberfläche, ist jetzt für die angegebenen 600 Sekunden nicht mehr erreichbar. Entweder Sie warten diese ab, oder Sie rufen unter einer anderen IP-Adresse Plesk auf und nehmen Ihre geblockte IP von der Fail2Ban-Liste. Mit der CLI können Sie auch folgenden

Befehl nutzen und sehen, ob es einen positiven Match im Log gab:

Code
fail2ban-regex /var/www/vhosts/YOUR_DOMAIN/logs/nextcloud.log /etc/fail2ban/filter.d/nextcloud.conf

Über den Autor

Ich bin IT-Spezialist im Fachbereich der IT-Administratoren. Neben Beruf und Familie, erstelle ich als, Teil meines Hobbys, gerne Tutorials, sowie WoltLab Stile. Aktuell befinde ich mich auf meinem Informationstechnikermeister.

Foxly Team

Kommentare