Modul 5 · 5.3
Deutsch
fail2ban gegen Rateversuche
Modul 5: Das Netzwerk abschirmen · Lesezeit: 10 Minuten
Lernziel: Nach dieser Lektion können Sie fail2ban für SSH einrichten, seinen Status und sein Log lesen, eine Adresse wieder freigeben und erklären, was fail2ban schützt und was nicht.
Kernbegriffe: Brute Force, Jail, Filter, Aktion (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local und jail.d, fail2ban-client, recidive
Die Türklinkenrüttler des Internets
Schauen Sie einen Tag nach der Installation in das Log von SSH, und Sie sehen es: Hunderte Anmeldeversuche mit Namen wie root, admin, test, ubuntu und oracle, von Adressen aus der ganzen Welt.
anna@web1:~$ sudo journalctl -u ssh --since today | grep -c "Invalid user"
412
anna@web1:~$ sudo journalctl -u ssh --since today | grep "Invalid user" | tail -n 3
nov 09 14:02:11 web1 sshd-session[20311]: Invalid user admin from 203.0.113.77 port 51522
nov 09 14:02:13 web1 sshd-session[20313]: Invalid user oracle from 203.0.113.77 port 51544
nov 09 14:02:16 web1 sshd-session[20315]: Invalid user test from 203.0.113.77 port 51560(Unter Ubuntu heißt der Dienst ssh, unter AlmaLinux und Rocky sshd. Der Prozessname kann je nach OpenSSH-Version sshd oder sshd-session lauten.) Das ist ein Brute-Force-Angriff: Bots, die einfach alle gängigen Namen und Passwörter ausprobieren. Wenn Sie sich per Schlüssel anmelden und der Passwort-Login abgeschaltet ist (Lektion 2.2), kommen sie nie hinein, ganz gleich, wie oft sie es versuchen. Aber sie füllen Ihr Log, kosten etwas Rechenleistung, und bei Diensten, für die doch ein Passwort nötig ist (ein Webmailer, ein Verwaltungspanel), können sie wirklich gefährlich werden.
fail2ban liest Logs, erkennt fehlgeschlagene Versuche und sperrt eine Adresse, die zu oft scheitert, für eine gewisse Zeit in der Firewall.
Wie fail2ban denkt: Jails
fail2ban arbeitet mit Jails (Zellen). Ein Jail kombiniert drei Dinge:
- einen Filter: reguläre Ausdrücke, die in einem Log fehlgeschlagene Versuche erkennen (zum Beispiel die Zeile "Invalid user ... from <adres>");
- eine Aktion: was bei zu vielen Versuchen passiert, meist eine Firewallregel, die die Adresse blockiert (
banaction, unter Debian 13 standardmäßig über nftables); - Schwellenwerte: wie viele fehlgeschlagene Versuche (
maxretry) innerhalb welcher Zeit (findtime) zu einer Sperre von welcher Dauer (bantime) führen.
Die Standardwerte aus jail.conf sind: maxretry = 5, findtime = 10m, bantime = 10m. Also: Fünf fehlgeschlagene Versuche innerhalb von zehn Minuten ergeben zehn Minuten Sperre.
Installation und die Falle bei Debian 12
anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2banUnter Debian und Ubuntu ist das Jail für SSH ([sshd]) nach der Installation bereits aktiv, über die Datei /etc/fail2ban/jail.d/defaults-debian.conf.
Es gibt eine bekannte Falle. fail2ban muss wissen, wo das Log liegt. Früher war das die Textdatei /var/log/auth.log. Seit Debian 12 wird rsyslog nicht mehr standardmäßig installiert, und die Meldungen stehen nur noch im Journal von systemd (Lektion 6.2). Das fail2ban-Paket von Debian 12 suchte noch nach /var/log/auth.log, fand sie nicht und startete nicht. Debian 13 hat das behoben, indem in defaults-debian.conf für SSH backend = systemd gesetzt wird. Unter Debian 12 beheben Sie es selbst (siehe unten), indem Sie dasselbe tun. Ubuntu hat rsyslog zwar noch standardmäßig, aber backend = systemd funktioniert dort ebenfalls.
Ihre eigenen Einstellungen: jail.local
Ändern Sie jail.conf niemals: Diese Datei wird bei einem Update ersetzt. Legen Sie Ihre eigenen Einstellungen in /etc/fail2ban/jail.local ab oder in einer Datei in /etc/fail2ban/jail.d/ mit der Endung .local:
# /etc/fail2ban/jail.d/eigen.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
bantime.increment = true
ignoreip = 127.0.0.1/8 ::1 198.51.100.20
[sshd]
enabled = true
backend = systemdWas die Zeilen bewirken:
bantime = 1h: eine Stunde Sperre statt zehn Minuten.bantime.increment = true: Wer nach einer Sperre wiederkommt, erhält jedes Mal eine längere Sperre.ignoreip: Adressen, die nie gesperrt werden. Tragen Sie hier die feste IP-Adresse Ihres Büros ein, falls Sie eine haben. Tragen Sie hier keine großen Bereiche "zur Sicherheit" ein.backend = systemd: das Journal statt einer Textdatei lesen (unter Debian 12 nötig, überall empfehlenswert). Dafür muss das Paketpython3-systemdinstalliert sein; meist ist es das bereits als Abhängigkeit.
Neu laden und prüfen:
anna@web1:~$ sudo fail2ban-client -t # Konfiguration testen
OK: configuration test is successful
anna@web1:~$ sudo systemctl reload fail2ban
anna@web1:~$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshdStatus lesen, sperren und freigeben
anna@web1:~$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 3
| |- Total failed: 1288
| `- Journal matches: _SYSTEMD_UNIT=ssh.service + _COMM=sshd
`- Actions
|- Currently banned: 2
|- Total banned: 117
`- Banned IP list: 203.0.113.77 198.51.100.140"Currently failed" sind Adressen, die zwar schon Versuche unternommen haben, aber noch nicht über dem Schwellenwert liegen. "Currently banned" sind die Adressen, die gerade gesperrt sind.
Haben Sie sich selbst ausgesperrt (zum Beispiel, weil Sie es ein paarmal mit dem falschen Schlüssel oder Benutzernamen versucht haben), melden Sie sich über ein anderes Netzwerk oder die Konsole an und geben Sie Ihre Adresse frei:
anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20Das Log von fail2ban selbst liegt in /var/log/fail2ban.log und zeigt, wann welche Adresse gesperrt und freigegeben wurde:
2026-11-09 14:02:16,903 fail2ban.actions [811]: NOTICE [sshd] Ban 203.0.113.77
2026-11-09 15:02:17,120 fail2ban.actions [811]: NOTICE [sshd] Unban 203.0.113.77Wiederholungstäter: recidive
Manche Bots kommen nach jeder Sperre einfach wieder. Dafür gibt es zwei Mittel. bantime.increment (siehe oben) verlängert die Sperre jedes Mal. Außerdem gibt es das Jail recidive: Es liest das Log von fail2ban selbst und sperrt eine Adresse, die innerhalb eines Tages oft gesperrt wurde, für eine Woche auf allen Ports. Aktivieren in Ihrer .local-Datei:
[recidive]
enabled = trueWas fail2ban kann und was nicht
fail2ban ist nützlich, aber es ist kein Schloss an der Tür. Das Schloss ist die Anmeldung per Schlüssel bei abgeschalteten Passwörtern (Lektion 2.2). Wissen Sie deshalb auch, was fail2ban nicht kann:
- Ein verteilter Angriff von Tausenden Adressen mit jeweils ein oder zwei Versuchen kommt nie über
maxretry. - Ein schwaches Passwort bleibt schwach. fail2ban verlangsamt das Raten, mehr nicht.
- Nur was in einem Log steht: Einen Dienst, der keine fehlgeschlagenen Versuche protokolliert, oder ein Log, das fail2ban nicht liest, bemerkt es nicht.
- Docker: Sperren in der normalen Firewallkette gelten nicht für veröffentlichte Containerports (Lektion 9.3). Für Dienste in Containern ist eine eigene Einstellung nötig (Aktion auf der Kette
DOCKER-USER).
Was fail2ban gut kann: das Log ruhig halten, die Last durch Bots senken und Dienste schützen, bei denen Sie (noch) Passwörter verwenden, etwa einen Webmailer oder ein Verwaltungspanel. Für solche Dienste gibt es Filter für nginx, Postfix, Dovecot und viele andere.
Unter AlmaLinux und Rocky Linux
fail2ban kommt dort aus EPEL: dnf install epel-release und dann dnf install fail2ban. Das Paket fail2ban installiert auch die Anbindung an firewalld. Der SSH-Dienst heißt sshd. Aktivieren Sie das Jail selbst in einer .local-Datei; anders als unter Debian ist es nicht automatisch aktiv.
Zusammenfassung
- Bots versuchen den ganzen Tag, sich anzumelden; mit Schlüsseln und abgeschaltetem Passwort-Login kommen sie nicht hinein, fail2ban hält sie zusätzlich auf Abstand.
- Ein Jail ist Filter + Aktion + Schwellenwerte (
maxretry,findtime,bantime); standardmäßig 5 Versuche in 10 Minuten, 10 Minuten Sperre. - Eigene Einstellungen in
jail.localoderjail.d/*.local, nie injail.conf; verwenden Siebackend = systemd(unter Debian 12 nötig). fail2ban-client status sshdzeigt gesperrte Adressen,set sshd unbanipgibt frei; recidive undbantime.incrementkümmern sich um Wiederholungstäter.- fail2ban hält weder verteilte Angriffe noch schwache Passwörter auf und sieht Docker-Ports nicht von selbst.
Quiz
Aufgabe
Aufgabe Z5.3: Ein Einbruchslog lesen. Die Beispieldatei ssh-journal-1.txt enthält einen Ausschnitt aus dem Journal eines SSH-Servers mit fail2ban sowie die Ausgabe von fail2ban-client status sshd. Beantworten Sie: Welche Adresse hat die meisten Benutzernamen ausprobiert, welche Adresse konnte sich mit einem Schlüssel anmelden und als welcher Benutzer, welche Adresse wurde gesperrt und um wie viel Uhr, und wäre diese Adresse mit den Standardeinstellungen (maxretry = 5, findtime = 10m) ebenfalls gesperrt worden? Das Programm vergleicht mit dem festen Lösungsschlüssel. Haben Sie einen eigenen Server mit fail2ban, sehen Sie sich dort ebenfalls fail2ban-client status sshd an.
Weiterführende Informationen
- Ihren VPS absichern: die ersten fünf Minuten
- Bin ich gesperrt? Ihre IP-Adresse und unsere Firewall
- fail2ban, Standardkonfiguration
jail.conf: https://github.com/fail2ban/fail2ban/blob/master/config/jail.conf - Handbuch
jail.conf(5): https://manpages.debian.org/trixie/fail2ban/jail.conf.5.en.html
