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 status

fail2ban-client status <jail> — Zeigt den Status eines bestimmten Jails (gesperrte IPs, Fehlversuche).

sudo fail2ban-client status sshd

fail2ban-client start — Startet den Fail2ban-Server.

sudo fail2ban-client start

fail2ban-client stop — Stoppt den Fail2ban-Server.

sudo fail2ban-client stop

fail2ban-client reload — Lädt die Konfiguration neu, ohne den Dienst neu zu starten.

sudo fail2ban-client reload

fail2ban-client reload <jail> — Lädt die Konfiguration eines bestimmten Jails neu.

sudo fail2ban-client reload sshd

Sperren & Entsperren

fail2ban-client set <jail> banip <ip> — Sperrt eine IP manuell in einem Jail.

sudo fail2ban-client set sshd banip 192.168.1.100

fail2ban-client set <jail> unbanip <ip> — Entsperrt eine IP in einem Jail.

sudo fail2ban-client set sshd unbanip 192.168.1.100

fail2ban-client unban <ip> — Entsperrt eine IP in allen Jails.

sudo fail2ban-client unban 192.168.1.100

fail2ban-client unban --all — Entsperrt alle IPs in allen Jails.

sudo fail2ban-client unban --all

fail2ban-client banned — Zeigt alle aktuell gesperrten IPs über alle Jails hinweg.

sudo fail2ban-client banned

Jail-Konfiguration

fail2ban-client get <jail> maxretry — Zeigt die maximale Anzahl an Fehlversuchen für ein Jail.

sudo fail2ban-client get sshd maxretry

fail2ban-client set <jail> maxretry <n> — Setzt die Anzahl der Fehlversuche vor einer Sperre (zur Laufzeit).

sudo fail2ban-client set sshd maxretry 3

fail2ban-client get <jail> bantime — Zeigt die Sperrdauer eines Jails.

sudo fail2ban-client get sshd bantime

fail2ban-client set <jail> bantime <seconds> — Setzt die Sperrdauer (zur Laufzeit).

sudo fail2ban-client set sshd bantime 3600

fail2ban-client get <jail> findtime — Zeigt das Zeitfenster, in dem Fehlversuche gezählt werden.

sudo fail2ban-client get sshd findtime

fail2ban-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.1

Filter testen

fail2ban-regex <logfile> <filter> — Testet eine Filter-Regex gegen eine Logdatei.

sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

fail2ban-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.conf

Logs & Fehlersuche

fail2ban-client get loglevel — Zeigt das aktuelle Log-Level.

sudo fail2ban-client get loglevel

fail2ban-client set loglevel <level> — Setzt das Log-Level (CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG).

sudo fail2ban-client set loglevel DEBUG

tail -f /var/log/fail2ban.log — Beobachtet das Fail2ban-Log in Echtzeit.

tail -f /var/log/fail2ban.log

fail2ban-client get <jail> logpath — Zeigt, welche Logdatei ein Jail überwacht.

sudo fail2ban-client get sshd logpath

Hä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 86400

fail2ban-client set <jail> bantime -1 — Setzt eine dauerhafte Sperre (kein automatisches Entsperren).

sudo fail2ban-client set sshd bantime -1

zgrep '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.

Verwandte Kommandos

  • age – Dateien und Geheimnisse verschlüsseln
  • clamav – Antivirus-Scanner für Linux-Server
  • firewalld – Firewall-Regeln dynamisch verwalten