Fail2ban überwacht die Protokolle Ihres Servers und sperrt IP-Adressen automatisch, wenn von ihnen zu viele fehlgeschlagene Anmeldeversuche ausgehen. So bremsen Sie Angriffe auf SSH, Mailserver oder Webanwendungen wirksam aus. Diese Anleitung zeigt die Installation unter Debian und Ubuntu, eine sinnvolle Grundkonfiguration und die wichtigsten Befehle für den Alltag.
So funktioniert Fail2ban
Fail2ban arbeitet mit sogenannten Jails. Ein Jail besteht aus:
- einem Filter, der in einem Log nach Fehlversuchen sucht
- einer Aktion, die eine IP-Adresse sperrt, meist über die Firewall
- Grenzwerten: wie viele Fehlversuche (
maxretry) in welchem Zeitraum (findtime) zu einer Sperre welcher Dauer (bantime) führen
Schritt 1: Installation
sudo apt update
sudo apt install -y fail2ban
Unter Debian 12 und neuer werden Anmeldungen nicht mehr in eine Datei wie /var/log/auth.log geschrieben, sondern nur ins systemd-Journal. Fail2ban muss deshalb das Journal lesen. Das stellen wir in Schritt 2 ein.
Schritt 2: Eigene Konfiguration anlegen
Ändern Sie niemals die Datei jail.conf, sie wird bei Updates überschrieben. Legen Sie stattdessen eine eigene Datei an:
sudo tee /etc/fail2ban/jail.local > /dev/null <<'EOF'
[DEFAULT]
# Eigene IP-Adressen nie sperren (Leerzeichen-getrennt)
ignoreip = 127.0.0.1/8 ::1 198.51.100.20
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
# Wiederholungstäter länger sperren
bantime.increment = true
bantime.maxtime = 1w
[sshd]
enabled = true
EOF
Ersetzen Sie 198.51.100.20 durch die feste IP-Adresse Ihres Büros, falls vorhanden. So sperren Sie sich nicht selbst aus, wenn Sie sich einmal vertippen.
Mit bantime.increment verlängert sich die Sperre bei jeder weiteren Sperrung derselben Adresse, bis maximal eine Woche.
Schritt 3: Fail2ban starten
sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status
Die Ausgabe sollte das Jail sshd auflisten.
Schritt 4: Status eines Jails anzeigen
sudo fail2ban-client status sshd
Sie sehen, wie viele Fehlversuche erkannt wurden und welche Adressen aktuell gesperrt sind. Auf einem Server mit offenem SSH-Port erscheinen hier typischerweise schon nach wenigen Stunden die ersten Einträge.
Die wichtigsten Befehle
| Befehl | Wirkung |
|---|---|
sudo fail2ban-client status | alle aktiven Jails anzeigen |
sudo fail2ban-client status sshd | Details und gesperrte Adressen eines Jails |
sudo fail2ban-client set sshd unbanip 203.0.113.5 | eine Adresse entsperren |
sudo fail2ban-client set sshd banip 203.0.113.5 | eine Adresse manuell sperren |
sudo fail2ban-client banned | alle gesperrten Adressen aller Jails |
sudo fail2ban-client reload | Konfiguration neu laden |
Weitere Dienste schützen
Fail2ban bringt fertige Filter für viele Dienste mit. Sie finden sie im Verzeichnis /etc/fail2ban/filter.d/. Ein Jail aktivieren Sie, indem Sie es in jail.local ergänzen.
Beispiel: nginx mit HTTP-Authentifizierung
[nginx-http-auth]
enabled = true
backend = auto
logpath = /var/log/nginx/error.log
Beispiel: Postfix und Dovecot
[postfix]
enabled = true
mode = aggressive
[dovecot]
enabled = true
Bei Diensten, die in eine Logdatei statt ins Journal schreiben, setzen Sie wie im nginx-Beispiel backend = auto und den passenden logpath.
Einen Filter testen
Mit fail2ban-regex prüfen Sie, ob ein Filter Ihre Logeinträge erkennt, ohne etwas zu sperren:
sudo fail2ban-regex /var/log/nginx/error.log /etc/fail2ban/filter.d/nginx-http-auth.conf
Für das Journal:
sudo fail2ban-regex systemd-journal sshd
Die Ausgabe zeigt, wie viele Zeilen gepasst haben.
Fehlerbehebung
Das Jail sshd startet nicht
Prüfen Sie mit sudo journalctl -u fail2ban -n 50 die Fehlermeldung. Lautet sie, dass /var/log/auth.log nicht gefunden wurde, fehlt die Zeile backend = systemd.
Es wird nichts gesperrt
- Läuft SSH auf einem anderen Port, ergänzen Sie im Jail
port = 2222. - Prüfen Sie mit
fail2ban-regex, ob der Filter Treffer liefert. - Bei Docker-Containern landen Logs oft nicht dort, wo Fail2ban sucht. Hier muss der
logpathauf die Logdateien des Containers zeigen.
Ich habe mich selbst gesperrt
Melden Sie sich über die Konsole in Ihrem Kundenbereich an oder warten Sie den Ablauf der Sperre ab. Entsperren Sie Ihre Adresse mit unbanip und tragen Sie sie unter ignoreip ein.
Fail2ban ist kein Ersatz
Fail2ban reduziert Angriffe, ersetzt aber keine sichere Grundkonfiguration. Deaktivieren Sie zusätzlich die Anmeldung per Passwort, wie in unserem Artikel SSH-Zugang absichern beschrieben.
Fail2ban eignet sich für jeden vServer und Dedicated Server mit öffentlich erreichbaren Diensten.
