
Ce guide montre une installation et configuration complètes de Fail2Ban pour Nginx et WordPress, afin de :
- bloquer les scanners et bots (par exemple les tentatives d’accès à /.env, /.git, phpmyadmin, etc.),
- ne pas bloquer l’administrateur WordPress,
- bannir une adresse IP après 5 requêtes suspectes ou invalides,
- appliquer un bannissement court de seulement 5 minutes (sans risque de vous bloquer longtemps).
Étape 1 : Installer Fail2Ban
Installez Fail2Ban :
|
1 2 |
apt update apt install -y fail2ban |
Activez et démarrez le service :
|
1 2 |
systemctl enable fail2ban systemctl start fail2ban |
Vérifiez qu’il fonctionne :
|
1 2 |
fail2ban-client ping systemctl status fail2ban |
Étape 2 : Créer le filtre nginx-secure
Créez le fichier de filtre :
|
1 |
nano /etc/fail2ban/filter.d/nginx-secure.conf |
Collez la configuration suivante :
|
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 = |
Étape 3 : Créer la jail nginx-secure
Créez le fichier de configuration :
|
1 |
nano /etc/fail2ban/jail.d/nginx-secure.conf |
Collez la configuration suivante :
|
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 |
Étape 4 : Redémarrer Fail2Ban
|
1 2 |
fail2ban-server -t systemctl restart fail2ban |
Étape 5 : Vérifier le firewall
Vérifiez que la chaîne Fail2Ban existe :
|
1 2 |
iptables -S | grep f2b-nginx-secure iptables -L f2b-nginx-secure -n -v |
Test externe
Exécutez depuis une autre machine :
|
1 2 3 |
for i in 1 2 3 4 5; do curl -I https://soban.pl/.env done |
Après 5 tentatives, l’adresse IP sera bannie pendant 5 minutes.
Voir les IP bannies
|
1 |
fail2ban-client status nginx-secure |
Débloquer une adresse IP
Débloquez votre IP manuellement :
|
1 |
fail2ban-client set nginx-secure unbanip VOTRE_IP |
Résumé
- protège contre les scanners et les tentatives d’exploitation,
- ne bloque pas le panneau d’administration WordPress,
- bannissement court de seulement 5 minutes,
- compatible avec iptables-nft,
- facile à tester et à débloquer.