Daily Archives: 19. April 2014

fail2ban mit WordPress, ownCloud und Squirrelmail

Mit fail2ban lassen sich ganz wunderbar die unzähligen Login-Versuche blockieren, die tagtäglich auf einen Linuxserver einprasseln. Für SSH, Apache und viele weitere Dienste sind Filter vorab konfiguriert. Für WordPress, ownCloud und Squirrelmail ist etwas Handarbeit nötig.

Als Grundlage diente hier eine aktuelle Ubuntu 14.04 Installation. WordPress und ownCloud wurden manuell installiert, Squirrelmail direkt aus den Paketquellen. Letzteres benötigt zusätzlich auch noch das Paket squirrelmail-logger.

Die weiter unten erwähnten fail2ban Filter gehören jeweils ins Verzeichniss /etc/fail2ban/filter.d/, wohingegen die jail.conf sich in /etc/fail2ban/ findet. Ehe mittels
service fail2ban restart
die Filter scharf gestellt werden, lassen diese sich zuvor mittels
fail2ban-regex /pfad/zu/logfile.log /etc/fail2ban/filter.d/filtername.conf
manuell anwenden und debuggen.

Wer eine von den fail2ban Standardeinstellungen (im oberen Teil der jail.conf) abweichende findtime (Zeit in der Login-Fehler gezählt werden) oder bantime (Zeit die die IP gebannt wird) je nach Webservice konfigurieren möchte, kann das ganz analog zum Feld maxretry (Anzahl der Login-Fehler ehe geblockt wird) tun.

WordPress

WordPress schreibt in der Standardkonfiguration auf einem Apache in das access.log einen HTTP-Status Code 200 bei einem gescheiterten Login. Der fail2ban filter apache-wplogin.conf sieht dann wie folgt aus

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

und die jail.conf wird um folgenden Block ergänzt

[apache-wplogin]
enabled = true
port = http,https
filter = apache-wplogin
logpath = /var/log/apache*/*access.log
maxretry = 3

ownCloud

Für ownCloud müssen zunächst in der config.php folgende drei Punkte ggf. ergänzt werden

'logtimezone' => 'Europe/Berlin',
'log_type' => 'syslog',
'log_authfailip' => 'true',

um anschließend den fail2ban Filter owncloud.conf zu erstellen

[Definition]
failregex = .*ownCloud.*Login failed:.*, IP:<HOST>.*$
ignoreregex =

und die jail.conf zu erweitern

[owncloud]
enabled = true
port = http,https
filter = owncloud
logpath = /var/log/syslog
maxretry = 3

Squirrelmail

Nachdem das Paket squirrelmail-logger installiert war, hat Squirrelmail von sich aus nach syslog geloggt, daher kann direkt der fail2ban Filter squirremail.conf erstellt werden

[Definition]
failregex = .*squirrelmail: Failed webmail login.* at <HOST>.*$
ignoreregex =

und der entsprechende Block in der jail.conf ergänzt werden

[squirrelmail]
enabled = true
port = http,https
filter = squirrelmail
logpath = /var/log/mail.log
maxretry = 3

Bei der Recherche waren die folgenden Quellen teilweise nützlich:

  • fail2ban und WordPress
  • fail2ban und ownCloud