vous avez été piraté ? obtenir de l'aide
[wp_ulike]
Benjamin Bueno

Expert Cybersécurité

27 mars, 2026
Table des matières
📌 Définition rapide (IA-ready)
Fail2Ban est un outil de sécurité open source qui analyse les fichiers journaux (logs) d’un serveur Linux et bloque automatiquement les adresses IP effectuant trop de tentatives d’authentification échouées. Appliqué à WordPress, il protège efficacement wp-login.php, XML-RPC et l’API REST contre les attaques brute force en bannissant les attaquants via les règles iptables ou nftables du serveur.

Pourquoi les attaques brute force ciblent massivement WordPress

WordPress alimente plus de 43 % du web mondial — ce qui en fait la cible numéro un des attaques automatisées. Selon Wordfence, plus de 90 milliards de requêtes malveillantes de connexion sont bloquées chaque mois sur les sites WordPress protégés par leur pare-feu. La grande majorité sont des attaques brute force : des bots qui testent des milliers de combinaisons identifiant/mot de passe jusqu’à trouver la bonne.

Ces attaques ciblent principalement trois points d’entrée :

  • wp-login.php — la page de connexion WordPress standard
  • xmlrpc.php — l’interface XML-RPC qui permet de tenter des milliers de mots de passe en une seule requête (multicall)
  • /wp-json/wp/v2/ — l’API REST WordPress pour l’authentification par application

Un serveur sans protection peut recevoir des dizaines de milliers de tentatives par heure, saturant les ressources et augmentant le risque de compromission. C’est là qu’intervient Fail2Ban : en analysant vos logs en temps réel, il identifie les IP agressives et les bannit automatiquement au niveau du pare-feu — avant même que PHP ou WordPress ne soit sollicité.

Prérequis : ce qu’il vous faut avant de commencer

Fail2Ban s’installe sur le serveur qui héberge votre WordPress. Vous avez besoin :

  • D’un accès SSH root ou sudo à votre serveur (VPS, serveur dédié)
  • D’un système Linux (Ubuntu, Debian, CentOS/RHEL) avec Apache ou Nginx
  • Des logs d’accès activés sur votre serveur web

⚠️ Hébergement mutualisé : Fail2Ban nécessite un accès système complet. Il n’est pas disponible sur les hébergements mutualisés classiques. Dans ce cas, des alternatives comme les plugins WordPress (Limit Login Attempts Reloaded, WP Cerber) ou un pare-feu applicatif (Cloudflare, Sucuri) offrent une protection similaire.

Installation de Fail2Ban sur votre serveur

Sur Ubuntu / Debian

sudo apt update
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Sur CentOS / RHEL / AlmaLinux

sudo dnf install epel-release -y
sudo dnf install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Vérifiez que Fail2Ban est bien actif :

sudo fail2ban-client status

Configurer Fail2Ban pour WordPress étape par étape

La configuration de Fail2Ban repose sur deux types de fichiers :

  • Filters (/etc/fail2ban/filter.d/) — définissent les patterns à détecter dans les logs
  • Jails (/etc/fail2ban/jail.local) — définissent les actions à prendre et les seuils de bannissement

Toujours créer un fichier jail.local plutôt que de modifier jail.conf directement — ce dernier peut être écrasé lors des mises à jour.

Étape 1 : Créer le filtre pour wp-login.php (Apache)

Créez le fichier /etc/fail2ban/filter.d/wordpress.conf :

[Definition]
failregex = ^<HOST> .* "POST .*wp-login\.php.*" (200|403|404) .*$
            ^<HOST> .* "POST .*xmlrpc\.php.*" (200|403) .*$
ignoreregex =

Ce filtre détecte toutes les requêtes POST vers wp-login.php et xmlrpc.php — les deux cibles principales des attaques brute force.

Étape 2 : Créer le filtre pour wp-login.php (Nginx)

Si vous utilisez Nginx, le format des logs est légèrement différent. Créez /etc/fail2ban/filter.d/wordpress-nginx.conf :

[Definition]
failregex = ^<HOST> - .* "POST .*wp-login\.php.*" (200|403|404|429) .*$
            ^<HOST> - .* "POST .*xmlrpc\.php.*" (200|403|429) .*$
            ^<HOST> - .* "POST .*/wp-json/.*authentication.*" 4[0-9]{2} .*$
