Laut W³Techs basieren 43 % aller Webseiten auf WordPress (Stand: 05.12.2021). Damit erreicht es einen Marktanteil von ca. 65 % bei den Content-Management-Systemen. Ein so weit verbreitetes System stellt ein beliebtes Angriffsziel für Skript-Kiddies und Internet-Schurken dar. Es ist also nicht die Frage, ob die eigene WordPress-Instanz Ziel eines Angriffs wird, sondern wann dies der Fall ist. So verzeichnete dieser Blog allein im letzten Monat 190.492 erfolglose Anmeldeversuche.
Gegen das Ausnutzen von Sicherheitslücken hilft nur patchen, patchen und nochmals patchen. Doch geht es hier nicht um Updatestrategien. Dieser Artikel setzt auf dem Text unter [1] auf und dokumentiert in Kürze, wie man sich mit Fail2Ban gegen Brute-Force-Angriffe schützen kann. Dabei geht dieser Artikel davon aus, dass auf dem System bereits eine lauffähige Version von Fail2Ban vorhanden ist. Wer Unterstützung bei der Installation benötigt wird unter [3] fündig.
Installation des Plugins WP fail2ban
WP fail2ban – Advanced Security Plugin von Charles Lecklider sorgt dafür, dass sämtliche Loginversuche (erfolglose wie erfolgreiche) in Syslog bzw. /var/log/auth.log
protokolliert werden.
Das Plugin muss lediglich installiert und aktiviert werden. Es ist Voraussetzung, um den Filter aus dem folgenden Abschnitt nutzen zu können.
Konfiguration des Fail2Ban-Filters und -Jails
Update 12.05.2022: Danke an Jens für seinen Hinweis in den Kommentaren. Ich habe den Artikel entsprechend aktualisiert.
Im ersten Schritt werden vorkonfigurierte Filter-Datein heruntergeladen:
$ wget https://plugins.svn.wordpress.org/wp-fail2ban/trunk/filters.d/wordpress-hard.conf
$ wget https://plugins.svn.wordpress.org/wp-fail2ban/trunk/filters.d/wordpress-soft.conf
$ sudo mv wordpress-*.conf /etc/fail2ban/filter.d/
Aktiviert wird die Filter-Regel, indem die Datei /etc/fail2ban/jail.d/wordpress.conf
mit folgendem Inhalt erstellt wird:
[wordpress-hard]
enabled = true
filter = wordpress-hard
logpath = /var/log/auth.log
maxretry = 3
port = http,https
findtime = 10800 # 3h
bantime = 86400 # 24h
[wordpress-soft]
enabled = true
filter = wordpress-soft
logpath = /var/log/auth.log
maxretry = 3
port = http,https
findtime = 10800 # 3h
bantime = 86400 # 24h
Die dargestellte Konfiguration führt dazu, dass IP-Adressen bei mehr als 3 fehlgeschlagenen Anmeldeversuchen innerhalb von 3 Stunden für 24 Stunden gebannt werden.
Den Status, die Anzahl der fehlgeschlagenen Anmeldeversuche sowie die gebannten IP-Adressen, können mit folgendem Kommando abgerufen werden:
$ sudo fail2ban-client status wordpress-hard
Status for the jail: wordpress-hard
|- Filter
| |- Currently failed: 18
| |- Total failed: 19
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
Der Status des Jail für wordpress-soft wird dementsprechend mit sudo fail2ban-client status wordpress-soft
abgefragt.
Damit ist dieser Artikel auch schon am Ende angekommen. Der folgende Abschnitt bietet noch ein paar Links zu weiterführenden Informationen.
Quellen und weiterführende Links
- Fail2Ban – Schutz vor Brute-Force-Angriffen. Christoph Dyllick-Brenzinger. 3. Juni 2015.
- Wikipedia-Artikel Fail2ban — https://de.wikipedia.org/wiki/Fail2ban
- fail2ban im Ubuntuusers-Wiki — https://wiki.ubuntuusers.de/fail2ban/
- WordPress-Plugin Seite zu WP fail2ban – Advanced Security Plugin — https://de.wordpress.org/plugins/wp-fail2ban/
- Projektseite WP fail2ban — https://wp-fail2ban.com/
- https://docs.wp-fail2ban.com/en/4.4/configuration/fail2ban.html
Die Konfiguration ist leider nicht komplett. Es wird unbedingt auch der Filter wordpress-soft benötigt. Nur wordpress-hard filter z.B. kein „Authentication failure for“. Man sollte also zwingend beide Filter für fail2ban herunterladen und beide Filter auch in der wordpress.conf für fail2ban eintragen. Siehe: https://docs.wp-fail2ban.com/en/4.4/configuration/fail2ban.html
BTW: Dein Plugin „Subscribe to comments reloaded“ schreibt hier drei Warnungen unten in die Seite.
Hallo Jens,
habe vielen Dank für deinen Hinweis. Ich werde mir das so bald wie möglich ansehen und den Artikel entsprechend aktualisieren.
Danke auch für den Hinweis bzgl. des Plug-Ins. Der Fehler scheint nach einem Update des Plugins hereingekommen zu sein. Ich werde mir auch das ansehen, sobald ich ein wenig Zeit finde.
Nochmals Danke. Das wäre mir sonst vermutlich nicht aufgefallen.
Viele Grüße
Jörg
Pingback: Linux: Sicherheit in der Cloud – My CMS
Pingback: WP fail2ban: Gutes Plugin mit ausbaufähiger Dokumentation | My-IT-Brain