Sicherheit · 11 min read · Oct 23, 2025

Installation und Verwendung von Fail2ban auf Debian 12

Fail2ban überwacht Protokolldateien auf Anmeldefehler und sperrt vorübergehend die fehleranfällige Quell-IP-Adresse vom Zugriff auf den Host. Dies ist eine Verteidigung gegen Passwort-Ratenangriffe. Es ist sehr nützlich, Fail2ban auf Hosts zu haben, die dem Internet ausgesetzt sind.

Die Version von Fail2ban auf Debian 12 ist 1.0.2.

root@posti:~# fail2ban-client version  
1.0.2

Um zu sehen, ob Fail2ban derzeit läuft, senden Sie den Befehl ping an den Server mit fail2ban-client. Der Fail2ban-Server antwortet mit “pong”, wenn er läuft.

root@posti:/etc/fail2ban# fail2ban-client ping  
Server replied: pong  
root@posti:/etc/fail2ban#

Wie es funktioniert

Fail2ban sammelt Filter, Aktionen und überwachte Dateien in einem Gefängnis. Mehrere Gefängnisse werden mit der Distribution geliefert. Sie müssen aktiviert werden, um zu funktionieren. Der Filter gibt an, wie Anmeldefehler erkannt werden. Die Aktion definiert, wie das Sperren und Entsperren erfolgt.

Einbruchsversuche lösen eine Sperre aus, wenn während der Findzeit mindestens maxretry Anmeldefehler von derselben IP-Nummer erkannt werden. Dann wird die IP für bantime Sekunden gesperrt. Nachdem die Sperre für bantime Sekunden in Kraft war, wird die Sperre aufgehoben und die IP kann wieder auf den Host zugreifen. Fail2ban kann sowohl IPv4 als auch IPv6 verarbeiten.

Weitere Informationen können aus den Dateien im Verzeichnis /usr/share/doc/fail2ban/ gelesen werden.

Fail2ban einrichten

Auf Debian GNU/Linux-Systemen wird Fail2ban standardmäßig mit aktiviertem sshd-Gefängnis und angemessenen Einstellungen installiert. Dies geschieht in der Datei /etc/fail2ban/jail.d/defaults-debian.conf. Das ist das einzige Gefängnis, das standardmäßig funktioniert. Andere Gefängnisse müssen vom Systemadministrator aktiviert werden.

Wenn Sie also nur SSH-Anmeldungen überwachen und sich schlecht benehmende Eindringlinge sperren möchten, ist keine zusätzliche Konfiguration erforderlich.

Leider funktioniert Fail2ban auf Debian 12 möglicherweise nicht mit den Standardeinstellungen. Debian 12 hat das rsyslog-Paket als optional markiert, was bedeutet, dass es möglicherweise nicht installiert ist, sodass Protokolle nur an journald gesammelt werden [wiki.debian.org/Rsyslog].

Auf ISPConfig-Systemen funktioniert Fail2ban, da der ISPConfig-Autoinstaller rsyslog installiert und das ISPConfig Perfect Server-Tutorial anweist, rsyslog zu installieren.

Mit rsyslog erscheinen Protokolldateien im Verzeichnis /var/log/ - daher findet die Standardkonfiguration von Fail2ban die Protokolldateien. Wenn rsyslog nicht installiert ist, muss die Fail2ban-Konfiguration geändert werden, damit sie die Protokolle aus dem systemd-Journal liest. Fügen Sie im Abschnitt default von jail.local backend = systemd hinzu, wie folgt

[DEFAULT]
backend = systemd

Ein Gefängnis aktivieren

Die Dokumentation empfiehlt, alle eigenen Änderungen in .local-Dateien vorzunehmen. Dies vermeidet Probleme, wenn die von der Distribution bereitgestellten Dateien aktualisiert oder vom Wartenden geändert werden [Lesen Sie die Datei /usr/share/doc/fail2ban/README.Debian.gz].

