Skip to content

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.

Installation des Paketes fail2ban
    sudo apt-get update
    sudo apt-get install fail2ban

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:

Erstellen der lokalen Konfiguration
    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Schritt 3 – Ändere den Abschnitt [DEFAULT] und füge Konfigurationsdaten hinzu

Öffne die Konfigurationsdatei jail.local mit einem Texteditor:

Editieren der Datei jail.local
    sudo nano /etc/fail2ban/jail.local

Ändere den Abschnitt [DEFAULT] wie folgt:

Abschnitt DEFAULT ändern
    [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
Hier kann man mit 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]:

E-Mail konfigurieren
    [DEFAULT]
    ## ...
    action = %(action_mw)s
    destemail = sys2458@gmx.net
    sender = sys2458@gmx.net

Schritt 5 – Starte den Fail2Ban-Dienst neu

Restart des Service
    sudo service fail2ban restart

Schritt 6 – Überprüfe den Status des Fail2Ban-Dienstes

Status des Service pürfen
    sudo service fail2ban status

Die Protokolle sollten wie folgt aussehen:

Ausgabe auf der Kommandozeile
    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:

Aktivieren des SSHD Service
    sudo nano /etc/fail2ban/jail.local

Suche nach dem Abschnitt [sshd]:

Editieren in nano
    #
    ### SSH-Server
    #

    [sshd]

Füge hinter [sshd] „enabled“ hinzu:

Editieren in nano
    #
    # SSH-Server
    #

    [sshd]
    enabled = true

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

Editieren in nano
    sudo nano /etc/fail2ban/filter/vaultwarden.conf

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

Editieren in nano
    [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:

Editieren in nano
    [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

Restart des Service
    sudo service fail2ban restart

Überprüfe den Status des Fail2Ban-Dienstes

Prüfen des Service
    sudo service fail2ban status