Beim Betrieb eines Servers wird der Nutzer schnell feststellen, dass er nicht der einzige ist, der gerne Zugriff auf den Server hätte. Um zu häufige Loginversuche abzublocken, gibt es Fail2ban. Dieses Programmpaket durchsucht die entsprechenden Logs und blockiert böswillige Versuche, in das System einzubrechen. Damit gehört Fail2ban zu den Intrusion Prevention-Systemen. Damit kann es auch zur Auswertung von Login-Versuchen auf die eigenen WordPress-Installationen genutzt werden. Wer in die Logs schaut, wird dort ähnliche Zeilen finden:
18.217.216.181 – – [23/Nov/2021:19:32:40 +0100] „POST /wp-login.php HTTP/1.1“ 200 8408 „https://seeseekey.net/wp-login.php“ „Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0“
Um WordPress mit Fail2ban zu verheiraten muss ein einsprechender Jail und ein Filter angelegt werden. Was mich im Vorfeld in Bezug auf WordPress irritierte war der Statuscode 200, wenn ein Login in WordPress fehlschlägt. Hintergrund ist hier das WordPress bei einem erfolgreichen Login stattdessen den Statuscode 302 (Found) nutzt. Damit kann im ersten Schritt der Jail für Fail2ban erstellt werden:
nano /etc/fail2ban/jail.d/wordpress.conf
Diese Datei wird nun wie folgt befüllt:
[wordpress] enabled = true port = http,https filter = wordpress logpath = /var/log/nginx/access.log maxretry = 3
Anschließend muss der genutzte Filter ebenfalls angelegt werden:
nano /etc/fail2ban/filter.d/wordpress.conf
Der entsprechende Filter sieht wie folgt aus:
# Filter for WordPress login [INCLUDES] before = common.conf [Definition] failregex = <HOST>.*POST.*(wp-login\.php|xmlrpc\.php).* 200 datepattern = %%d/%%b/%%Y:%%H:%%M:%%S %%z
Nach einem Neustart von Fail2ban mittels:
service fail2ban restart
ist der neue Jail aktiv. Über das Log kann die Arbeit desselben betrachtet werden:
tail -f /var/log/fail2ban.log
Damit sind die WordPress-Installationen gegen den Versuch unbefugter Logins besser abgesichert. Nach drei Fehlversuchen, wird die entsprechende IP-Adresse gesperrt, sodass weitere Verbindungsversuche von dieser IP-Adresse vom Server nicht mehr beantwortet werden.