fail2ban

Wie, was, fail2ban?

Wir experimentieren neuerdings mit fail2ban, um Bruteforce-Angriffe auf bestimmte Dienste abzufangen. Das Programm durchsucht Logs nach einem vorgegebenen Schema und kann, wenn dieses Schema mehr als x mal in Zeitraum y gefunden wurde, Aktionen durchführen, wie beispielsweise die IP-Adresse blockieren. Die Konfiguration ist auf allen unseren Hosts die gleiche, hier mal am Beispiel von crater:

[root@crater ~]# fail2ban-client status
Status
|- Number of jail:    6
`- Jail list:        apache-joomla-login, apache-wp-login, apache-auth, apache-friendica-load-prevention, ssh-iptables, wp-spam

Unsere Regeln

Das Prinzip ist immer das selbe. Da der Filter für die Wordpress-Loginmaske am meisten anschlägt, hier mal die dahinter liegende Konfiguration:

[apache-wp-login]
enabled  = true
filter   = apache-wp-login
action   = iptables-multiport[name=apache-wp-login,port="80,443"]
logpath  = /var/log/httpd/virtual_log
bantime  = 3600
maxretry = 10
findtime = 120

Durchsucht wird also das Log vom Webserver und wenn das Schema aus dem Filter apache-wp-login innerhalb von 120 Sekunden 10x gefunden wird, wird die IP-Adresse auf Port 80 und 443 für eine Stunde geblockt. Hier der Filter (und hier die Vorlage):

[Definition]
failregex = ^.*\.uberspace\.de <HOST>.*] "POST .*/wp-login.php HTTP/.*" 200

Hier mal ein Eintrag aus dem Log des Webservers, das auf das Schema passt:

xxxx.crater.uberspace.de x.x.x.x - - [12/Nov/2014:11:26:22 +0100] "POST /wp-login.php HTTP/1.1" 200 4007 "https://some_url/wp-login.php" "some_browser"

Wie viel bringt das?

Einiges:

[root@crater ~]# cat /var/log/messages | grep fail2ban.actions | tail
Nov 12 09:08:35 crater fail2ban.actions[10946]: WARNING [apache-wp-login] Ban x.x.x.x
Nov 12 09:19:24 crater fail2ban.actions[10946]: WARNING [wp-spam] Unban x.x.x.x
Nov 12 09:52:19 crater fail2ban.actions[10946]: WARNING [apache-wp-login] Ban x.x.x.x
Nov 12 09:53:04 crater fail2ban.actions[10946]: WARNING [apache-wp-login] Ban x.x.x.x
Nov 12 10:08:35 crater fail2ban.actions[10946]: WARNING [apache-wp-login] Unban x.x.x.x
Nov 12 10:52:19 crater fail2ban.actions[10946]: WARNING [apache-wp-login] Unban x.x.x.x
Nov 12 10:53:04 crater fail2ban.actions[10946]: WARNING [apache-wp-login] Unban x.x.x.x
Nov 12 10:53:25 crater fail2ban.actions[10946]: WARNING [ssh-iptables] Ban x.x.x.x
Nov 12 11:03:25 crater fail2ban.actions[10946]: WARNING [ssh-iptables] Unban x.x.x.x
Nov 12 11:04:34 crater fail2ban.actions[10946]: WARNING [apache-wp-login] Ban x.x.x.x

Wenn ihr euch also wundert, warum ihr euch nach einigen fehlgeschlagenen Versuchen nicht mehr einloggen könnt, weil keine Daten mehr vom Server kommen: It's not a bug - it's a feature.