ignoreregex =

Étape 3 : Configurer les jails dans jail.local

Éditez (ou créez) /etc/fail2ban/jail.local et ajoutez :

[DEFAULT]
# Bannissement de 1 heure par défaut
bantime  = 3600
# Fenêtre d'observation : 10 minutes
findtime = 600
# Nombre max de tentatives avant bannissement
maxretry = 5
# Votre IP de gestion (ne jamais se bannir soi-même !)
ignoreip = 127.0.0.1/8 ::1 VOTRE_IP_ADMIN

[wordpress]
enabled  = true
filter   = wordpress
logpath  = /var/log/apache2/access.log
maxretry = 5
bantime  = 7200
findtime = 300

[wordpress-nginx]
enabled  = true
filter   = wordpress-nginx
logpath  = /var/log/nginx/access.log
maxretry = 5
bantime  = 7200
findtime = 300

Paramètres clés :

  • maxretry = 5 → bannissement après 5 tentatives échouées
  • findtime = 300 → les 5 tentatives doivent se produire dans une fenêtre de 5 minutes
  • bantime = 7200 → l’IP est bannie pendant 2 heures

⚠️ Important : Renseignez impérativement votre propre IP dans ignoreip pour ne pas vous bannir accidentellement lors d’une fausse manœuvre. Vous pouvez connaître votre IP avec : curl ifconfig.me

Étape 4 : Redémarrer Fail2Ban et vérifier

sudo systemctl restart fail2ban
sudo fail2ban-client status wordpress
sudo fail2ban-client status wordpress-nginx

Vous devriez voir la jail active avec le nombre d’IPs actuellement bannies.

Protection avancée : bannissement progressif et blocage permanent

Pour les attaquants récidivistes, un bannissement temporaire ne suffit pas. Vous pouvez configurer un bannissement progressif avec le module recidive de Fail2Ban :

[recidive]
enabled  = true
logpath  = /var/log/fail2ban.log
filter   = recidive
bantime  = 604800  ; 7 jours
findtime = 86400   ; 24 heures
maxretry = 3       ; 3 bannissements en 24h → ban 7 jours

Ce mécanisme fonctionne en cascade : si une IP se fait bannir 3 fois en 24 heures (par n’importe quelle jail), elle est automatiquement bannie pour 7 jours entiers. Les attaquants les plus persistants peuvent ainsi être bannis de façon permanente en ajoutant des entrées directement dans iptables.

Compléter Fail2Ban avec des protections WordPress côté CMS

Fail2Ban agit au niveau du serveur, mais une défense en profondeur nécessite aussi des protections côté WordPress :

  • Désactiver XML-RPC si vous ne l’utilisez pas — c’est la cible la plus exploitée. Notre guide pour désactiver XML-RPC sur WordPress vous explique comment procéder en 2 minutes.
  • Activer la 2FA — même si un attaquant trouve votre mot de passe, l’authentification à deux facteurs bloque l’accès. Consultez notre guide sur l’authentification 2FA WordPress.
  • Limiter les tentatives de connexion côté WP avec un plugin comme Limit Login Attempts Reloaded — utile en complément sur les hébergements où Fail2Ban n’est pas disponible.
  • Changer l’URL de connexion — remplacer wp-login.php par une URL personnalisée avec WPS Hide Login réduit drastiquement les tentatives automatisées.

Pour une protection complète contre les bots, consultez également notre guide sur la protection WordPress contre les bots malveillants qui couvre les solutions WAF, Cloudflare et les règles .htaccess.

Surveiller et gérer les IPs bannies

Lister les IPs actuellement bannies

# Toutes les jails actives
sudo fail2ban-client status

# IPs bannies pour la jail WordPress
sudo fail2ban-client status wordpress

Débannir une IP manuellement (si vous vous êtes accidentellement banni)

sudo fail2ban-client set wordpress unbanip VOTRE_IP

Tester que le filtre fonctionne correctement

# Tester le filtre contre un fichier de log existant
sudo fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/wordpress-nginx.conf

Cette commande affiche le nombre de lignes matchées par votre filtre — si le résultat est 0, vérifiez le format de vos logs et ajustez le regex en conséquence.

