Les attaques par force brute contre WordPress représentent plus de 80 milliards de tentatives par jour selon les données Wordfence 2025. Votre page de connexion /wp-admin est une cible permanente de bots qui testent des millions de combinaisons login/mot de passe à la seconde. Ce guide technique décrit les mesures concrètes pour rendre ces attaques inefficaces : de la configuration Fail2ban aux solutions cloud en passant par l’authentification à deux facteurs, chaque couche de défense réduit le risque d’intrusion et protège vos données ainsi que celles de vos utilisateurs.

Comprendre l’anatomie d’une attaque brute force

Une attaque brute force contre WordPress cible principalement trois points d’entrée : la page /wp-login.php, l’endpoint XML-RPC (/xmlrpc.php) et l’API REST (/wp-json/). Les bots commencent par tester les identifiants par défaut (« admin », « administrator », « user ») avec des mots de passe courants issus de bases de données publiques (RockYou, Have I Been Pwned). Une installation WordPress fraîche avec un compte « admin » sans mot de passe fort sera compromise en quelques minutes.

Les attaques distribuées (DDoS d’authentification) utilisent des réseaux de milliers d’IP différentes pour contourner les blocages par adresse IP. Chaque IP n’effectue que 2 à 3 tentatives, restant sous les seuils de blocage classiques, mais l’ensemble du botnet peut tester des millions de combinaisons en une heure. Cette technique rend les protections basiques insuffisantes et impose des mécanismes de détection comportementale plus sophistiqués.

L’impact d’une intrusion réussie va bien au-delà du site compromis lui-même : installation de backdoors, injection de liens spam, redirection des visiteurs, vol de données WooCommerce (cartes bancaires, adresses), envoi massif d’emails depuis votre serveur blacklistant votre domaine. La remédiation d’un site piraté coûte en moyenne 8 à 24 heures de travail technique sans garantie de nettoyage complet — la prévention est incomparablement moins coûteuse.

Renommer et protéger l’URL de connexion

La première mesure défensive consiste à rendre la cible moins prévisible. Le plugin WPS Hide Login (WordPress.org, plus de 2 millions d’installations actives) remplace /wp-login.php par une URL personnalisée de votre choix (/mon-espace, /connexion-admin, etc.). Les bots qui ciblent /wp-login.php reçoivent une erreur 404 et abandonnent immédiatement — cette seule mesure élimine 95 % des attaques automatisées sans aucun impact sur les performances.

Associez ce changement d’URL à une restriction par IP sur la page de connexion si votre adresse IP professionnelle est fixe. Dans votre .htaccess Apache ou votre configuration Nginx, limitez l’accès à /wp-login.php et /wp-admin aux seules adresses IP autorisées. Cette restriction hardware est incontournable pour les bots et ne peut pas être contournée même en cas de vol de credentials — sans la bonne IP, la connexion est physiquement bloquée.

Désactivez également XML-RPC si vous ne l’utilisez pas activement. Cet ancien protocole de communication WordPress était nécessaire pour les applications mobiles WordPress et Jetpack, mais constitue aujourd’hui une surface d’attaque injustifiée sur la plupart des sites. Un filtre dans functions.php (`add_filter(‘xmlrpc_enabled’, ‘__return_false’)`) suffit. Ou bloquez /xmlrpc.php directement dans Nginx avec une règle `deny all` — encore plus efficace car le bloc intervient avant même l’exécution de PHP.

Configurer Fail2ban pour WordPress

Fail2ban est un outil Linux indispensable sur tout serveur VPS hébergeant WordPress. Il analyse les logs en temps réel et bannit automatiquement les adresses IP qui dépassent un seuil de tentatives d’authentification échouées. Contrairement aux plugins WordPress, il agit au niveau système avant que PHP ne soit chargé, économisant ressources serveur et résistant aux attaques en volume.

La configuration nécessite deux fichiers : un filtre qui définit le pattern d’erreur à détecter dans les logs Nginx/Apache, et une règle de jail qui spécifie le seuil et la durée de bannissement. Le filtre wordpress-auth cherche les lignes HTTP 200 sur /wp-login.php avec la chaîne « incorrectly » (WordPress logge « Incorrect username or password »), tandis que le filtre xmlrpc cible les appels echoués à /xmlrpc.php.

