Eine typische Zeile sieht so aus:
CODE:
210.42.140.5 - - [01/Aug/2007:23:08:21 +0200] "POST /comment.php?type=trackback&entry_id=152 HTTP/1.1" 302 238 "-" "-"
Danach wird eine neue Datei blog.local im /etc/fail2ban/filter.d/ Verzeichnis angelegt:
CODE:
/etc/fail2ban/filter.d# cat blog.local
# Fail2Ban configuration file
[Definition]
# Option: failregex
# Notes.: regex to match the password failure 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.
# Values: TEXT
failregex = <HOST>.*"POST /comment\.php\?type=trackback
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
Mit failregex wird bestimmt, nach welcher Regex fail2ban suchen soll. Testen kann man das wunderbar mit fail2ban-regex:
CODE:
:
fail2ban-regex '217.141.249.203 - - [29/Jul/2007:06:49:32 +0200] "POST /comment.php?type=trackback&entry_id=130 HTTP/1.1" 200 87 "-" "-"' '<HOST>.*"POST /comment\.php\?type=trackback'
Success, the following data were found:
Date: Sun Jul 29 06:49:32 2007
IP : 217.141.249.203
Date template hits:
0 hit: Month Day Hour:Minute:Second
0 hit: Weekday Month Day Hour:Minute:Second Year
0 hit: Year/Month/Day Hour:Minute:Second
1 hit: Day/Month/Year:Hour:Minute:Second
0 hit: TAI64N
0 hit: Epoch
Benchmark. Executing 1000...
Performance
Avg: 0.45285296440124512 ms
Max: 13.690948486328125 ms (Run 786)
Min: 0.41079521179199219 ms (Run 294)
Aufruf: fail2ban-regex <Zeile aus Logfile> <Regex, die auf die Zeile matchen soll>
Ein wirklich geniales Tool, um die Regex gleich zu testen. Der reguläre Ausdruck passt also auf die Zeile. Der Ausdruck <HOST> matcht dabei sowohl IP-Adresse als auch Hostnamen und genialerweise muß man sich auch nicht um das Parsen des Datums kümmern, denn das findet fail2ban schon alleine.
Danach noch in /etc/fail2ban/ die Datei jail.local angelegt, in dem die Überwachung für das blog aktiviert wird:
CODE:
/etc/fail2ban# cat jail.local
# Enable apache filtering
[apache-blog]
enabled = true
port = http
filter = blog
logpath = /var/log/apache2/access_log
maxretry = 0
ignoreip = hostname
Hier wird festgelegt, dass ein neues Logfile zu überwachen ist. Dabei wird eingestellt, dass dieser Service aktiviert ist (enabled), auf Port 80 lausch (port), der filter blog.local zum Parsen der Logdatei verwendet werden soll (filter), die log dateien unter /var/log/apache2/access_log zu finden sind (logpath) und bei jedem Match der Host zu blacklisten ist (wichtig, wenn vom eigenen blog eventuell noch trackbacks auf ältere Artikel gemacht werden, unbedingt ignoreip auf den aktuellen Hostnamen machen, ansonsten blockiert man sich selber).
Allgemeine Einstellungen (wie lange zu blocken sind, welche IPs zu ignorieren sind) können im Abschnitt [DEFAULT] der Datei jail.conf gemacht werden.
Wenn das alles geschehen ist, einfach fail2ban restarten:
/etc/init.d/fail2ban restart
und das Logfile von fail2ban beobachten:
CODE:
$ tail -f /var/log/fail2ban.log
2007-08-01 23:08:22,839 fail2ban.actions: WARNING [apache-blog] Ban 210.42.140.5
2007-08-01 23:11:05,864 fail2ban.actions: WARNING [apache-blog] Ban 61.233.41.218
2007-08-01 23:12:15,883 fail2ban.actions: WARNING [apache-blog] Ban 217.141.109.205
2007-08-01 23:14:47,900 fail2ban.actions: WARNING [apache-blog] Ban 125.103.6.230
2007-08-01 23:15:01,924 fail2ban.actions: WARNING [apache-blog] Unban 217.141.105.203
Funktioniert bestens.

1) Finde heraus, wo fehlgeschlagene Logins gelogged werden.
2) Konfiguriere fail2ban analog zur obigen Konfig.
MfG
Christian