
Diese Anleitung zeigt die vollständige Installation und Konfiguration von Fail2Ban für Nginx und WordPress, um:
- Scanner und Bots zu blockieren (z. B. Zugriffe auf /.env, /.git, phpmyadmin usw.),
- den WordPress-Administrator nicht zu blockieren,
- eine IP nach 5 verdächtigen oder ungültigen Anfragen zu sperren,
- nur eine kurze Sperre von 5 Minuten anzuwenden (kein Risiko, sich selbst lange auszusperren).
Schritt 1: Fail2Ban installieren
Installieren Sie Fail2Ban:
|
1 2 |
apt update apt install -y fail2ban |
Aktivieren und starten Sie den Dienst:
|
1 2 |
systemctl enable fail2ban systemctl start fail2ban |
Überprüfen Sie den Status:
|
1 2 |
fail2ban-client ping systemctl status fail2ban |
Schritt 2: nginx-secure Filter erstellen
Erstellen Sie die Filterdatei:
|
1 |
nano /etc/fail2ban/filter.d/nginx-secure.conf |
Fügen Sie folgende Konfiguration ein:
|
1 2 3 4 5 6 7 8 9 10 |
[Definition] failregex = ^<HOST> - .* "(?:GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH|PROPFIND|CONNECT) (?:/\.env|/wp-config\.php|/phpinfo\.php|/(?:phpmyadmin|pma|adminer)(?:/|$)|/(?:\.git|\.svn|\.hg)(?:/|$)|/vendor/phpunit/|/cgi-bin/).*" \d{3} .* ^<HOST> - .* "(?:GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH|PROPFIND|CONNECT) (?!/(?:wp-login\.php|wp-admin/))[^"]*" (?:400|403|405|408|413|414|429|444|499) .* ^<HOST> - .* "(?:GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH|PROPFIND|CONNECT) .*" \d{3} .* "(?:[^"]*)" "(?:[^"]*(?:sqlmap|nikto|masscan|zgrab|nmap|acunetix|wpscan|dirbuster|gobuster)[^"]*)" .* ignoreregex = |
Schritt 3: nginx-secure Jail erstellen
Erstellen Sie die Jail-Konfigurationsdatei:
|
1 |
nano /etc/fail2ban/jail.d/nginx-secure.conf |
Fügen Sie folgende Konfiguration ein:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[nginx-secure] enabled = true port = http,https filter = nginx-secure logpath = /var/log/nginx/access.log /var/log/nginx/access-*.log findtime = 600 maxretry = 5 bantime = 300 action = iptables-multiport[name=nginx-secure, port="http,https"] ignoreip = 127.0.0.1/8 ::1 |
Schritt 4: Fail2Ban neu starten
|
1 2 |
fail2ban-server -t systemctl restart fail2ban |
Schritt 5: Firewall überprüfen
Überprüfen Sie, ob die Fail2Ban-Chain existiert:
|
1 2 |
iptables -S | grep f2b-nginx-secure iptables -L f2b-nginx-secure -n -v |
Externer Test
Führen Sie dies von einer anderen Maschine aus:
|
1 2 3 |
for i in 1 2 3 4 5; do curl -I https://soban.pl/.env done |
Nach 5 Versuchen wird die IP-Adresse für 5 Minuten gesperrt.
Gesperrte IPs anzeigen
|
1 |
fail2ban-client status nginx-secure |
IP entsperren
Entsperren Sie Ihre IP manuell:
|
1 |
fail2ban-client set nginx-secure unbanip IHRE_IP |
Zusammenfassung
- schützt vor Scannern und Exploit-Versuchen,
- blockiert das WordPress-Admin-Panel nicht,
- verwendet eine kurze Sperrzeit von 5 Minuten,
- voll kompatibel mit iptables-nft,
- einfach zu testen und einfach zu entsperren.