Fail2ban - Benutzerdefinierter Filter für andere Webdienste

Fail2ban Filter für andere Webdienste, die keine eigenes Logging durchführen. z.B.: moodle (educloud), wordpress, joomla.

Normale Einrichtung

1. Eine Fail2ban Filter-Conf-Datei für den Webdienst anlegen. Hier als Beispiel der Webdienst "DIENSTNAME"

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

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

# DIENSTNAME 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 /educloud/login/index.php HTTP/1.1

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


Dieses Regex behindelt hier folgende Einträge. Loginversuch: Logeintrag Beispiel von Moodle:

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


2. Den Filter in die jail.local Datei eintragen:

[DIENSTNAME]
enabled = true
filter = DIENSTNAME
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 Apache2 Standardkonfigurationen sollte dies passen.

Fail2ban Filter testen

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

Mehrere Überprüfungen / Mehrere Zeilen verwenden im failregex

BEMERKUNG: Wenn auf mehrere Matches (Zeilen in logfiles) überprüft werden soll, dann gehören diese in seperaten Zeilen.

A failregex can have multiple lines, any one of which may match a line of the log file.

Beispiel-Code:

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