
Ten poradnik pokazuje kompletną instalację i konfigurację Fail2Ban dla Nginx i WordPressa, w taki sposób, aby:
- blokować skanery i boty (np. próby dostępu do /.env, /.git, phpmyadmin itd.),
- nie blokować administratora WordPressa,
- banować IP po 5 błędnych/podejrzanych żądaniach,
- ban trwa tylko 5 minut (bez ryzyka zablokowania samego siebie na długo).
Krok 1: instalacja Fail2Ban
Zainstaluj Fail2Ban:
|
1 2 |
apt update apt install -y fail2ban |
Włącz i uruchom usługę:
|
1 2 |
systemctl enable fail2ban systemctl start fail2ban |
Sprawdź czy działa:
|
1 2 |
fail2ban-client ping systemctl status fail2ban |
Krok 2: utworzenie filtra nginx-secure
Utwórz plik filtra:
|
1 |
nano /etc/fail2ban/filter.d/nginx-secure.conf |
Wklej:
|
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 = |
Krok 3: utworzenie jail nginx-secure
Utwórz plik:
|
1 |
nano /etc/fail2ban/jail.d/nginx-secure.conf |
Wklej:
|
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 |
Krok 4: restart Fail2Ban
|
1 2 |
fail2ban-server -t systemctl restart fail2ban |
Krok 5: sprawdzenie czy firewall działa
Sprawdź czy chain istnieje:
|
1 2 |
iptables -S | grep f2b-nginx-secure iptables -L f2b-nginx-secure -n -v |
Test z zewnątrz
Uruchom z innej maszyny:
|
1 2 3 |
for i in 1 2 3 4 5; do curl -I https://soban.pl/.env done |
Po 5 próbach IP zostanie zbanowane na 5 minut.
Sprawdzenie banów
|
1 |
fail2ban-client status nginx-secure |
Odblokowanie IP
Odblokuj swoje IP:
|
1 |
fail2ban-client set nginx-secure unbanip TWOJE_IP |
Podsumowanie
- chroni przed skanerami i exploitami,
- nie blokuje panelu WordPress,
- ban trwa tylko 5 minut,
- działa poprawnie z iptables-nft,
- łatwy test i łatwe odblokowanie IP.