Protéger wp-login contre la force brute

La page wp-login.php est la cible numéro un des bots. Voici comment la masquer, limiter les tentatives et bloquer les attaques par force brute sans vous compliquer la vie.

Par WP-Detox 8 min de lecture

Protéger wp-login contre la force brute, c’est régler le point d’entrée que tous les bots connaissent par cœur. Sur un WordPress non modifié, la page de connexion se trouve toujours à la même adresse, et les robots le savent. Résultat : des milliers de sites reçoivent chaque jour des vagues de tentatives automatisées qui essaient des combinaisons identifiant/mot de passe à la chaîne. Voici comment couper court à ce trafic et fermer la porte avant qu’un mot de passe faible ne cède.

pourquoi wp-login.php et xmlrpc.php sont autant matraqués

WordPress installe sa page de connexion à une adresse fixe : votresite.fr/wp-login.php (ou votresite.fr/wp-admin/, qui redirige vers la même chose). Cette URL est identique sur des millions de sites. Un bot n’a donc rien à deviner : il connaît déjà l’adresse et passe directement à l’attaque.

xmlrpc.php est l’autre cible. Ce fichier sert au protocole XML-RPC, utilisé historiquement par l’application mobile WordPress, par certains plugins et par les pings entre sites. Le problème : il permet d’envoyer des centaines d’essais de mot de passe dans une seule requête grâce à la méthode system.multicall. Pour un attaquant, c’est plus efficace que de marteler wp-login.php une tentative à la fois.

Concrètement, ces attaques provoquent trois choses :

  • Une charge serveur qui grimpe. Chaque tentative consomme de la mémoire et du CPU. En masse, le site ralentit ou tombe.
  • Des logs saturés et des alertes en pagaille si vous en avez configuré.
  • Le risque réel : si votre mot de passe administrateur est court ou réutilisé ailleurs, le bot finit par le trouver. À partir de là, il a accès à votre tableau de bord.

La bonne nouvelle, c’est que la plupart de ces attaques sont bêtes et automatisées. Quelques mesures simples suffisent à les rendre inutiles.

la base : un mot de passe fort et la double authentification

Avant tout réglage technique, réglez le mot de passe. Une attaque par force brute ne réussit que si le mot de passe est devinable. Avec un mot de passe long, aléatoire et unique, même des millions de tentatives ne mènent à rien.

  • Utilisez au moins 16 caractères générés aléatoirement, stockés dans un gestionnaire de mots de passe (Bitwarden, 1Password, KeePass).
  • Ne réutilisez jamais ce mot de passe ailleurs. Si une autre fuite l’expose, votre WordPress tombe avec.
  • Vérifiez tous les comptes administrateur, pas seulement le vôtre. Un ancien compte oublié avec un mot de passe faible est une porte ouverte.

Ajoutez ensuite la double authentification (2FA). C’est la mesure qui change le plus la donne : même avec le bon mot de passe, l’attaquant ne passe pas sans le code temporaire généré sur votre téléphone. Des extensions comme WP 2FA, Two-Factor (officielle) ou le module 2FA de Wordfence s’installent en quelques minutes et fonctionnent avec une application d’authentification (Google Authenticator, Authy, etc.).

Si vous ne deviez faire que deux choses, ce seraient celles-là.

limiter le nombre de tentatives de connexion

Par défaut, WordPress laisse essayer un mot de passe autant de fois qu’on veut. Une extension de limitation des tentatives bloque une adresse IP après un certain nombre d’échecs (par exemple cinq), pendant une durée que vous définissez.

Limit Login Attempts Reloaded est l’option la plus courante et gratuite. Après installation, l’essentiel des réglages par défaut convient : nombre d’essais autorisés, durée de blocage, et option pour bloquer aussi les tentatives via XML-RPC. Wordfence et iThemes Security (devenu Solid Security) intègrent la même fonction si vous préférez un outil tout-en-un.

Cette mesure ne masque pas la page, mais elle rend la force brute inopérante : un bot qui n’a droit qu’à cinq essais toutes les vingt minutes n’ira nulle part.

masquer ou renommer la page de connexion

Si les bots ne trouvent plus wp-login.php, ils ne peuvent plus l’attaquer. L’extension WPS Hide Login déplace la page de connexion vers une adresse de votre choix, par exemple votresite.fr/mon-acces-prive. Toute tentative d’accès à l’ancienne URL renvoie une erreur 404.

C’est rapide à mettre en place et redoutablement efficace contre le trafic automatisé, qui ne tape que sur l’adresse standard. Deux points d’attention :

  • Notez bien la nouvelle adresse et enregistrez-la dans votre gestionnaire de mots de passe. Si vous l’oubliez, vous devrez désactiver l’extension par FTP pour revenir en arrière.
  • Ce n’est pas une protection absolue, juste une mise à l’abri du bruit. Gardez quand même un mot de passe fort et la 2FA derrière.

désactiver xmlrpc.php s’il n’est pas utilisé

La majorité des sites n’ont plus besoin de XML-RPC. Si vous ne publiez pas depuis l’application mobile WordPress et qu’aucun plugin ne l’exige (Jetpack en fait partie, vérifiez avant), désactivez-le.

La méthode la plus simple, sans extension, passe par le fichier .htaccess à la racine du site, en haut du fichier :

