Wenn Sie die Anweisungen zur SSH-Sicherung befolgt haben, schützt Fail2ban Ihren SSH-Zugang bereits. Auf einem Webserver greifen Bots jedoch vor allem alles andere an: Anmeldeformulare, Administrationsseiten und vergessene Konfigurationsdateien. Diese Anleitung erweitert Fail2ban auf Nginx, WordPress und den E-Mail-Verkehr und fügt eine langfristige Sperre für wiederkehrende Angreifer hinzu.
1. Wie Fail2ban entscheidet
Fail2ban vereint drei Elemente in einem Gefängnis :
- ein Filter, ein regulärer Ausdruck, der einen böswilligen Versuch in einem Protokoll erkennt;
- von Schwellenwerte :
maxretryVersuche innerhalb eines Zeitfensters vonfindtimelösen eine Verbannung vonbantime; - eine Maßnahme, in der Regel eine Firewall-Regel, die die Adresse blockiert.
Fail2ban stellt Dutzende von gebrauchsfertigen Filtern in /etc/fail2ban/filter.d/. Ändern Sie niemals die Dateien .conf Mitgeliefert: Speichern Sie Ihre Einstellungen in Dateien .local, die durch Updates nicht überschrieben werden.
2. Eine saubere Datenbank mit Whitelist
Beginnen Sie mit /etc/fail2ban/jail.local :
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
banaction = ufw
ignoreip = 127.0.0.1/8 ::1 VOTRE_IP_FIXE
ignoreip ist unerlässlich: Geben Sie dort die Adresse Ihres Büros oder Ihres Überwachungsservers ein. Ohne diese Angabe kann eine Reihe von kurz aufeinanderfolgenden legitimen Verbindungen – wie beispielsweise ein Bereitstellungsskript, das sich mehrmals neu verbindet – dazu führen, dass Sie von Ihrem eigenen Server gesperrt werden.
3. Die Falle des Backends
Fail2ban liest entweder Protokolldateien oder das systemd-Protokoll. SSH schreibt in das systemd-Protokoll, insbesondere unter Debian 12, während Nginx in Dateien schreibt. Wenn Sie Folgendes eintragen: backend = systemd im Abschnitt [DEFAULT], die Nginx-Jails ignorieren deren logpath und sehen nie etwas, ohne dass eine Fehlermeldung angezeigt wird. Stellen Sie daher das Backend ein von jail : systemd für SSH, auto für Dienste, die in Dateien schreiben, wie in den folgenden Beispielen.
4. Nginx schützen
Fügen Sie hinzu zu jail.local :
[sshd]
enabled = true
backend = systemd
maxretry = 3
bantime = 24h
[nginx-http-auth]
enabled = true
backend = auto
port = http,https
logpath = /var/log/nginx/error.log
[nginx-botsearch]
enabled = true
backend = auto
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 2
[nginx-limit-req]
enabled = true
backend = auto
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 10
nginx-http-authVerhindert wiederholte Fehlversuche beim Zugriff auf durch ein Nginx-Passwort geschützte Bereiche.nginx-botsearchErkennt Roboter, die auf Ihrer Website nach Verwaltungsseiten und bekannten Skripten suchen.nginx-limit-reqSperrt Adressen, die regelmäßig das Anfrage-Limit von Nginx überschreiten. Dies funktioniert nur, wenn Sie eine Anweisung konfiguriert habenlimit_req, beschrieben in die Auswirkungen eines DDoS-Angriffs zu begrenzen.
5. Das WordPress-Anmeldeformular schützen
Es wird kein WordPress-Filter bereitgestellt. Erstellen Sie /etc/fail2ban/filter.d/wordpress.conf :
[Definition]
failregex = ^<HOST> .* "POST /wp-login\.php
^<HOST> .* "POST /xmlrpc\.php
ignoreregex =
Anschließend das entsprechende Jail:
[wordpress]
enabled = true
backend = auto
port = http,https
filter = wordpress
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 10m
bantime = 6h
Ein legitimer Nutzer sendet das Formular ein- oder zweimal ab; ein Bot hingegen Dutzende Male. Wenn Sie mehrere Websites mit separaten Protokolldateien hosten, listen Sie diese alle in mehreren Zeilen in logpath. Informationen zur Konfiguration von WordPress selbst finden Sie unter WordPress auf einem VPS installieren.
6. E-Mail-Sicherheit
Wenn der Server E-Mails empfängt oder Benutzer über SMTP authentifiziert:
[postfix]
enabled = true
backend = systemd
mode = aggressive
[postfix-sasl]
enabled = true
backend = systemd
maxretry = 3
Der Modus aggressive Erkennt zudem Weiterleitungsversuche und nicht existierende Adressen. Ein Server, der lediglich Benachrichtigungen versendet, benötigt diese „Jails“ nicht: siehe Postfix konfigurieren.
7. Wiederholungstäter bestrafen
Viele Bots kehren unmittelbar nach Ablauf ihrer Sperre zurück. Die Sperre recidive liest das eigene Protokoll von Fail2ban aus und sperrt jede Adresse, die an einem Tag mehrmals gesperrt wurde, für eine Woche:
[recidive]
enabled = true
backend = auto
logpath = /var/log/fail2ban.log
bantime = 1w
findtime = 1d
maxretry = 3
8. Einen Filter vor der Aktivierung testen
Ein Filter, der auf nichts zutrifft, schützt vor nichts; ein zu weit gefasster Filter schreckt Ihre Besucher ab. Testen Sie ihn anhand der tatsächlichen Zeitung:
fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/wordpress.conf
Der Befehl gibt an, wie viele Zeilen übereinstimmen. Wenden Sie anschließend die Konfiguration an:
fail2ban-client -t && systemctl restart fail2ban
fail2ban-client status
Der erste Befehl überprüft die Syntax der gesamten Konfiguration, der letzte listet die aktiven Jails auf.
9. Sperren verwalten
fail2ban-client status wordpress # adresses bannies par une jail
fail2ban-client set wordpress unbanip 203.0.113.10 # débannir une adresse
fail2ban-client get sshd ignoreip # voir la liste blanche
fail2ban-client banned # toutes les adresses bannies
Falls Sie sich selbst gesperrt haben, melden Sie sich bitte über eine andere Verbindung an, beispielsweise über die Internetfreigabe Ihres Mobiltelefons oder über die Notfallkonsole. Heben Sie anschließend die Sperre für Ihre Adresse auf und fügen Sie diese zu ignoreip.
Häufig gestellte Fragen
Kann Fail2ban meine eigenen Besucher sperren?
Ja, wenn ein Filter zu weit gefasst ist oder ein Schwellenwert zu niedrig liegt. Testen Sie jeden Filter mit „fail2ban-regex“, bevor Sie ihn aktivieren, legen Sie angemessene Schwellenwerte fest und fügen Sie Ihre festen Adressen in die „ignoreip“-Datei ein. Beobachten Sie außerdem die Anzahl der gesperrten Adressen in den ersten Tagen.
Warum sperrt mein Nginx-Jail niemanden?
In den meisten Fällen ist „backend = systemd“ im Abschnitt „DEFAULT“ definiert: Die Jail liest dann das systemd-Protokoll anstelle der in „logpath“ angegebenen Datei, in die Nginx schreibt. Setzen Sie „backend = auto“ für Jails, die Dateien lesen, und überprüfen Sie den Filter mit „fail2ban-regex“.
Schützt Fail2ban vor einem DDoS-Angriff?
Nein. Er zielt auf einzelne Adressen ab, die innerhalb weniger Sekunden oder Minuten wiederholt Versuche unternehmen. Ein verteilter Angriff geht von Tausenden von Adressen aus und überlastet die Verbindung: Er muss bereits im Vorfeld, im Netzwerk des Hosting-Anbieters, gefiltert werden.
Wie lange sollte eine Adresse gesperrt werden?
Bei den meisten Bots reicht eine Stunde aus, danach wechseln sie zu einem anderen Ziel. Reservieren Sie längere Sperren für SSH und Wiederholungstäter mithilfe der „Jail Recidive“-Funktion. Sehr lange Sperren für alle Nutzer benachteiligen letztendlich legitime Nutzer, deren IP-Adresse einen neuen Besitzer hat.