Als Beispiel wird das Aktivieren des pure-ftpd-Gefängnisses erreicht, indem Sie in die Datei /etc/fail2ban/jail.local (erstellen Sie die Datei, wenn sie noch nicht existiert) die Zeilen hinzufügen

[pure-ftpd]
enabled = true

Der Gefängnisname in eckigen Klammern beginnt den Abschnitt für die Einstellungen dieses Gefängnisses.

Wenn Sie mit den Änderungen fertig sind, zwingen Sie das erneute Einlesen der Konfigurationsdateien mit dem Befehl

systemctl reload fail2ban

Das Gefängnis sollte jetzt laufen, was mit fail2ban-client überprüft werden kann:

root@posti:/etc/fail2ban# fail2ban-client status pure-ftpd
Status für das Gefängnis: pure-ftpd
|- Filter
|  |- Derzeit fehlgeschlagen: 0
|  |- Insgesamt fehlgeschlagen: 106
|  `- Dateiliste: /var/log/syslog
`- Aktionen
   |- Derzeit gesperrt: 0
   |- Insgesamt gesperrt: 4
   `- Gesperrte IP-Liste:  
root@posti:/etc/fail2ban# 

Da jail.local nur die Einstellung “enabled” für dieses Gefängnis hat, sind alle anderen Einstellungen die Standardeinstellungen der Distribution. Normalerweise haben sie gute Werte, sodass eine weitere Konfiguration nicht erforderlich ist. Falls erforderlich, kann der Abschnitt jail.local für dieses Gefängnis Einstellungen enthalten, die die in .conf-Dateien festgelegten Werte überschreiben.

Dieses Beispiel ändert findtime, maxretry und bantime für das pure-ftpd-Gefängnis:

[pure-ftpd]
enabled = true
findtime = 2h
maxretry = 6
bantime = 1d

Fail2ban-client zeigt Zeiten in Sekunden an, aber Zeiten können in Konfigurationsdateien im einfacheren Format eingegeben werden, zum Beispiel 10h anstelle von 36000 Sekunden. man jail.conf im Kapitel “ZEITABKÜRZUNGSFORMAT” erklärt die benutzerfreundlichen Zeitformate.

fail2ban-client hat die Option, von benutzerfreundlichem Zeitformat in Sekunden zu konvertieren.

# fail2ban-client --str2sec 1d3h7m  
97620

Protokolle verfolgen

Um zu bestimmen, welche Gefängnisse aktiviert werden sollen, verfolgen Sie die Protokolle, die von Diensten, die auf dem Host ausgeführt werden, erstellt werden. Ein Tool, das Zusammenfassungen von Protokollen erstellt, wie logwatch oder pflogsumm, ist hilfreich. Rohprotokolle zu lesen, ist zeitaufwendig und mühsam.

Überprüfen Sie, ob ein Gefängnis für einen Dienst, der auf dem Host ausgeführt wird, verfügbar ist, indem Sie möglicherweise jail.conf lesen.

Sobald die Protokolle etwas Interessantes oder Besorgniserregendes zeigen, ist es Zeit, es zu untersuchen. Zum Beispiel hat pflogsumm eine E-Mail-Zusammenfassung mit Zeilen wie diesen gesendet:

136   unknown[91.224.92.40]: SASL LOGIN-Authentifizierung fehlgeschlagen: UGFzc3...
136   hostname srv-91-224-92-40.serveroffer.net kann nicht auf eine...
123   unknown[193.32.162.23]: SASL LOGIN-Authentifizierung fehlgeschlagen: UGFzc...
123   hostname mail.whatami.co kann nicht auf die Adresse 193.32.162.23 auflösen

Das zeigt, dass die IP 91.224.92.40 136 Mal versucht hat, sich per E-Mail anzumelden, und einen weiteren ähnlichen Fall. Fail2ban hätte so viele Versuche verhindern sollen. Um zu sehen, warum das nicht passiert ist, untersuchen Sie das Fail2ban-Protokoll.

root@posti:/etc/apt/apt.conf.d# grep 91.224.92.40 /var/log/fail2ban.log | head
2024-02-18 00:01:38,718 fail2ban.filter         [996]: INFO    [postfix-sasl] Gefunden 91.224.92.40 - 2024-02-18 00:01:38
2024-02-18 00:11:50,261 fail2ban.filter         [996]: INFO    [postfix-sasl] Gefunden 91.224.92.40 - 2024-02-18 00:11:50
2024-02-18 00:21:54,337 fail2ban.filter         [996]: INFO    [postfix-sasl] Gefunden 91.224.92.40 - 2024-02-18 00:21:54
2024-02-18 00:32:14,232 fail2ban.filter         [996]: INFO    [postfix-sasl] Gefunden 91.224.92.40 - 2024-02-18 00:32:14
2024-02-18 00:42:37,921 fail2ban.filter         [996]: INFO    [postfix-sasl] Gefunden 91.224.92.40 - 2024-02-18 00:42:37
2024-02-18 00:53:06,796 fail2ban.filter         [996]: INFO    [postfix-sasl] Gefunden 91.224.92.40 - 2024-02-18 00:53:06
2024-02-18 01:03:35,293 fail2ban.filter         [996]: INFO    [postfix-sasl] Gefunden 91.224.92.40 - 2024-02-18 01:03:35
2024-02-18 01:14:03,765 fail2ban.filter         [996]: INFO    [postfix-sasl] Gefunden 91.224.92.40 - 2024-02-18 01:14:03
2024-02-18 01:24:24,628 fail2ban.filter         [996]: INFO    [postfix-sasl] Gefunden 91.224.92.40 - 2024-02-18 01:24:24
2024-02-18 01:34:43,876 fail2ban.filter         [996]: INFO    [postfix-sasl] Gefunden 91.224.92.40 - 2024-02-18 01:34:43
root@posti:/etc/apt/apt.conf.d#

Diese IP versucht, sich in etwa 10-Minuten-Intervallen zu verbinden, und das Fail2ban-Gefängnis postfix-sasl erkennt es.

Es ist eine gute Idee herauszufinden, ob diese IP möglicherweise zu einem legitimen Benutzer des Hosts gehört, der nur ein altes Passwort auf einem Smartphone oder einem anderen Gerät hat, das versucht, sich in regelmäßigen Abständen zu verbinden. Ich benutze geoiplookup, es zeigt, aus welchem Land die IP stammt. Meine Benutzer kommen aus meinem Land, daher neigen ausländische Benutzer dazu, schlechte Akteure zu sein. geoiplookup stammt aus den Debian-Paketen geoip-database und geoip-bin.

$ geoiplookup 91.224.92.40
GeoIP Country Edition: LT, Litauen

Um herauszufinden, warum die IP nicht gesperrt wurde, untersuchen Sie die Findzeit dieses Gefängnisses:

root@posti:/etc/apt/apt.conf.d# fail2ban-client get postfix-sasl findtime
600
root@posti:/etc/apt/apt.conf.d#

Ich habe kürzlich diese langsamen Angriffe gesehen, der Täter weiß, dass die Findzeit 10 Minuten beträgt, also versucht er, eine Sperre zu vermeiden, indem er Anmeldungen in längeren Intervallen versucht. Das hat in diesem Fall funktioniert. Um sicherzustellen, dass fehlgeschlagene Anmeldungen Sperren verursachen, erhöhen Sie die Findzeit für das Gefängnis, zum Beispiel auf 10 Stunden. Fügen Sie in der Datei jail.local im Abschnitt [postfix-sasl] hinzu:

findtime = 10h

Dann hat das Gefängnis nach systemctl reload fail2ban eine längere Findzeit:

root@posti:/etc/fail2ban# fail2ban-client get postfix-sasl findtime
36000
root@posti:/etc/fail2ban#

Eine andere Möglichkeit, wie Eindringlinge versuchen, einzubrechen, ist, hartnäckig zu sein. Selbst wenn ein Eindringling gesperrt ist, wartet er einfach, bis die Sperre endet, und versucht weiterhin, das Passwort zu erraten. Die Bantime könnte länger gemacht werden, aber das verursacht Probleme für legitime Benutzer, die möglicherweise das Passwort falsch eingeben und dann nicht auf ihr Konto zugreifen können, bis die Bantime endet. Es gibt ein Gefängnis für Wiederholungstäter namens recidive. Es funktioniert, indem es nach wiederholten Sperren für eine IP im Fail2ban-Protokoll sucht und dann für eine lange Zeit, zum Beispiel eine Woche, sperrt.

Die folgende Auflistung stammt aus dem logwatch-Bericht:

--------------------- pam_unix Begin ------------------------   

 sshd:  

    Authentifizierungsfehler:  

       unknown (212.70.149.150): 59 Mal

Die Suche nach dieser IP in der Protokolldatei zeigt:

2024-02-21 03:42:39,121 fail2ban.filter         [895]: INFO    [sshd] Gefunden 212.70.149.150 - 2024-02-21 03:42:38
2024-02-21 03:42:39,508 fail2ban.actions        [895]: NOTICE  [sshd] Sperre 212.70.149.150
2024-02-21 03:52:38,386 fail2ban.actions        [895]: NOTICE  [sshd] Entsperre 212.70.149.150
2024-02-21 03:54:33,560 fail2ban.filter         [895]: INFO    [sshd] Gefunden 212.70.149.150 - 2024-02-21 03:54:33
2024-02-21 03:54:35,364 fail2ban.filter         [895]: INFO    [sshd] Gefunden 212.70.149.150 - 2024-02-21 03:54:35
2024-02-21 04:00:37,017 fail2ban.filter         [895]: INFO    [sshd] Gefunden 212.70.149.150 - 2024-02-21 04:00:36
2024-02-21 04:00:39,021 fail2ban.filter         [895]: INFO    [sshd] Gefunden 212.70.149.150 - 2024-02-21 04:00:38
2024-02-21 04:06:43,036 fail2ban.filter         [895]: INFO    [sshd] Gefunden 212.70.149.150 - 2024-02-21 04:06:42
2024-02-21 04:06:45,039 fail2ban.filter         [895]: INFO    [sshd] Gefunden 212.70.149.150 - 2024-02-21 04:06:44
2024-02-21 04:06:45,426 fail2ban.actions        [895]: NOTICE  [sshd] Sperre 212.70.149.150
2024-02-21 04:16:44,302 fail2ban.actions        [895]: NOTICE  [sshd] Entsperre 212.70.149.150
2024-02-21 04:19:04,868 fail2ban.filter         [895]: INFO    [sshd] Gefunden 212.70.149.150 - 2024-02-21 04:19:04

Fail2ban funktioniert wie beabsichtigt, findet die falschen Anmeldungen und verhängt eine Sperre für 10 Minuten. Während dieser Sperre wird der Täter daran gehindert, auf diesen Host zuzugreifen, setzt jedoch nach der Aufhebung der Sperre fort. Dies scheint ein ernsthafter Versuch zu sein, einzubrechen. Die Lösung besteht darin, das recidive-Gefängnis mit niedriger maxretry und langer bantime zu aktivieren.

Ich verwende gerne eine kurze anfängliche Sperre, sagen wir 10 Minuten. Wenn ein echter Benutzer gesperrt wurde, wartet er einfach diese Zeit ab, hoffentlich nutzt er die Zeit, um herauszufinden, was das richtige Passwort ist, und versucht es dann erneut. Diejenigen, die am selben Tag erneut gesperrt werden, werden für eine Woche gesperrt. Die Standardwerte des recidive-Gefängnisses finden sich in der Datei jail.conf, dort gibt es eine bantime von 1 Woche und eine findtime von 1 Tag, die scheinen mir in Ordnung zu sein. Aber ich setze maxretry auf 2, damit die Täter schneller gesperrt werden. Ich habe in die Datei jail.local hinzugefügt:

[recidive]
enabled = true
maxretry = 2

Längere Sperren als 1 Woche sind meiner Meinung nach nicht sinnvoll. Letztendlich wird die alte IP-Adresse überall gesperrt oder auf eine schwarze Liste gesetzt, sodass der Täter eine neue IP erhält. Die alte IP wird einem unschuldigen neuen Internetbenutzer zugewiesen, der nicht für die schlechten Dinge bestraft werden sollte, für die der vorherige Besitzer dieser IP verantwortlich ist.

Fehlersuche

Nach dem Booten des Betriebssystems oder dem Neustart von Fail2ban wird der Zustand wiederhergestellt, sodass die Sperren fortgesetzt werden, bis die bantime abläuft. Daher kann das Testen und die Fehlersuche Neustarts beinhalten.

Um die Konfiguration zu testen, gibt es eine Testoption:

fail2ban-server --test

Um herauszufinden, ob eine IP gesperrt ist, können neuere Versionen von Fail2ban dies tun

# fail2ban-client banned 43.131.9.186  
[['recidive']]

Der Befehl zeigt die Liste der Gefängnisse, in denen die angegebene IP derzeit gesperrt ist.

Ältere Versionen von Fail2ban haben diesen Befehl nicht. Das Testen jedes Gefängnisses einzeln kann so erfolgen:

# fail2ban-client status recidive | tr " " "\n" | grep 43.163.219.232  
43.163.219.232

Wenn die Ausgabe die IP anzeigt, dann war sie in der Liste der gesperrten IP-Nummern. Der tr-Befehl dient dazu, die Liste der gesperrten IP-Nummern (es ist eine lange Zeile) in eine IP pro Zeile aufzubrechen.

Um zu sehen, was mit einer bestimmten IP passiert ist, suchen Sie sie im fail2ban.log:

root@posti:/etc/mysql# grep 43.131.9.186 /var/log/fail2ban.log | cut --characters=-80  

2024-03-06 09:00:40,295 fail2ban.filter  [3574846]: INFO    [sshd] Gefunden
2024-03-06 09:02:53,954 fail2ban.filter  [3574846]: INFO    [sshd] Gefunden
2024-03-06 09:02:55,958 fail2ban.filter  [3574846]: INFO    [sshd] Gefunden
2024-03-06 09:04:34,193 fail2ban.filter  [3574846]: INFO    [sshd] Gefunden
2024-03-06 09:04:36,195 fail2ban.filter  [3574846]: INFO    [sshd] Gefunden
2024-03-06 09:04:36,388 fail2ban.actions [3574846]: NOTICE  [sshd] Sperre 43
2024-03-06 09:04:36,626 fail2ban.filter  [3574846]: INFO    [recidive] Fo
2024-03-06 09:14:35,180 fail2ban.actions [3574846]: NOTICE  [sshd] Entsperre
2024-03-06 09:15:10,073 fail2ban.filter  [3574846]: INFO    [sshd] Gefunden
2024-03-06 09:16:55,919 fail2ban.filter  [3574846]: INFO    [sshd] Gefunden
2024-03-06 09:16:58,522 fail2ban.filter  [3574846]: INFO    [sshd] Gefunden
2024-03-06 09:18:44,972 fail2ban.filter  [3574846]: INFO    [sshd] Gefunden
2024-03-06 09:20:30,018 fail2ban.filter  [3574846]: INFO    [sshd] Gefunden
2024-03-06 09:20:30,499 fail2ban.actions [3574846]: NOTICE  [sshd] Sperre 43
2024-03-06 09:20:30,620 fail2ban.filter  [3574846]: INFO    [recidive] Fo
2024-03-06 09:20:30,899 fail2ban.actions [3574846]: NOTICE  [recidive] Ba
2024-03-06 09:20:32,021 fail2ban.filter  [3574846]: INFO    [sshd] Gefunden
2024-03-06 09:30:29,289 fail2ban.actions [3574846]: NOTICE  [sshd] Entsperre

Die ausführliche Ausgabe der Fail2ban-Konfiguration zeigt die Einstellungen zur Überprüfung:

# fail2ban-client -vvv -d

Whitelisting eigener IP-Adressen

Vielleicht werden Ihre eigenen Hosts gesperrt oder Sie möchten sicherstellen, dass einige ausländische Hosts niemals gesperrt werden, selbst wenn sie sich schlecht benehmen. Diese IP-Nummern können auf die Whitelist gesetzt werden. Standardmäßig ist nichts auf der Whitelist, das können Sie mit folgendem Befehl überprüfen:

root@posti:~# fail2ban-client get sshd ignoreip  
Keine IP-Adresse/Netzwerk wird ignoriert  
root@posti:~

Die ignoreip-Einstellung könnte in jedem Gefängnisabschnitt festgelegt werden, aber diese Einstellung sollte alle Gefängnisse betreffen, sodass es besser ist, sie im DEFAULT-Abschnitt festzulegen. Es könnte am besten sein, die interne Subnetzadresse zu ignorieren, damit alle Ihre eigenen Hosts Sperren vermeiden. Dies ist vom Anfang der jail.local:

[DEFAULT]
ignoreip = 92.237.123.96/27

Der Standardabschnitt kann andere Einstellungen haben, die alle Gefängnisse betreffen. Zum Beispiel könnte findtime = 10h dort hinzugefügt werden.

Manuelles Sperren

Um zu testen, was passiert, wenn Sie manuell sperren, setzen Sie die Sperre manuell. Testen Sie zuerst mit einem Gefängnis mit kurzer bantime, damit Sie irgendwann zurückkommen, wenn Sie sich versehentlich selbst sperren. Zum Beispiel

# fail2ban-client set sshd banip 8.8.4.4

Wenn eine IP sich schlecht verhält, Sie aber Fail2ban nicht dazu bringen können, sie zu erkennen und Sperren auszusprechen, wird das manuelle Sperren im recidive-Gefängnis diese IP für eine Woche los.

# fail2ban-client set recidive banip 8.8.4.4

Das Sperren eines Subnetzes funktioniert mit CIDR-Notation:

fail2ban-client set recidive banip 5.188.87.0/24

Manuelles Entsperren

Das Entfernen einer Sperre ist möglich, aber bedenken Sie, dass, wenn das schlechte Verhalten weiterhin besteht, die IP erneut gesperrt wird. Daher sollten Sie herausfinden, was passiert (zum Beispiel durch das Lesen der Protokolle) und das schlechte Verhalten beheben.

# fail2ban-client set recidive unbanip 8.8.4.4

Die IP kann in mehreren Gefängnissen gesperrt sein. Um eine IP in allen Gefängnissen zu entsperren, verwenden Sie

# fail2ban-client unban 8.8.4.4

Ich muss das jedoch selten tun. Ich habe eine bantime von 10 Minuten, außer das recidive-Gefängnis hat 1 Woche, also entsperre ich nur die IP aus dem recidive-Gefängnis, andere Gefängnisse sind bereits abgelaufen. Wenn Sie das recidive-Gefängnis nicht verwenden, kann die IP in mehreren Gefängnissen gleichzeitig gesperrt sein, sodass dies nützlich ist.

Um alle IP-Adressen aus allen Gefängnissen zu entsperren, führen Sie aus

fail2ban-client unban --all

Fazit

Fail2ban erschwert das Raten von Passwörtern, verhindert jedoch nicht vollständig, dass Angreifer versuchen, auf den Host zuzugreifen. Für SSH bietet die Durchsetzung der Verwendung von SSH-Schlüsseln mehr Schutz, indem die Anmeldung mit einem Passwort verhindert wird. Für andere Dienste verhindert die Multi-Faktor-Authentifizierung die Anmeldung, wenn nur das Passwort bekannt ist.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.