Fail2ban für WordPress

Patrizier Sven
WordPress Logo

Da ich inzwischen selber einige WordPress Instanzen betreibe, mache ich noch eine kleine WordPress Ecke auf. Hier werde ich meine Erweiterungen und auch Plugins vorstellen, angefangen mit einem kleinen Registrierungsschutz ohne Plugin oder PHP.

In letzter Zeit häufen sich mal wieder die Loginversuche im WordPress Backend. Als Abhilfe kann man jetzt hier einige der vielen Plugins installieren mit dem Nachteil, dass sich dies oft massiv auf die Geschwindigkeit des WordPress auswirkt.

Wer einen eigenen vServer oder Rootserver sein eigen nennt, kann diese Arbeit direkt vom System erledigen lassen. Fail2ban (Homepage) sollte auf jedem Linux Server in der freien Wildbahn installiert sein um Attacken zu minimieren und dynamisch die Firewall Regeln zu ergänzen. Dies können wir auch für ein WordPress nutzen 😉

Fail2ban konfigurieren

Damit Fail2ban die Loginversuche im WordPress überwacht müssen wir eine Konfiguration dafür unter /etc/fail2ban/filter.d/ erstellen. In der Datei (bei mir apache-wp-login.conf)  wird nun hinterlegt was Fail2ban filtern soll.

Die Eintrag selber ist sehr simple, und besteht nur aus einem regulären Ausdruck, welcher alle Einträge eines POST Aufrufes der Datei wp-login.php filtert.

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

Danach wird die /etc/fail2ban/jail.conf noch um diesen Filter erweitert, und Anzahl der maximalen Aufrufe, Sperrzeiten, überwachte Logdatei etc festgelegt.

[apache-wp-login]
enabled = true                            # Filter einschalten
port = http,https                         # zu sperrende Ports
filter = apache-wp-login                  # benutzter Filter
logpath = /var/www/*/log/*access.log      # überwachte Datei(en)
maxretry = 3                              # maximale Aufrufe
findtime = 3600                           # -> innerhalb von ... Sekunden (1h)
bantime = 43200                           # Sperre für ... Sekunden (12h)

Jetzt noch ein kleines „/etc/init.d/fail2ban restart“ als root, und der Filter sollte laufen. Ihr könnt dies per iptables prüfen, es sollte nun eine eine Kette fail2ban-apache-wp-login geben.

vserver1:/home/sven/# iptables -L
Chain fail2ban-apache-wp-login (1 references)
target prot opt source destination 
RETURN all -- anywhere

Wenn es nicht klappt

  1. die Position der Logdateien prüfen – meine liegen in dieser Konfiguration alle unter /var/www/[domainname]/log/
  2. den regulären Ausdruck an Hand eines eigenen Eintrages in der access.log mit fail2ban-regex testen, die Einträge weichen je nach Apache Konfiguration voneinander ab

»«

4 Kommentare zu “Fail2ban für WordPress”

  • Powie sagt dazu:

    Danke für den Beitrag. Aktuell sind die Bots wieder verstärkt unterwegs. Das ist eine saubere Lösung dagegen.

    Antworten
  • Michael sagt dazu:

    Endlich habe ich das gefunden. Herzlichen Dank, das war meine Rettung 🙂

    Antworten
  • Dominik Sandjaja sagt dazu:

    Noch eine kleine Anmerkung:
    Falls der Restart von fail2ban nach dem Einfügen dieser Konfiguration nicht klappen sollte: Einfach mal probieren, die obigen Kommentare aus der jail.conf zu entfernen … Ich glaube, mein System (Debian 6) hatte mit den Umlauten Probleme 🙂

    Abgesehen davon aber ganz herzlichen Dank für diese Info!

    Antworten
  • Harald sagt dazu:

    Da ich nur begrenzten Zugriff habe (Webspace) habe ich bei mir „Rename wp-login.php“ installiert – dieses kleine Plugin lenkt den Zugriff auf die wp-login.php auf einen frei definierbaren Dateinamen. Für Seiten, die eh keinen Userzugriff erlauben, eine einfache Möglichkeit – so hoffe ich – sich vor Bots erst einmal zu schützen. Als kleiner Tipp für alle, die Bots so wie ich hassen und keinen Server haben 🙂

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.