# Bloquer l'accès à xmlrpc.php
<Files xmlrpc.php>
  Require all denied
</Files>

Sur une configuration Apache plus ancienne, utilisez plutôt :

<Files xmlrpc.php>
  Order Deny,Allow
  Deny from all
</Files>

Après avoir enregistré, testez le site et la connexion à l’admin. Si tout fonctionne, les tentatives via XML-RPC sont closes. Vous pouvez aussi obtenir le même résultat avec une extension comme Disable XML-RPC si vous préférez ne pas toucher au .htaccess.

ajouter un CAPTCHA

Un CAPTCHA sur le formulaire de connexion arrête net les bots qui ne savent pas le résoudre. Plusieurs extensions le posent en quelques clics : reCAPTCHA de Google, hCaptcha, ou les modules CAPTCHA intégrés à Wordfence et Solid Security.

Privilégiez une version invisible ou peu intrusive (reCAPTCHA v3, par exemple) pour ne pas embêter vos vrais utilisateurs à chaque connexion. C’est une couche de plus, utile surtout si vous avez des comptes clients ou abonnés et que vous ne pouvez pas masquer la page.

restreindre wp-admin et wp-login par IP via .htaccess

Si vous vous connectez toujours depuis la même adresse IP (un bureau avec une IP fixe, par exemple), vous pouvez bloquer tout le reste. C’est la protection la plus stricte. Ajoutez ce bloc dans le .htaccess à la racine :

# Restreindre wp-login.php à des IP autorisées
<Files wp-login.php>
  Require ip 203.0.113.42
  Require ip 198.51.100.7
</Files>

Remplacez les adresses par les vôtres (vous trouvez votre IP publique en cherchant “mon IP” sur un moteur de recherche). Vous pouvez en autoriser plusieurs, une par ligne.

Attention : ne faites ça que si votre IP est stable. Avec une connexion grand public dont l’IP change régulièrement, vous risquez de vous bloquer vous-même. Dans ce cas, restez sur la limitation de tentatives et le masquage de page. Si vous vous verrouillez par accident, il faut éditer ou supprimer ce bloc par FTP pour retrouver l’accès.

changer le nom d’utilisateur « admin »

Un attaquant a besoin de deux choses : l’identifiant et le mot de passe. Si votre compte s’appelle admin, vous lui offrez la moitié du travail. Beaucoup d’attaques par force brute partent justement du principe que le compte s’appelle admin.

WordPress ne permet pas de renommer un identifiant directement, mais la manœuvre est simple :

  1. Créez un nouveau compte administrateur avec un identifiant non évident (évitez aussi votre prénom seul ou le nom du site).
  2. Connectez-vous avec ce nouveau compte.
  3. Supprimez l’ancien compte admin, en attribuant ses contenus au nouveau compte quand WordPress le propose.

Vérifiez au passage que votre identifiant ne s’affiche pas publiquement dans les URL d’auteur (/author/votre-identifiant/), ce qui le donnerait aux bots.

mettre un pare-feu applicatif

Un pare-feu applicatif (WAF) filtre le trafic malveillant avant qu’il n’atteigne WordPress. Il bloque les schémas d’attaque connus, dont la force brute, sans que vous ayez à régler chaque détail.

Deux approches :

  • Un WAF au niveau du plugin, comme Wordfence ou Solid Security. Simple à installer, il agit à l’intérieur de WordPress.
  • Un WAF au niveau du réseau, comme Cloudflare ou Sucuri, qui filtre le trafic avant même qu’il touche votre serveur. C’est plus efficace contre les grosses attaques et ça soulage votre hébergement.

Pour la plupart des propriétaires de site, Cloudflare en version gratuite plus une extension de sécurité offre déjà un bon niveau de protection.

questions fréquentes

Faut-il tout mettre en place d’un coup ? Non. Commencez par le mot de passe fort, la 2FA et la limitation des tentatives. Ces trois mesures couvrent l’essentiel du risque. Le reste s’ajoute selon vos besoins.

Masquer la page de connexion, ça suffit ? Ça supprime presque tout le trafic des bots, mais ce n’est pas une protection complète. Gardez un mot de passe fort et la 2FA derrière, au cas où l’adresse fuiterait.

Désactiver xmlrpc.php peut-il casser mon site ? Seulement si un service en dépend (application mobile WordPress, Jetpack, certains outils de publication à distance). Vérifiez vos plugins, testez après modification, et gardez une sauvegarde avant.

et si le mal est déjà fait

Ces mesures protègent un site sain. Si vous avez le moindre doute sur une intrusion déjà en cours, voyez que faire si le site est déjà compromis avant de durcir quoi que ce soit. Pour aller plus loin sur les causes, lisez pourquoi les sites WordPress se font pirater, et pour le tour d’horizon complet du durcissement, gardez sous la main la checklist de sécurisation complète.

Vous suspectez que votre site est déjà touché ? WP-Detox fait un scan gratuit pour vous dire où vous en êtes. Si un nettoyage est nécessaire, on s’en charge en une trentaine de minutes, pour 149 € tout compris, avec une sauvegarde prise avant toute intervention. Si on n’arrive pas à nettoyer, vous êtes remboursé.

À lire ensuite