Fail2ban — Brute-Force-Angriffe automatisch abwehren
Praxis-Guide zu Fail2ban — Logdateien überwachen, IPs per Firewall sperren und Brute-Force-Angriffe auf SSH & Co. mit fail2ban-client abwehren.
Fail2ban ist dein automatischer Türsteher gegen Brute-Force-Angriffe: Das Tool durchsucht laufend Logdateien – etwa die SSH-Authentifizierungs-Logs – nach fehlgeschlagenen Anmeldeversuchen. Häufen sich die Treffer einer IP-Adresse innerhalb eines Zeitfensters, sperrt Fail2ban sie automatisch per Firewall (iptables oder nftables). Die Konfiguration ist in sogenannte Jails gegliedert – pro Dienst (etwa sshd) ein eigenes Regelwerk aus Filter, Action und Schwellwerten. Gesteuert wird alles über fail2ban-client. Dieser Guide zeigt dir die wichtigsten Kommandos für den Alltag – von der Status-Abfrage über manuelle Bans bis zum Testen eigener Filter-Regex.
Dienst-Verwaltung
fail2ban-client status — Zeigt den Gesamtstatus und die Liste der aktiven Jails.
sudo fail2ban-client statusfail2ban-client status <jail> — Zeigt den Status eines bestimmten Jails (gesperrte IPs, Fehlversuche).
sudo fail2ban-client status sshdfail2ban-client start — Startet den Fail2ban-Server.
sudo fail2ban-client startfail2ban-client stop — Stoppt den Fail2ban-Server.
sudo fail2ban-client stopfail2ban-client reload — Lädt die Konfiguration neu, ohne den Dienst neu zu starten.
sudo fail2ban-client reloadfail2ban-client reload <jail> — Lädt die Konfiguration eines bestimmten Jails neu.
sudo fail2ban-client reload sshdSperren & Entsperren
fail2ban-client set <jail> banip <ip> — Sperrt eine IP manuell in einem Jail.
sudo fail2ban-client set sshd banip 192.168.1.100fail2ban-client set <jail> unbanip <ip> — Entsperrt eine IP in einem Jail.
sudo fail2ban-client set sshd unbanip 192.168.1.100fail2ban-client unban <ip> — Entsperrt eine IP in allen Jails.
sudo fail2ban-client unban 192.168.1.100fail2ban-client unban --all — Entsperrt alle IPs in allen Jails.
sudo fail2ban-client unban --allfail2ban-client banned — Zeigt alle aktuell gesperrten IPs über alle Jails hinweg.
sudo fail2ban-client bannedJail-Konfiguration
fail2ban-client get <jail> maxretry — Zeigt die maximale Anzahl an Fehlversuchen für ein Jail.
sudo fail2ban-client get sshd maxretryfail2ban-client set <jail> maxretry <n> — Setzt die Anzahl der Fehlversuche vor einer Sperre (zur Laufzeit).
sudo fail2ban-client set sshd maxretry 3fail2ban-client get <jail> bantime — Zeigt die Sperrdauer eines Jails.
sudo fail2ban-client get sshd bantimefail2ban-client set <jail> bantime <seconds> — Setzt die Sperrdauer (zur Laufzeit).
sudo fail2ban-client set sshd bantime 3600fail2ban-client get <jail> findtime — Zeigt das Zeitfenster, in dem Fehlversuche gezählt werden.
sudo fail2ban-client get sshd findtimefail2ban-client set <jail> addignoreip <ip> — Setzt eine IP auf die Whitelist (wird nie gesperrt) – ideal für die eigene IP-Adresse, damit du dich nicht selbst aussperrst.
sudo fail2ban-client set sshd addignoreip 10.0.0.1Filter testen
fail2ban-regex <logfile> <filter> — Testet eine Filter-Regex gegen eine Logdatei.
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conffail2ban-regex '<log-line>' '<regex>' — Testet eine Regex gegen eine einzelne Log-Zeile.
fail2ban-regex 'Failed password for root from 1.2.3.4' 'Failed .* from <HOST>'fail2ban-regex --print-all-matched <logfile> <filter> — Zeigt alle passenden Zeilen einer Logdatei.
sudo fail2ban-regex --print-all-matched /var/log/nginx/error.log /etc/fail2ban/filter.d/nginx-http-auth.confLogs & Fehlersuche
fail2ban-client get loglevel — Zeigt das aktuelle Log-Level.
sudo fail2ban-client get loglevelfail2ban-client set loglevel <level> — Setzt das Log-Level (CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG).
sudo fail2ban-client set loglevel DEBUGtail -f /var/log/fail2ban.log — Beobachtet das Fail2ban-Log in Echtzeit.
tail -f /var/log/fail2ban.logfail2ban-client get <jail> logpath — Zeigt, welche Logdatei ein Jail überwacht.
sudo fail2ban-client get sshd logpathHäufige Muster
fail2ban-client status sshd | grep 'Banned IP' — Schnelle Prüfung auf gesperrte SSH-IPs.
sudo fail2ban-client status sshd | grep 'Banned IP'fail2ban-client set <jail> bantime 86400 — Setzt die Sperrdauer auf 24 Stunden.
sudo fail2ban-client set sshd bantime 86400fail2ban-client set <jail> bantime -1 — Setzt eine dauerhafte Sperre (kein automatisches Entsperren).
sudo fail2ban-client set sshd bantime -1zgrep 'Ban' /var/log/fail2ban.log* — Durchsucht aktuelle und rotierte Logs nach allen Sperren.
zgrep 'Ban' /var/log/fail2ban.log* Fazit
Fail2ban gehört auf jeden Server, der aus dem Internet erreichbar ist: Schon mit dem mitgelieferten sshd-Jail reduzierst du den Lärm aus Brute-Force-Versuchen drastisch. Zwei Dinge solltest du dir merken: Eigene Anpassungen gehören in jail.local, nicht in jail.conf – Letztere wird bei Updates überschrieben. Und trag deine eigene IP-Adresse in die ignoreip-Whitelist ein, damit du dich nicht versehentlich selbst aussperrst.
Weiterführende Links
- Fail2ban – offizielles Wiki – Dokumentation und Konfigurationsbeispiele (englisch)
- fail2ban-client(1) – Manpage – alle Optionen im Überblick (englisch)
- Fail2ban – Wikipedia – Hintergrund und Funktionsweise