Définissez des bantime progressifs : 1 heure pour les 5 premières tentatives, 24 heures pour une récidive, et 7 jours pour les IPs signalées par AbuseIPDB. Ce système de bannissement progressif décourage même les botnets persistants sans créer de faux positifs excessifs pour les utilisateurs légitimes qui oublieraient temporairement leurs identifiants. Combinez avec ipset pour des performances optimales sur les serveurs à fort trafic.

# /etc/fail2ban/jail.local
[wordpress-xmlrpc]
enabled  = true
port     = http,https
filter   = wordpress-xmlrpc
logpath  = /var/log/nginx/access.log
maxretry = 3
bantime  = 86400

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

Authentification à deux facteurs (2FA)

Le 2FA (Two-Factor Authentication) est la mesure de sécurité la plus efficace contre les attaques brute force une fois que l’attaquant a deviné ou volé le mot de passe. Même avec les credentials corrects, il ne peut pas accéder au compte sans le second facteur (code TOTP tournant toutes les 30 secondes généré par Google Authenticator, Authy ou une clé hardware). Wordfence, WP 2FA et miniOrange sont les plugins les plus fiables pour implémenter le 2FA sur WordPress.

Activez le 2FA obligatoire pour tous les rôles administrateur et éditeur — les comptes contributeur et abonné représentent un risque moindre mais peuvent être forcés si votre politique de sécurité l’exige. Prévoyez des codes de récupération imprimés et stockés physiquement hors ligne pour les situations où l’administrateur perd son téléphone : un compte bloqué sans procédure de récupération est aussi problématique qu’un compte compromis.

Les passkeys (FIDO2/WebAuthn), disponibles depuis WordPress 6.4 via des plugins comme Passster, représentent l’évolution naturelle du 2FA. Elles combinent possession (clé cryptographique sur l’appareil) et biométrie ou PIN, sans mot de passe transmis sur le réseau — la surface d’attaque pour le phishing et le brute force est théoriquement nulle. Encore peu déployées en 2026, elles deviendront le standard d’authentification web dans les prochaines années.

Limiter les tentatives de connexion avec des plugins

Sur un hébergement mutualisé où vous n’avez pas accès au serveur pour configurer Fail2ban, les plugins de limitation de tentatives sont votre principal rempart. Limit Login Attempts Reloaded (wordpress.org, plus de 2 millions d’installations) bloque une IP après un nombre configurable de tentatives échouées et envoie des alertes email à l’administrateur. WP Cerber Security va plus loin avec une protection anti-spam, un pare-feu applicatif et une surveillance des modifications de fichiers.

Configurez un lockout après 3 tentatives échouées, une attente de 20 minutes, puis un bannissement de 24 heures à la deuxième série d’échecs. Ces paramètres offrent un bon équilibre entre protection et confort utilisateur. Whitelistez votre propre adresse IP pour ne jamais vous retrouver bloqué accidentellement lors d’une saisie erronée — cette erreur de configuration est la première cause de support signalée par les utilisateurs de plugins de sécurité.

Activez les logs détaillés et conservez-les au moins 30 jours. L’analyse des patterns d’attaque (heures, géographies, noms d’utilisateurs testés) permet d’anticiper les vagues suivantes et d’ajuster les seuils. Un spike soudain de tentatives avec des usernames spécifiques (« user », « test », « wp ») indique un balayage par dictionnaire ; bloquez immédiatement toute la plage d’IPs concernée et signalez-la à AbuseIPDB pour contribuer à la protection de la communauté.

Sécuriser le fichier wp-config.php et les permissions

wp-config.php contient vos credentials de base de données, les clés de salage et les constantes de configuration critique. Un attaquant qui accède à ce fichier a les clés du royaume. Déplacez-le un niveau au-dessus de public_html — WordPress le cherche automatiquement dans le répertoire parent — et définissez des permissions 400 (lecture seule pour le propriétaire) pour empêcher toute modification par d’autres processus sur le serveur.

