ISPConfig3 NGINX Server WordPress absichern mit Fail2ban absichern

In der HowToForge Installationsanleitung für ISPConfig 3 wird Fail2ban schon verwendet, um SSH Login Versuche nach mehren falschen Passwort Eingaben zu sperren.
Nun kann Fail2ban erweitert werden um auch Versuche von Hackern und Scriptkiddies zu sperren, besser bekannt auch als Brute-Force-Attacke. Die Angreifer versuchen darüber durch User und Passwörter zu erraten um zugriff in den Adminbereich der WordPress Installation zu gelangen. In diesem Artikel erweitern wir Fail2Ban so, dass es auch auf die Login-Fehlversuche nach wiederholtem Male reagiert.

Diese Anleitung setzt eine ISPConfig 3 Installation mit Fail2ban voraus und kann auch unter anderen Linux Systemen funktionieren, in diesem Fall nutze ich ein Debian 10 System

1. Erweiterung der jail.local von Fail2ban

nano /etc/fail2ban/jail.local

[nginx-wp-login]
enabled = true
port = http,https
filter = nginx-wp-login
logpath = /var/log/ispconfig/httpd/*/access.log

[nginx-wp-xmlrpc]
enabled = true
port = http,https
filter = nginx-wp-xmlrpc
logpath = /var/log/ispconfig/httpd/*/access.log

2. Erstellen der WordPress Filter

nano /etc/fail2ban/filter.d/nginx-wp-login.conf

[Definition]
failregex = ^<HOST> .*POST .*wp-login\.php HTTP.* 200.*
ignoreregex =
maxretry = 3
findtime = 10800                                                   
bantime = 86400

Wir sichern die Datei und erstellen eine weitere für die WordPress XMLRPC

/etc/fail2ban/filter.d/nginx-wp-xmlrpc.conf

[Definition]
failregex = ^<HOST> .*POST .*xmlrpc\.php.* 200.*
ignoreregex =
maxretry = 3
findtime = 10800                                                   
bantime = 86400

maxretry: Anzahl der Loginversuche

findtime: Überwacht die Dauer einer Sperrung

bantime: Sperrzeit wie lange eine IP Adresse gesperrt wird

Nach dem Speichern prüfen wir, ob die erstellten Dateien vorhanden sind und starten fail2ban neu

ls /etc/fail2ban/filter.d/|grep nginx-wp

nginx-wp-login.conf
nginx-wp-xmlrpc.conf
/etc/init.d/fail2ban restart

3. Funktion Prüfen

nach einiger Zeit finden wir in den Logfiles von Fail2ban Blockierungen von fehlerhaften Logins im WordPress

tail -n 100 /var/log/fail2ban.log
2021-07-05 12:15:35,662 fail2ban.filter [19868]: INFO [nginx-wp-xmlrpc] Found IP-ADRESS - 2021-07-05 12:15:35
2021-07-05 12:15:36,468 fail2ban.filter [19868]: INFO [nginx-wp-xmlrpc] Found IP-ADRESS - 2021-07-05 12:15:36
2021-07-05 12:15:49,111 fail2ban.filter [19868]: INFO [nginx-wp-login] Found IP-ADRESS - 2021-07-05 12:15:48
2021-07-05 12:15:49,716 fail2ban.filter [19868]: INFO [nginx-wp-login] Found IP-ADRESS - 2021-07-05 12:15:49
2021-07-05 12:15:50,524 fail2ban.filter [19868]: INFO [nginx-wp-login] Found IP-ADRESS - 2021-07-05 12:15:50
2021-07-05 12:16:06,391 fail2ban.filter [19868]: INFO [nginx-wp-xmlrpc] Found IP-ADRESS - 2021-07-05 12:16:06
2021-07-05 12:16:12,230 fail2ban.filter [19868]: INFO [nginx-wp-login] Found IP-ADRESS - 2021-07-05 12:16:12
2021-07-05 12:16:46,735 fail2ban.filter [19868]: INFO [nginx-wp-xmlrpc] Found IP-ADRESS - 2021-07-05 12:16:46
2021-07-05 12:16:57,359 fail2ban.filter [19868]: INFO [nginx-wp-login] Found IP-ADRESS - 2021-07-05 12:16:57

Ihr seht hier, Fail2ban sichert nun auch eure WordPress Systeme ab auf dem ISPConfig Server, natürlich lässt sich Fail2ban
auch weiter ausbauen um andere Applikationen wie Nextcloud, Shopware.

Über folgenden befehl könnt ihr auch einzelne Webs Prüfen, ihr müsst dazu nur ein Web in die Prüfung hinzu fügen

fail2ban-regex /var/log/ispconfig/httpd/WEBDOMAIN/access.log /etc/fail2ban/filter.d/nginx-wp-login.conf

Das Ergebnis sieht dann so aus

Running tests
=============

Use failregex filter file : nginx-wp-login, basedir: /etc/fail2ban
Use log file : /var/log/ispconfig/httpd/WEBDOMAIN/access.log
Use encoding : UTF-8

Results
=======

Failregex: 128 total
|- #) [# of hits] regular expression
| 1) [128] ^<HOST> .*POST .*wp-login\.php HTTP.* 200.*
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
| [1355] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-

Lines: 1355 lines, 0 ignored, 128 matched, 1227 missed
[processed in 0.23 sec]

Links:

Fail2ban

[über den Autor]

Alexander Fox unterstützt HowToForge und das ISPConfig Projekt seit vielen Jahren. Er ist Administrator für Linux Mail und Webserver mit  Erfahrung aus über 15 Jahren.

Das könnte dich auch interessieren …