Bloquer l’accès au backend de WordPress par adresse IP, c’est une mesure simple, presque banale sur le papier. Et pourtant, dans beaucoup de contextes, c’est l’un des premiers gestes qui font vraiment baisser la surface exposée. Moins de tentatives de connexion, moins de scans, moins de bruit. Ce n’est pas une protection magique contre tout, mais c’est un garde-fou efficace, surtout quand le site est administré depuis un nombre réduit d’emplacements.
Dans cet article, je vais détailler comment restreindre l’accès à l’espace d’administration WordPress (typiquement /wp-admin et /wp-login.php) en fonction de l’IP. Je parlerai aussi des pièges fréquents: IP qui change, reverse proxies, IPv6, accès équipe et nomadisme, règles trop strictes qui vous bloquent vous-même, et la manière d’éviter de casser la navigation ou des intégrations.
Pourquoi limiter le backend par IP change la donne
WordPress attire des attaques répétitives et très opportunistes. Une grande partie du trafic malveillant ressemble plus à un bruit constant qu’à une attaque ciblée. Quand vous autorisez tout le monde à atteindre wp-login.php, vous donnez un point d’entrée pour des tentatives d’identification, des enumerations de comptes, et plus généralement des cycles qui consomment de la bande passante et des ressources.
Restreindre l’accès par IP ne supprime pas l’existence des pages publiques, mais empêche une partie des acteurs de faire quoi que ce soit tant qu’ils n’arrivent pas depuis votre réseau. Sur un site géré par une équipe interne ou avec un accès depuis quelques bureaux, l’impact peut être immédiat.
Je me souviens d’un cas typique: un blog d’entreprise derrière un hébergement standard, sans WAF, sans filtrage côté serveur, et déjà avec une bonne hygiène sur les mots de passe. On a appliqué une restriction simple aux adresses IP du bureau. Le nombre de requêtes sur /wp-login.php a chuté de manière visible. Le site n’était pas “plus sécurisé” au sens strict, mais il subissait beaucoup moins de tentative de connexion, et le journal serveur devenait lisible. Ce détail compte: quand les logs sont saturés, détecter un vrai problème devient plus difficile.
Ce que vous protégez exactement, et ce que vous ne protégez pas
Restreindre l’accès par IP porte principalement sur les chemins administratifs. Concrètement, vous verrouillez des URLs comme:
- /wp-admin/ /wp-login.php parfois /wp-admin/admin-ajax.php selon l’architecture
Mais la sécurité n’est jamais binaire. Vous ne protégez pas contre:
Une prise de contrôle d’une session active (cookies volés, poste compromis, navigateur partagé) Une faille applicative exploitée côté front (par exemple un plugin vulnérable exposé sur des pages publiques) Une erreur de configuration ailleurs (authentification, rôle, jetons, REST API exposée)Le bon réflexe, c’est de voir la restriction IP comme un rempart supplémentaire. Elle marche très bien en complément d’autres pratiques de hardening WordPress: mises à jour, plugins triés, mots de passe forts, limitation de tentatives, et si possible un filtrage global au niveau web.
Avant de modifier: vérifier votre chemin d’accès réel
Beaucoup d’administrateurs se font bloquer la première fois parce qu’ils ont filtré l’IP “directe” alors que le serveur ne voit pas l’IP d’origine. Exemple courant: CDN, reverse proxy, load balancer, ou tout simplement un proxy applicatif.
Si vous êtes derrière un service qui relaye le trafic, le serveur peut voir l’IP du proxy, pas celle de votre poste. Dans ce cas, filtrer sur “votre IP” ne matchera jamais, et vous serez exclus.
La bonne méthode consiste à observer une fois, pendant une fenêtre de maintenance, ce que le serveur enregistre quand vous accédez à wp-admin. Sur Apache ou Nginx, selon les configurations, on peut lire les journaux ou des variables d’environnement. L’objectif est de connaître l’IP “vue” par le serveur et le format attendu.
Il y a aussi un autre point: l’IPv6. Beaucoup d’infrastructures donnent une adresse IPv6 à votre poste. Si vous filtrez uniquement en IPv4, vous pouvez vous retrouver à exposer un chemin parallèle. L’inverse est vrai aussi. À minima, vérifiez que votre liste d’IP couvre l’environnement d’administration réellement utilisé.
L’approche côté serveur: Apache
Si votre site tourne sous Apache, la méthode la plus courante est d’utiliser des règles dans la configuration du vhost ou dans un fichier .htaccess (si l’hébergement l’autorise). Le principe est: refuser tout, autoriser seulement les IP de confiance, puis appliquer la règle au dossier wp-admin et aux scripts de connexion.
La forme exacte dépend de votre version et de vos modules disponibles. Mais l’idée est stable: un bloc de protection sur l’URL ou le répertoire cible.
Variante “dossier wp-admin”
Vous mettez une règle qui restreint l’accès au répertoire wp-admin. Dans .htaccess, cela peut ressembler à une combinaison Require all denied puis Require ip ... selon les syntaxes disponibles. Dans un vhost, c’est aussi possible.
Le choix entre .htaccess et vhost dépend de votre contexte. Si vous contrôlez le vhost, c’est souvent plus propre. Si vous êtes sur un hébergement partagé qui n’accepte pas les modifications du vhost, .htaccess devient la solution pratique.
Variante “wp-login.php”
Même si vous protégez wp-admin, certains environnements exposent wp-login.php indépendamment. Par prudence, on applique aussi la restriction sur ce fichier, ou on s’assure que la règle sur wp-admin couvre bien le flux chez vous.
Le point délicat, c’est la compatibilité avec des plugins ou un système de redirection. Par exemple, certains plugins peuvent changer le chemin de connexion ou rediriger vers une URL personnalisée. La restriction doit suivre ce chemin.
Nginx: une règle claire sur les locations
Sous Nginx, le filtrage IP se fait souvent dans les blocs server ou location. Là encore, la logique est simple: pour les URLs administratives, on refuse par défaut et on n’autorise que certaines adresses.