Ajoutez dans .htaccess une règle de refus explicite sur wp-config.php, .htaccess lui-même, et les fichiers readme.html et license.txt qui révèlent la version WordPress. Configurez les salts WordPress avec des clés générées via api.wordpress.org/secret-key/1.1/salt/ et changez-les immédiatement si vous suspectez une compromission des sessions utilisateur. Les salts invalident automatiquement tous les cookies de session actifs, déconnectant l’attaquant même s’il avait réussi à obtenir un cookie valide.

Les permissions des fichiers WordPress doivent suivre la règle 644 pour les fichiers et 755 pour les répertoires — jamais 777 qui donne accès en écriture à tous les utilisateurs système. Vérifiez régulièrement avec un audit automatisé (WP-CLI, plugin Sucuri Security) que des scripts malveillants n’ont pas modifié les permissions pour se maintenir en place après une compromission partielle. Le plugin Wordfence scanne l’intégrité des fichiers core et alerte sur toute modification inattendue.

Utiliser Cloudflare comme premier filtre

Cloudflare offre une protection brute force efficace dès son plan gratuit via les règles WAF. En activant le mode « Bot Fight Mode », Cloudflare identifie et bloque automatiquement les bots malveillants connus avant qu’ils n’atteignent votre serveur, réduisant la charge serveur et éliminant la majorité des tentatives d’authentification automatisées. Le plan gratuit inclut également la protection DDoS basique, suffisante pour la plupart des blogs WordPress.

Créez une règle WAF personnalisée qui limite à 5 requêtes par minute sur /wp-login.php par adresse IP, avec un challenge CAPTCHA au dépassement et un ban après 3 challenges consécutifs échoués. Combinez avec une règle de géoblocage si votre audience est principalement française ou européenne : bloquer les pays d’où vous ne recevez jamais de visiteurs légitimes (certains pays d’Asie, d’Afrique ou d’Amérique latine selon votre profil) réduit drastiquement le volume d’attaques sans impacter votre trafic réel.

Cloudflare Workers permet d’implémenter une vérification honeypot : ajoutez un champ caché dans le formulaire WordPress que les humains ne remplissent jamais mais que les bots remplissent systématiquement. Tout formulaire soumis avec ce champ renseigné est automatiquement rejeté au niveau CDN. Cette technique est particulièrement efficace contre les bots de remplissage de formulaires qui ignorent les attributs display:none et aria-hidden.

Maintenance et surveillance continue

La sécurité d’un site WordPress n’est pas un état statique mais un processus continu. Activez les mises à jour automatiques pour WordPress core et les plugins de sécurité (Fail2ban, Wordfence, WAF). Plus de 60 % des sites WordPress piratés en 2025 utilisaient des versions obsolètes avec des vulnérabilités corrigées connues — le simple fait de rester à jour élimine une grande partie du risque résiduel après la mise en place des défenses actives.

Configurez des alertes email ou Slack pour chaque bannissement Fail2ban, chaque tentative de connexion admin, et chaque modification de fichier core. Ces alertes peuvent sembler verbeuses au début mais permettent de détecter des patterns d’attaque émergents avant qu’ils ne deviennent critiques. Testez vos alertes mensuellement pour vérifier qu’elles fonctionnent toujours — les configurations de monitoring silencieuses donnent une fausse impression de sécurité.

Effectuez des sauvegardes quotidiennes chiffrées hors site (UpdraftPlus vers S3, Google Drive ou Backblaze). Une sauvegarde récente est votre assurance ultime contre une compromission grave : même si toutes vos défenses échouent, vous pouvez restaurer un état propre en moins d’une heure. Testez la restauration complète au moins une fois par trimestre sur un environnement de staging pour valider que vos sauvegardes sont réellement fonctionnelles et pas simplement accumulées sans avoir jamais été vérifiées.

Sources et références

W
WP Admin Lab

Architecte web full-stack. WordPress, performance, data et sécurité. Notes de terrain, tests reproductibles et retours d'expérience.