Häufig kommt es vor, dass einzelne Benutzer oder automatisierte Scripts an einem Server verschiedene Kombinationen aus Benutzernamen und Passwörtern “ausprobieren” (das sogenannte Brute-Force) mit dem Ziel einen funktionierenden Login zu finden. Dies wollen wir natürlich verhindern und die Verursacher wirkungsvoll aussperren, wobei uns das Tool Fail2Ban behilflich ist.

Fail2Ban ist ein kleines Programm auf Python-Basis, welches die Logdateien der Server durchsucht und IP-Adressen, die zu viele fehlgeschlagene Loginversuche haben, blockiert. Das Blockieren der IP-Adressen geschieht dabei in der Regel über Firewallregeln, welche von Fail2Ban entsprechend angepasst werden.

In dieser Anleitung werden wir die, bei Linux üblichen, iptables verwenden. Weiterhin bringt Fail2Ban aber auch Unterstützung für z.B. Shorewall mit und lässt sich beliebig an die auf dem System eingesetzte Firewall anpassen.

Von Hause aus unterstützt die aktuelle Version von Fail2Ban nur IPv4-Adressen. Durch eine recht kleine Anpassung lässt es sich jedoch auch auf IPv6 erweitern, was im Beitrag Fail2Ban mit IPv6 beschrieben wird.

Installation

Unter Debian und Ubuntu Linux ist die Installation von Fail2Ban gewohnt einfach und ggf. fehlende Abhängigkeiten werden automatisch mit installiert:

Damit ist die Installation auch schon vollständig und Fail2Ban wurde bereits gestartet.

Konfiguration

Die gesamten Einstellungen von Fail2Ban befindet sich im Verzeichnis /etc/fail2ban/.

Die grundlegende Konfiguration erfolgt in der Datei jail.local, welche eine Kopie der jail.conf darstellt. Anpassungen könnten auch in der jail.conf vorgenommen werden, jedoch wird diese bei einem Update eventuell überschrieben. Sobald die Datei jail.local vorhanden ist wird diese von Fail2Ban verwendet und unsere Konfiguration bleibt auch bei einem Update erhalten. Zuerst müssen wir also die jail.conf als jail.local kopieren und anschließend passen wir die jail.local nach unsern Vorstellungen an.

Die Konfigurationsdateien sind in verschiedene Sektionen unterteilt. Eine Sektion wird durch eckige Klammern gekennzeichnet (z.B. [ssh]).

Die DEFAULT-Sektion stellt dabei eine Besonderheit dar. Die hier vorgenommenen Einstellungen gelten für alle anderen Sektionen, sofern ein Wert nicht in einer Sektion erneut gesetzt wird. Ansonsten sind die Einstellungen nur für die jeweils aktuelle Sektion gültig.

Die DEFAULT-Sektion

Bei ignoreip können IP-Adressen oder IP-Bereiche angegeben werden, die nie geblockt werden sollen. Mehrere Einträge sind mit Leerzeichen zu trennen. Es empfiehlt sich hier zumindest während der Konfiguration seine eigene IP hinzuzufügen.

Unter bantime wird die Bannzeit in Sekunden angegeben. Wir belassen es hier bei dem voreingestellten Wert von 600 (entspricht 10 Minuten).

maxretry gibt die Anzahl der Fehlversuche an, ab der er eine Aktion ausgelöst wird.

findtime bestimmt das Zeitfenster in Sekunden für die Anzahl an Fehlversuchen.

Bei destemail kann eine E-Mail Adresse angegeben werden, an die Benachrichtigungen gesendet werden, wenn Fail2Ban eine IP-Adresse blockiert.

banaction legt fest, welche Aktion zum Blockieren einer IP angewendet werden soll. Wir belassen diese bei iptables-multiport, da damit gleich mehrere Ports gesperrt werden können.

Den Eintag bei action ändern wir auf %(action_mwl)s damit wir beim Blockieren einer IP-Adresse eine E-Mail mit ein paar Informationen zugesendet bekommen.

Andere Sektionen, die sogenannten Jails

In jeder Sektion kann eine Einstellung aus der DEFAULT-Sektion (z.B. bantime) überschieben werden.

Nicht benötigte Jails sollten deaktiviert werden.

Erforderlich sind in den Sektionen die folgenden Einstellungen:

  • enabled legt fest, ob die Sektion aktiviert ist oder nicht. Standardmäßig sind seit v0.9.0 alle Jails deaktiviert.
  • port gibt den Port oder die Ports an die für die IP gesperrt werden sollen.
  • filter definiert den verwendeten Filter für diese Sektion. Alle verfügbaren Filter befinden sich im Verzeichnis /etc/fail2ban/filter.d/.
  • logpath legt die Logdatei fest, welche überwacht werden soll.

Ein Sonderfall, die recidive-Sektion

Dieses Jail stellt eine Besonderheit dar. Hier überwacht Fail2Ban seine eigene Log-Datei und erkennt somit mehrfach gesperrte IP-Adressen.

Dies ist sinnvoll, damit IP-Adressen, die häufiger auffällig werden, für einen längeren Zeitraum gesperrt werden können. Wurde beispielsweise eine IP 5 mal in Folge innerhalb kurzer Zeit gesperrt, so wird diese für eine Woche komplett gesperrt.

Im Folgenden Beispiel ist diese Sektion ab Zeile 748 zu finden.

Beispiel einer jail.local

Neustart von Fail2Ban

Zum Schluss starten wir Fail2Ban neu um alle Anpassungen zu aktivieren.

Nun ist Fail2Ban aktiv und überwacht pausenlos die in der Datei jail.local eingestellten Logdateien.

Siehe auch

Fail2Ban mit IPv6