Brute Force Angriffe auf WordPress abwehren

Von | 1. Oktober 2014

Wordpress fail2banAm Wochenende bin ich zufällig über ein Brute Force Angriff auf eine WordPress-Installation auf meinen Server gestolpert. Diesen Angriff habe ich manuell mit iptables bekämpfen können. Besser wäre es jedoch, solche Angriffe automatisch blocken zu können. Dafür habe ich ein genial einfaches WordPress-Plugin gefunden: WP Fail2bann.
Fail2Ban läuft bei mir sowieso auf dem Server und sichert diverse Dienste ab.

WP fail2ban installieren

WP Fail2ban kann ganz normal über WordPress installiert werden. Ach wenn das Plugin nicht mit 4.0 getestet wurde, funktioniert es wunderbar.
Es muss auch nichts im Plugin konfiguriert werden. Einfach installieren und aktivieren.
Nun schreibt das Plugin alle Login-Versuche in /var/log/auth.log

fail2ban konfigurieren

Auch die Konfiguration von fail2ban hat der Plugin-Entwicker so einfach wie möglich gemacht. Einfach die Datei:
..wp-content/plugins/wp-fail2ban/wordpress.conf nach /etc/fail2ban/filter.d/ kopieren und dann die Datei etc/fail2ban/jail.conf um folgende Einträge erweitern :


[wordpress] 
enabled = true 
filter = wordpress 
port = http,https
maxretry = 4
logpath = /var/log/auth.log

dann noch fail2ban neu starten, und sich freuen :D

sichere Anmeldung erzwingen

Sehr wirkungsvoll gegen Angriffe auf wp-login ist im Augenblick die Anmeldung über https zu erzwingen. Scheinbar sind die aktuellen Bots nicht in der Lage https-Seiten zu öffnen. Warum auch immer, die Logs verzeichnen seit dem keinen einzigen erfolgreichen Login-Angriff. Lediglich die 302-Umleitung taucht im Log auf :)
Wenn die Webseite auch unter https erreichbar ist, reicht es folgende Einträge in der wp-config.php zu machen:

/* Anmeldung mit SSL */
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

Die Einträge müssen jedoch vor folgendem Eintrag eingefügt werden:

/* That's all, stop editing! Happy blogging. */

Admin umbenennen

So trivial der Tipp auch ist, so wirksam ist er aber. 99% aller Angriffe erfolgen auf den Nutzer „admin“. Diesen umzubenennen ist recht einfach und lässt die Angriffe ins Leere laufen. Dafür kann man den Usernamen in der Datenbank ändern, oder geht den etwas umständlichen Weg und legt sich ein neuen Nutzer mit Adminrechten an und löscht den admin danach.
Es gibt auch diverse Plugins wie zum Beispiel „Admin renamer extended“. Damit ist die Aktion wirklich Kindereinfach.

zusätzliche Authentifizierung mit Nginx

Auch sehr elegant ist eine zusätzliche Authentifizierung durch nginx selbst. Diese ist einfach zu implementieren und arbeitet sehr schnell weil hierfür kein PHP benötigt wird.
Dazu erzeugen wir eine Datei z.B: /etc/ninx/htpasswd und tragen dort Login-Name und Kennwort ein. Wobei das Kennwort mit CRYPT verschlüsselt hinterlegt werden muss.


htpasswd -b -c -d Dateiname Benutzerkennung Kennwort

-b benutzt das Kennwort der Konsole
-c erzeugt eine neue Datei, Soll also ein weiterer Nutzer hinzugefügt werden, darf der Parameter -c nicht genutzt werden!
Und der Parameter -d sorgt dafür, dass das Kennwort mit CRYPT verschlüsselt wird

Sollte htpasswd auf dem Server nicht installiert sein, dann müsst Ihr die apache-utils nachinstallieren.


sudo apt-get install apache2-utils

Alternative könnt Ihr auch ein Webdienst wie htpasswd-generator nutzen.

Jetzt muss nur noch nginx angewiesen werden, für den Zugriff auf wp-login.php eine Kennwortabfrage zu machen. Dafür fügen wir folgenden Code in die Site-Konfiguration ein.
PS: fastcgi_pass muss eventuell eurer Konfig angepasst werden.


## AUTH ADMIN
location = /wp-login.php {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/htpasswd;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
}

Ok, damit sollte eure WordPress-Installation vor Wörterbuch-Attacken sicher sein.
Trotzdem, es geht nichts über sichere Kennwörter!

Ein Gedanke zu „Brute Force Angriffe auf WordPress abwehren

  1. Pingback: wp-login.php mit fail2ban - my GettoWEB.DE

Kommentare sind geschlossen.