L’avantage de Nginx, c’est la précision: vous pouvez cibler location = /wp-login.php et location ^~ /wp-admin/ . Selon votre configuration, vous pouvez aussi traiter les variantes de fichiers, et gérer les requêtes vers des endpoints AJAX.
Point d’attention: try_files, rewrites, et index
WordPress vit de redirections et de réécritures. Nginx peut, selon vos règles, servir un index.php à certaines requêtes. Si vous verrouillez une location mais que le flux finit dans une autre route interne, vous risquez une incompréhension. Le bon réflexe consiste à tester concrètement l’accès après modification: depuis une IP autorisée et depuis une IP non autorisée.
Le risque numéro un: vous bloquer vous-même
La plus grande erreur, ce n’est pas de mal configurer une règle. C’est de faire la modification sans garde-fou, puis de perdre l’accès pendant que le site est en production.
Quelques réflexes simples réduisent drastiquement le risque:
- effectuer la modification pendant une fenêtre où vous disposez d’un autre canal d’accès (console, accès hosting) prévoir un moyen “break glass” côté hébergement (accès au fichier de config, rollback) utiliser un environnement de test si vous avez un déploiement en place autoriser temporairement votre IP “de secours” ou une plage couvrant votre infrastructure de support
En pratique, j’ajoute souvent une règle plus large au début, par exemple une plage pour le réseau du bureau, puis je resserre ensuite. Oui, c’est moins parfait au premier passage, mais l’objectif est de ne pas immobiliser le site.
Gérer les IP qui changent (et le cas du télétravail)
Restreindre par IP marche très bien si vos adresses sont stables. Dans une équipe, c’est rarement le cas si chacun navigue avec son réseau mobile, ou si vous changez de fournisseur.
Il y a plusieurs stratégies, selon ce que vous pouvez piloter:
Passer par un VPN d’entreprise avec sortie stable Utiliser des plages d’IP d’un site fixe (bureau ou data center) Ajouter les IP publiques actuelles, puis mettre à jour quand elles changent
Dans le télétravail, la stratégie VPN est celle qui donne le meilleur équilibre. Une connexion VPN donne souvent une IP de sortie stable, et vous pouvez filtrer proprement sur cette IP. Si vous n’avez pas de VPN, vous finissez par faire de la maintenance manuelle de la liste d’IP, ce qui peut se retourner contre vous.
Le piège classique, c’est de “promettre” la stabilité et de découvrir que votre FAI attribue des IP variables. À partir de là, la restriction par IP devient une source de tickets internes. Elle reste utile, mais elle doit être gérée comme un processus, pas comme un one-shot.
Construire la liste d’IP: taille, format et logique
Quand on parle “d’IP”, on pense souvent à une adresse unique. En réalité, la bonne pratique consiste parfois à autoriser une plage, par exemple un réseau d’entreprise. Selon vos outils, vous pouvez autoriser une ou plusieurs IP, ou des CIDR.
L’enjeu, c’est la prudence. Une plage trop large augmente votre exposition. Une plage trop étroite augmente les chances de vous exclure quand la sortie change. C’est une question de compromis.
Dans mon expérience, une liste d’IP courte et auditée vaut mieux qu’un mur de règles sans logique. Les règles deviennent vite un lieu d’erreur: quelqu’un supprime une adresse oubliée, ou une IP ancienne reste “par habitude” pendant des mois.
Si vous devez gérer plusieurs personnes, une approche propre consiste à raisonner en “zones de confiance” plutôt qu’en “personnes”. Par exemple: une IP par VPN, une plage pour le bureau, et éventuellement une IP d’un prestataire externe le temps d’une intervention.
Et si votre serveur est derrière un proxy ou un CDN ?
Quand le site est derrière un proxy, l’IP vue par WordPress et par le serveur peut être l’IP du proxy. Les requêtes entrantes portent alors une adresse “réelle” via un en-tête, comme X-Forwarded-For. Mais il ne faut pas faire n’importe quoi.
Il y a une règle de base: ne faire confiance à un en-tête d’IP client que si vous contrôlez le proxy intermédiaire, et que votre configuration Nginx ou Apache est prête à interpréter ces en-têtes de manière sûre. Sinon, un attaquant pourrait fabriquer un en-tête et contourner la restriction.
Selon la stack, vous devrez soit:
- configurer le serveur pour utiliser correctement l’en-tête de source d’origine ou appliquer la restriction directement au niveau du proxy, là où l’IP client est déjà validée
Si vous avez un WAF ou un reverse proxy bien configuré, filtrer au bon endroit est souvent le plus propre. Mais ce n’est pas toujours possible. Le point clé, c’est d’éviter un “faux filtrage” qui donne un sentiment de sécurité sans effet réel.
Prendre en compte la WordPress REST API et les endpoints connexes
Beaucoup de tentatives actuelles ne ciblent pas uniquement wp-login.php. Selon le niveau d’exposition et l’état de sécurité de votre installation, des scripts peuvent tenter d’accéder à la REST API, ou à des endpoints associés.
Restreindre wp-admin ne restreint pas automatiquement tout. Si votre thème ou des plugins exposent des endpoints spécifiques, ou si vous autorisez certaines actions côté admin-ajax, vous devez vérifier ce qui est accessible sans session.
Une pratique raisonnable consiste à considérer les zones administratives non seulement comme des pages HTML, mais comme des routes d’action. Cela peut inclure admin-ajax.php selon votre configuration. La prudence consiste à tester après modification: un compte administrateur depuis une IP autorisée doit pouvoir utiliser les fonctions attendues. Les rôles doivent rester fonctionnels, notamment pour la médiathèque, les sauvegardes en arrière-plan, ou certaines tâches d’édition.
Une méthode de validation qui ne repose pas sur le ressenti
Le jour où vous appliquez la restriction IP, ne vous basez pas sur une intuition. Vérifiez deux scénarios: vous devez être sûr que l’accès échoue correctement depuis une IP non autorisée, et que l’accès marche depuis une IP autorisée.
Concrètement, vous pouvez utiliser un poste “non autorisé” ou simplement un accès depuis un réseau mobile, ou un outil de test réseau. L’idée n’est pas d’apprendre comment l’attaque se déroule, mais de valider votre configuration.
Testez aussi:
- l’accès à /wp-login.php l’accès à /wp-admin/ une page admin typique (par exemple tableau de bord) une action qui déclenche du backend, selon vos plugins (un chargement média, une sauvegarde, un appel AJAX)
Si tout fonctionne côté IP autorisée, mais que les pages refusent ailleurs, vous avez atteint l’objectif. Si vous voyez des messages qui ressemblent à “403 forbidden”, c’est généralement bon signe. Si vous voyez des redirections incompréhensibles, c’est le signe que vos règles interagissent mal avec votre configuration WordPress ou votre proxy.
Journalisation: gardez une trace utile
https://gardewp.fr/securite-wordpress/Une restriction IP réduit le bruit. C’est agréable, mais cela ne supprime pas la nécessité de surveiller. Les logs deviennent plus légers, et donc plus lisibles. Mais si vous bloquez des requêtes légitimes (mauvaise IP, IPv6 non couvert), vous risquez de ne rien voir tant que quelqu’un n’appelle.
Je recommande de laisser un niveau de log suffisant pendant les premiers jours. Selon votre hébergement, les logs peuvent être difficiles à exploiter, mais au minimum vous voulez savoir que les refus arrivent sur les bonnes routes. S’il y a un pattern, vous ajustez la liste d’IP ou le mécanisme de prise en compte de l’IP réelle.
Cas particulier: IP partagée, NAT, et accès d’équipe
Dans certains environnements, plusieurs utilisateurs sortent avec une IP publique unique, car ils sont derrière un NAT d’entreprise. Filtrer sur l’IP du NAT devient alors logique, tout le monde passe. C’est pratique, mais moins fin. Si un poste dans l’entreprise est compromis, l’attaquant profite de la confiance du NAT.
Dans ce cas, la restriction IP ne remplace pas la sécurité du poste et la gestion des sessions. Elle réduit juste la surface externe.
Pour une équipe, je préfère le modèle suivant quand il existe: VPN par utilisateur ou au moins par groupe, puis restriction sur la sortie VPN. Cela conserve la simplicité et améliore la traçabilité. Mais encore une fois, tout dépend de votre infrastructure.
Points d’attention spécifiques WordPress
WordPress a quelques particularités qui influencent la mise en œuvre.
D’abord, la page de connexion peut être personnalisée par des plugins. Si vous changez le chemin, la restriction sur wp-login.php seule peut devenir insuffisante. L’inverse existe aussi: vous restreignez wp-admin, mais une autre URL de connexion est utilisée et reste accessible.
Ensuite, le backend s’appuie sur des requêtes internes. Si votre règle bloque trop large, vous pouvez casser:
- l’upload média les actions en arrière-plan certains écrans du tableau de bord chargés en plusieurs appels
La méthode la plus fiable consiste à tester après déploiement, avec un compte administrateur et un compte éditeur. Les rôles WordPress sont parfois subtils, et la façon dont un plugin gère des actions selon le rôle peut révéler un blocage inattendu.
Enfin, l’authentification à deux facteurs ou les restrictions de session peuvent prolonger la complexité. Si l’accès au backend est bloqué, un utilisateur qui a besoin de valider un challenge peut être interrompu. Le filtrage IP ne doit pas empêcher la validation attendue.
Mettre en place sans douleur: une séquence pragmatique
Je recommande une démarche en trois temps, surtout si votre site est en production et que vous ne pouvez pas faire de test long:
Appliquez une restriction “large” qui inclut vos IP de test et votre IP de secours Vérifiez les accès depuis un réseau différent Resserrez progressivement vers une liste plus exacte, en incluant IPv6 si c’est nécessaireCela peut paraître moins élégant, mais c’est souvent plus sûr. Les configs changent, les IP évoluent, et vous évitez la situation où la seule manière de corriger est d’utiliser un ticket au support ou d’accéder à la console dans l’urgence.
Exemple de stratégie d’accès pour une petite équipe
Imaginons une équipe avec deux lieux: le bureau et un consultant ponctuel.
- Le bureau sort via un bloc d’IP stable (ou un NAT d’entreprise). L’équipe télétravaille via un VPN d’entreprise, avec une IP de sortie stable. Le consultant intervient depuis son réseau, mais uniquement pendant une fenêtre de maintenance.
La restriction IP au niveau wp-login.php et wp-admin permet de rendre ces zones inaccessibles depuis n’importe où ailleurs. Le consultant peut être ajouté au besoin le temps de l’intervention, puis retiré. Vous gardez un contrôle clair, et vous réduisez les tentatives de connexion automatiques.
Cette approche a un autre bénéfice: quand vous faites un audit interne, vous pouvez expliquer pourquoi l’accès admin est limité. Ce n’est pas une décision arbitraire, c’est une conséquence d’une organisation et d’un flux réseau maîtrisé.
Limites et compromis à accepter
Restreindre l’accès au backend par IP a des limites structurelles.
Si vous êtes un site public géré par des équipes très mobiles, l’administration devient friction. Le jour où votre équipe change d’opérateur réseau, vous devez mettre à jour les IP. Si vous l’oubliez, le backend devient inaccessible, et vous aurez un incident opérationnel.