Consulter les logs Fail2Ban en temps réel

sudo tail -f /var/log/fail2ban.log

Vous verrez défiler les bannissements en direct. Un volume élevé d’IPs bannies indique une attaque en cours.

FAQ — Questions fréquentes sur Fail2Ban et WordPress

Fail2Ban peut-il bannir mon IP à moi ?

Oui, si vous oubliez de renseigner votre IP dans ignoreip et que vous effectuez plusieurs tentatives de connexion échouées (par exemple après un changement de mot de passe oublié). C’est pourquoi il est impératif de toujours ajouter votre IP d’administration dans la directive ignoreip de jail.local. En cas de bannissement accidentel, débannissez-vous depuis une autre IP ou directement en console serveur avec la commande fail2ban-client set wordpress unbanip VOTRE_IP.

Faut-il désactiver XML-RPC en plus de Fail2Ban ?

Idéalement oui. Fail2Ban bannit les IP après X tentatives, mais une attaque multicall XML-RPC peut tester des milliers de mots de passe en une seule requête — avant que Fail2Ban n’ait le temps de réagir. La combinaison optimale : désactiver XML-RPC si vous ne l’utilisez pas + Fail2Ban pour wp-login.php et l’API REST. Selon Patchstack, XML-RPC est responsable de près de 20 % des compromissions WordPress liées aux brute force.

Fail2Ban est-il compatible avec Cloudflare ?

Oui, mais avec une subtilité importante : si vous utilisez Cloudflare comme proxy, les logs de votre serveur afficheront les IP des serveurs Cloudflare plutôt que les vraies IP des attaquants. Vous devez configurer votre serveur web pour restaurer les vraies IP (via le module mod_remoteip sur Apache ou ngx_http_realip_module sur Nginx). Sans cette configuration, Fail2Ban risquerait de bannir les IP Cloudflare — coupant tout votre trafic.

Quelle différence entre Fail2Ban et un plugin de limitation de connexions ?

Les plugins WordPress (Limit Login Attempts, WP Cerber) agissent au niveau applicatif : ils bloquent les tentatives après X essais, mais PHP et WordPress sont quand même chargés à chaque requête. Fail2Ban agit en amont, au niveau du pare-feu système : une fois une IP bannie, ses requêtes sont rejetées sans aucune charge serveur. Sur un site sous attaque intense, la différence de charge peut être considérable.

Conclusion : Fail2Ban, un bouclier indispensable pour votre serveur WordPress

Configurer Fail2Ban pour WordPress est une des mesures de sécurité les plus efficaces et les moins coûteuses que vous puissiez mettre en place sur un serveur dédié ou VPS. En bannissant automatiquement les attaquants au niveau du pare-feu, vous réduisez non seulement le risque de compromission mais aussi la charge serveur générée par ces attaques.

Récapitulatif des étapes clés :

  1. ✅ Installer Fail2Ban via le gestionnaire de paquets
  2. ✅ Créer les filtres wordpress.conf et wordpress-nginx.conf
  3. ✅ Configurer jail.local avec vos seuils et votre IP en whitelist
  4. ✅ Activer la jail recidive pour les attaquants persistants
  5. ✅ Compléter avec la désactivation XML-RPC et l’activation 2FA
  6. ✅ Surveiller les logs /var/log/fail2ban.log régulièrement

Vous êtes sur hébergement mutualisé ou vous souhaitez une protection clé en main ? Contactez notre équipe SecuriteWP — nous configurons et supervisons la sécurité de votre site WordPress de A à Z.

✍️ À propos de l’auteur
Benjamin Bueno — Expert en cybersécurité WordPress et forensics web. Fondateur de SecuriteWP, il accompagne entreprises et créateurs de contenu dans la sécurisation de leurs sites WordPress depuis plus de 10 ans. Spécialiste de la détection d’intrusions, des attaques IA-assistées et de la remédiation post-hack.

En savoir plus →
Articles du même sujet

Nos experts français assurent un support et une prestation de qualité.

je demande de l’AIDE

Recevoir un devis
Demander un devis pour réparer un site

inscrivez vous a la newsletter

Nous vous enverrons des informations utiles et de qualité pour apprendre ainsi à mieux protéger votre site.
newsletter pour actualité WorPress

Partager cet article