Direkt zum Inhalt

Cookie-Einstellungen

Wählen Sie, welche Arten von Cookies Sie erlauben. Sie können Ihre Auswahl jederzeit über Cookie-Einstellungen unten auf jeder Seite ändern. Datenschutzerklärung

Notwendig

Immer aktiv

Nötig zum Einloggen, für Ihren Warenkorb und um Ihre Auswahl zu speichern. Diese sind immer aktiv.

Welche Cookies?
  • weboke_sessie, weboke_klant, weboke_remember: Ihre Sitzung und eingeloggt bleiben
  • weboke_basket: Ihr Warenkorb
  • wkBtwIncl: Preise mit oder ohne MwSt. anzeigen
  • wok_cookies: Ihre Cookie-Auswahl, 12 Monate

Misst, welche Anzeige zu einem Besuch oder einer Bestellung führt, damit wir nicht für Anzeigen zahlen, die nichts bringen.

Welche Cookies?
  • Google Ads über Google Tag Manager (_gcl_au, _gcl_aw), bis zu 90 Tage
  • OpenAI Ads, Anzeigen in ChatGPT
  • wok_aff: über welchen Partner Sie zu uns kamen (Partnerprogramm), 60 Tage

4,6

Land und Sprache

Jedes Land hat seine eigene Website, mit Preisen und MwSt. dieses Landes.

Anzeigen

Modul 5 · 5.3

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 fail2ban

Unter 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 = systemd

Was 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 Paket python3-systemd installiert 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:   sshd

Status 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.20

Das 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.77

Wiederholungstä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 = true

Was 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.local oder jail.d/*.local, nie in jail.conf; verwenden Sie backend = systemd (unter Debian 12 nötig).
  • fail2ban-client status sshd zeigt gesperrte Adressen, set sshd unbanip gibt frei; recidive und bantime.increment kümmern sich um Wiederholungstäter.
  • fail2ban hält weder verteilte Angriffe noch schwache Passwörter auf und sieht Docker-Ports nicht von selbst.

Quiz

1. Sie haben unter Debian 12 fail2ban installiert, und es startet nicht, mit der Meldung, dass es für das sshd-Jail keine Logdatei gibt. Was ist die Ursache?



2. Warum legen Sie Ihre Einstellungen in jail.local ab und nicht in jail.conf?



3. Die Standardeinstellungen sind maxretry = 5, findtime = 10m, bantime = 10m. Eine Adresse unternimmt um 14:00, 14:03, 14:05, 14:08 und 14:09 einen fehlgeschlagenen Versuch. Was passiert?



4. Ihr Server erhält jeden Tag Tausende Anmeldeversuche, verteilt auf Zehntausende Adressen, jeweils ein Versuch. Was unternimmt fail2ban dagegen?



5. Sie haben sich selbst ausgesperrt, weil Sie ein paarmal den falschen Benutzernamen eingegeben haben. Was ist die saubere Lösung?



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.

Aufgabe Z5.3: Ein Einbruchslog lesen

Datei zu dieser Aufgabe: ssh-journal-1.txt








Was Sie eingeben und was wir finden, speichern wir nicht. Ihr Browser merkt sich Ihre Antworten und ob Sie die Aufgabe bestanden haben. Sind Sie angemeldet, speichern wir in Meine Kurse nur, dass Sie die Aufgabe (fast) richtig hatten; auch das können Sie dort löschen.

Weiterführende Informationen

Einen Moment bitte…

Richten Sie Ihre Domains ein

Legen Sie für jede Domain die Nameserver, die Verknüpfung mit Ihrem Hosting und den künftigen Inhaber fest.

Ihre Domains werden geladen…