English English

Benutzerdefinierter Fail2ban-Filter

Dieses Tutorial zeigt wie man ein Fail2ban Custom Filter (benutzerdefinierten Filter) für Web Applikationen (z.B. Joomla, Wordpress, etc.) erstellt.

Fail2ban wird benötigt um Brute-Force-Attacken zu blockieren. Einfacheste Erklärung: Eine Brute-Force-Attacke wird durch geführt, wenn man versucht sich in eine Webseite einzuloggen, durch das Ausprobieren von unzähligen Passworts bis das Einloggen erfolgreich gelingt. Mit diesem Fail2ban-Filter wird dieses Problem vermieden.

Mehr über Brute force attacken:
https://de.wikipedia.org/wiki/Brute-Force-Methode

 

Wenn die von Ihnen verwendete Webanwendung (z.B.: Moodle) Anmeldeversuche nicht in Log-Dateien auf Ihrem Betriebssystem speichert, dann können Sie diesen fail2ban-Filter auf den Access Logdateien Ihres Webservers verwenden (in apache2: es ist die Datei access.log). Wie in diesem Tutorial gezeigt, erkennt der fail2ban-Filter Login-Versuche, wenn der Benutzer über einen Befehl "POST" auf die Login-Seite zugreift (in moodle: die Seite "login/index.php").  


Einen benutzerdefinierten Filter für Fail2ban einrichten

Zuerst muss eine Fail2ban Filter-Conf-Datei für den Webdienst angelegt werden. Hier als Beispiel der Webdienst "SERVICENAME"

vim /etc/fail2ban/filter.d/SERVICENAME.conf

 

In der Datei SERVICENAME.conf folgenden Code einfügen und die URL nach "POST" ANPASSEN:

# SERVICENAME configuration file
#


[Definition]

# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P<host>\S+)
# Values:  TEXT
#

failregex = ^<HOST> -.*POST /myurl/login/index.php HTTP/1.1

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =


Fail2ban überprüft Loginversuche auf Webseiten mittels dem Failregex. In diesem Beispiel vermeidet das failregex folgenden Vorfall.
Auszug eines Logineintrags von Apache2:

127.0.0.1 - - [28/Feb/2018:14:40:54 +0100] "POST /myurl/login/index.php HTTP/1.1" 303 906 "https://somewebsite.tld/myurl/login/index.php" "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0"


Jetzt müssen Sie einen Jail für den bentzerdefinierten Filter erstellen. Das Jail für den erstellen benutzerdefinierten Filter wird dann in der Datei jail.local hinzugefügt.

[SERVICENAME]
enabled = true
filter = SERVICENAME
action  = iptables-multiport[name=web, port="http,https", protocol=tcp]
logpath = /var/log/apache2/access.log
maxretry = 5


ACHTUNG: action kann ausgelassen werden (um Standardeinstellung zu übernehmen). Eventuell müssen logpath oder der failregex angepasst werden. Bei einer Standardkonfigurationen von Apache2 (unter Ubuntu oder Debian) sollte dies passen.

Damit sind wir mit dem Einrichten eines benutzerdefnierten Fail2ban-Filters fertig. Fail2ban wird nach matches (Vorfälle) gemäß der Einstellungen des benutzerdefinierten Filters überprüfen. Bitte vergessen Sie nicht fail2ban neuzustarten!


Fail2ban-Filter testen

Der Fail2ban-Filter kann mit dem Programm fail2ban-regex getestet werden.

fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/SERVICENAME.conf


Mehrere Überprüfungen / Mehrere Zeilen verwenden im failregex

Wenn Sie auf mehrere matches (Vorfälle / Zeilen in den Logdateien) überprüfen möchten, dann müssen Sie das regex in seperate Zeilen hinzufügen. Ein Failregex kann mehrere Zeile haben. Eine dieser Zeilen wird aber auf eine Zeile der Logdatei überprüft (für matches).

Beispielcode:

failregex = Authentication failure for .* from <HOST>
            Failed [-/\w]+ for .* from <HOST>
            ROOT LOGIN REFUSED .* FROM <HOST>
            [iI](?:llegal|nvalid) user .* from <HOST>



Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Ok