In diesem Tutorial wird erklärt, wie Fail2Ban auf dem Host debsrv, einem Debian-Linux-System installiert und konfiguriert wird.
Die Funktionsweise ist wie folgt:
Wenn für den konfigurierten Service eine IP-Adresse zu viele fehlgeschlagene Anmeldeversuche registriert werden oder andere Kriterien in den Logfiles des Service übereinstimmen, sperrt Fail2Ban diese IP-Adresse für eine festgelegte Sperrdauer.
Voraussetzungen
Note
Wir benötigen den APT-Paketmanager und einen Editor, zum Beispiel vi oder nano, um Konfigurationsdateien zu erstellen und zu bearbeiten.
Schritt 1 – Fail2Ban mit dem APT-Paketmanager installieren
Info
Alle Befehle werden mit sudo ausgeführt, da Root-Rechte erforderlich sind.
Schritt 2 – Die Standardkonfigurationsdatei an einen neuen Speicherort kopieren
Fail2Ban verfügt über zwei Konfigurationsdateien:
- /etc/fail2ban/jail.conf
- /etc/fail2ban/jail.d/defaults-debian.conf.
Man sollte diese Dateien nicht ändern, da sie bei einer Aktualisierung des Pakets möglicherweise überschrieben werden.
Es wird empfohlen, eine .local-Datei zu erstellen, die die Einstellungen der .conf-Datei überschreibt:
Schritt 3 – Ändere den Abschnitt [DEFAULT] und füge Konfigurationsdaten hinzu
Öffne die Konfigurationsdatei jail.local mit einem Texteditor:
Ändere den Abschnitt [DEFAULT] wie folgt:
[DEFAULT]
## „ignoreip“ kann eine Liste von IP-Adressen, CIDR-Masken oder DNS-Hosts sein. Fail2Ban
## sperrt keinen Host, der mit einer Adresse in dieser Liste übereinstimmt. Mehrere Adressen
## können durch Leerzeichen (und/oder Kommas) getrennt definiert werden.
ignoreip = 127.0.0.1/8 ::1
## „bantime“ ist die Anzahl der Sekunden, für die ein Host gesperrt wird.
bantime = 3600
## Ein Host wird gesperrt, wenn er innerhalb der letzten „findtime“
## Sekunden „maxretry“ erreicht hat.
findtime = 600
## „maxretry“ ist die Anzahl der Fehlversuche, bevor ein Host gesperrt wird.
maxretry = 5
ignoreip = 192.168.58.0/24, 127.0.0.1/8, ::1 den Host selbst und das lokale LAN von einer Sperrung ausschließen.
Speichere die Konfigurationsdatei.
Schritt 4 – Optional: E-Mail-Benachrichtigungen konfigurieren
Optional kann man eine E-Mail-Benachrichtigungen in der Datei /etc/fail2ban/jail.local konfigurieren.
Dazu ändere den Abschnitt [DEFAULT]:
[DEFAULT]
## ...
action = %(action_mw)s
destemail = sys2458@gmx.net
sender = sys2458@gmx.net
Schritt 5 – Starte den Fail2Ban-Dienst neu
Schritt 6 – Überprüfe den Status des Fail2Ban-Dienstes
Die Protokolle sollten wie folgt aussehen:
06. Nov. 23:13:44 v22039013573286090 systemd[1]: Fail2Ban-Dienst wird gestartet...
06. Nov. 23:13:44 v22039013573286090 systemd[1]: Fail2Ban-Dienst gestartet.
06. Nov. 23:13:44 v22039013573286090 fail2ban-server[2352904]: Server bereit
Konfigurationen
SSHD
Aktiviere SSHD im Abschnitt [sshd] der Konfigurationsdatei jail.local
Öffne die Konfigurationsdatei mit einem Texteditor:
Suche nach dem Abschnitt [sshd]:
Füge hinter [sshd] „enabled“ hinzu:
Mit dieser Konfiguration aktivieren wir SSHD, damit Fail2Ban den Protokollpfad auf Authentifizierungsfehler überwachen kann.
Speichere die Konfigurationsdatei.
Vaultwarden
Aktiviere Vaultwarden im Abschnitt [vaultwarden] in der Konfigurationsdatei jail.local
Erstelle einen neuen Filter in /etc/fail2ban/filter
Es gibt bereits einen Filter bitwarden. Inwieweit man diesen anpassen kann, muss noch getestet werden.
Füge folgenden Inhalt in die neu erstellte vaultwarden.conf ein
[Definition]
failregex = ^.*Benutzername oder Passwort ist falsch\. Versuchen Sie es erneut\. IP: <HOST>\. Benutzername:.*$
ignoreregex =
Dann aktiviere den Filter in der /etc/fail2ban/jail.local.
Füge am Ende folgenden Abschnitt ein:
[vaultwarden]
enabled = true
port = 80,8080
filter = vaultwarden
logpath = /opt/docker/vaultwarden/data/vaultwarden.log
maxretry = 5
bantime = 1h
action = iptables-multiport[name=vaultwarden, port="http,https,8080", protocol=tcp]
Tip
Wichtig bei Docker: Wenn Fail2ban direkt auf dem Host läuft, blockiert das normale iptables-Kommando oft den Docker-Traffic nicht, da Docker eigene Routing-Tabellen nutzt. Wenn gesperrte IPs weiterhin Zugriff haben, ändere die action-Zeile zu: action = iptables-allports[name=vaultwarden, chain=FORWARD]
Starte den Fail2Ban-Dienst neu
Überprüfe den Status des Fail2Ban-Dienstes