Autre compromis: la sécurité par IP est surtout efficace contre les attaques “externes” opportunistes. Pour les attaques via un poste compromis ou une session volée, le bloc IP n’a pas d’effet. Il faut donc rester cohérent avec le reste du hardening WordPress: renforcer l’identification, surveiller les connexions, verrouiller les rôles, et maintenir les plugins à jour.
Enfin, si vous déployez des règles trop agressives sans penser aux mécanismes internes, vous pouvez créer des comportements bizarres qui ressemblent à des erreurs WordPress alors qu’ils viennent du serveur. C’est pour ça que les tests après modification sont indispensables.
Hardening WordPress: combiner la restriction IP avec d’autres mesures utiles
La restriction IP gagne en valeur quand elle s’intègre dans un paquet plus large. L’idée n’est pas d’empiler des contraintes, mais de couvrir des angles complémentaires.
Par exemple, une approche cohérente peut ressembler à ceci: garder WordPress et les plugins à jour, limiter les droits des comptes, utiliser une politique de mots de passe robuste, activer une authentification à deux facteurs pour les comptes sensibles, et ajouter une limitation de tentatives (au niveau serveur ou WAF). La restriction IP fait baisser le bruit et réduit la probabilité d’atteindre une page de connexion depuis des scanners.
Et surtout, elle vous donne un levier opérationnel. Quand vous voyez un pic de tentatives, vous savez que l’impact sera moins important, et vous pouvez vous concentrer sur la cause réelle si un événement passe malgré tout.
Checklist courte avant de “verrouiller”
Avant d’activer la restriction pour de bon, vérifiez dans votre environnement que vous n’oubliez pas les points qui font rater le plus souvent.
- Votre serveur voit bien la bonne IP (pas seulement celle du proxy ou du CDN). Vos IP incluent l’IPv6 si l’administration passe par ce chemin. Vous avez une IP de secours pour éviter le blocage complet. Vous avez testé l’accès au tableau de bord depuis une IP autorisée et depuis une IP non autorisée. Vos endpoints admin utilisés par vos plugins (uploads, AJAX) fonctionnent toujours.
Si vous cochez ces points, vous aurez une restriction IP efficace, sans effet secondaire majeur.
Ce que j’attends d’une restriction IP “bien faite”
Une restriction IP réussie ne se mesure pas uniquement à la quantité de trafic bloqué. Je regarde surtout la stabilité opérationnelle. L’objectif est de ne pas transformer l’administration en roulette. Les admin doivent pouvoir travailler le lundi matin, même après une journée de vacances, même si un opérateur réseau a changé, surtout si l’équipe a un mode télétravail.
Donc oui, on peut être strict. Mais la discipline doit s’accompagner d’une gestion claire des IP autorisées, et d’une vérification des interactions avec votre stack web (proxy, IPv6, rewrites).
Si vous voulez une sécurité pragmatique et rapide, restreindre l’accès au backend par IP est l’un des gestes les plus rentables à mettre en place. À condition de le faire proprement, et de ne pas oublier le détail qui fait tout: l’adresse réellement vue par le serveur.