a man sitting in front of multiple monitors

Bloquer une IP malveillantes WordPress avec mu-plugins

RÉSUMÉ : Ce guide vous montre comment bloquer les IP malveillantes WordPress avec un mu-plugins qui intercepte les requêtes avant le chargement complet du site. Contrairement aux plugins de sécurité classiques qui consomment vos ressources serveur pour afficher une belle page 403, cette méthode coupe tout immédiatement avec une seule requête SQL optimisée. Résultat : protection maximale, consommation minimale, compatible tous serveurs (Apache, Nginx, etc.).

Vous avez détecté des URL louches sur votre WordPress grâce à notre système de monitoring ? Excellent. Maintenant, la vraie question : comment éliminer ces menaces sans que votre serveur en prenne un coup ?

La plupart des plugins de sécurité vous promettent des bannissements ultra-efficaces. Sauf que dans les faits, ils créent des « faux bans » qui consomment vos ressources serveur tout en affichant leur page 403 personnalisée.

Aujourd’hui, nous allons voir comment mettre en place un vrai système pour bloquer une IP sur WordPress – une solution qui intervient avant même que WordPress charge tous ses composants.

Table des matières

Le problème des plugins de sécurité classiques pour bloquer une IP sur un site WordPress

Le bannissement qui n’en est pas vraiment un

Les plugins de sécurité traditionnels pour bloquer une IP WordPress suivent tous le même schéma :

  1. Détection de l’IP dans la base de données WordPress (et/ou via un service tiers : partage d’IP malveillante)
  2. Affichage d’une page 403 personnalisée avec CSS et JavaScript etc.
  3. Arrêt de l’exécution après chargement complet

Le problème majeur ? Entre l’étape 1 et 3, WordPress s’est chargé entièrement. Les plugins ont été exécutés. Le thème a consommé des ressources. L’utilisateur banni a quand même réussi à solliciter votre serveur.

Le coût caché d’une belle page de blocage

Une interface élégante pour vos pages de blocage coûte cher en ressources :

  • WordPress chargé de A à Z (core + plugins + thème)
  • Requêtes base de données multiples
  • Mémoire PHP consommée inutilement
  • Temps serveur gaspillé sur chaque tentative

Résultat : vous avez banni l’IP malveillante 👏, mais elle a quand même réussi à plomber vos performances. Sur un hébergement mutualisé avec ressources limitées, l’impact est significatif.

La solution mu-plugins pour bloquer une IP WordPress efficacement

Pourquoi choisir un mu-plugins pour bloquer IP WordPress ?

Les mu-plugins (Must-Use plugins) possèdent un avantage décisif selon la documentation officielle WordPress : ils se chargent avant les plugins classiques et les thèmes. C’est exactement ce qu’il faut pour intercepter les requêtes malveillantes au plus tôt.

L’astuce du chargement prioritaire

Technique peu connue (ou simplement le mode barbare 🪓) : les mu-plugins se chargent par ordre alphabétique. Pour garantir que le vôtre s’exécute en premier, nommez-le avec plusieurs underscores au début : ____security-firewall.php

Fonctionnement technique du blocage d’IP WordPress

Le système pour bloquer une IP WordPress repose sur trois piliers techniques :

  1. Hook ultra-précoce : Connexion au hook de chargement des mu-plugins, le plus tôt possible dans le cycle WordPress
  2. Requête SQL optimisée : Une seule requête dans une table dédiée avec index appropriés pour vérifier le statut de l’IP
  3. Blocage radical : Si l’IP est bannie, envoi d’une réponse 403 en HTML pur puis arrêt immédiat avec die()
add_action( 'mu_plugin_loaded', function() {
  
  // le check
  
  // si c'est pas bon 
  // 403 + die
  
});

La force de la simplicité pour bloquer une IP WordPress

Contrairement aux plugins de sécurité qui génèrent des pages 403 élaborées, cette approche renvoie du HTML minimal :

<body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
<hr>

</body>

Aucun CSS. Aucun JavaScript. Aucune ressource externe. Uniquement l’information essentielle. Et je me casse pas la tête, je reprends à l’identique ce qu’on a avec une 403 serveur

Mise en place technique pour bloquer une IP WordPress

Prérequis pour bloquer une IP WordPress avec un mu-plugin

Si vous avez suivi mon article sur la fonction PHP méconnue, vous disposez déjà des bonnes choses à savoir et comment récupérer le trafic.

Étapes de mise en place du blocage IP

Le code pour bloquer une IP WordPress se structure en étapes clés :

  1. Connexion base de données : WordPress est chargé, accès à l’objet global $wpdb disponible
  2. Récupération IP visiteur : Extraction de l’adresse IP réelle (attention aux proxies et CDN)
  3. Vérification dans la table : Requête SQL rapide dans votre table optimisée avec index sur la colonne IP
  4. Décision de blocage : Comparaison du résultat avec votre liste noire
  5. Action immédiate : Si blocage nécessaire, envoi des headers HTTP 403, HTML minimal, puis die()

En gros :

add_action( 'mu_plugin_loaded', function() {
  
  $user_ip = sk_get_user_ip();
  
  if( false === sk_check_ip( $user_ip ) ) {
    // autorisé
  	return; 
  }
  
  // ban
      $HEREDOC = <<<EOT
<body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
<hr>

</body>
EOT;
    // header 403
    header( 'HTTP/1.1 403 Forbidden' );
    echo $HEREDOC;
    die();
  
});

C’est simple et radical 🤓 On peut bien évidemment rajouter pleins d’autres contrôles :

  • si wp-admin => uniquement les ips autorisées
    • rien n’empêche ici de récupérer l’url consultée et voir si besoin d’un contrôle ++
  • check du pays de l’IP
    • assez simple de restreindre un accès sans prise de tête : http://ip-api.com/json/ et votre IP à la suite ou d’autres outils en ligne permettant d’obtenir le pays de l’IP et pouf on refuse l’accès à wp-admin à tout ce qui n’est pas FR
  • etc.

Performances sur hébergement mutualisé

Tests réalisés sur O2Switch et Hostinger : aucun impact performance détecté. Une requête SQL optimisée avec index approprié, même sollicitée fréquemment, ne devrait pas ralentir votre serveur mutualisé correctement configuré.

Avantages du blocage d’une IP WordPress au niveau PHP

Protection des fichiers orphelins

Beaucoup de plugins de sécurité ne détectent que les URL WordPress standard. Or votre serveur contient probablement :

  • Anciens fichiers de log (.log, .txt)
  • Fichiers de configuration oubliés (config.php, settings.php)
  • Scripts PHP obsolètes qui traînent
  • Backups non protégés
  • Config FTP pour votre IDE … 🔞

Les hackers testent systématiquement ces fichiers. Un plugin qui les ignore laisse une porte grande ouverte.

A savoir tout de même : on pourrait croire que mon système est magique et fait le café ☕ mais si vous avez un fichier PHP autonome (phpinfo.php, errors.log etc.) si quelqu’un arrive à trouver l’url directe => pas de solution miracle il pourra y accéder.
La solution de mon autre article permet de traquer surtout : les urls WordPress + toutes les 404 afin de vous donner beaucoup d’informations pour savoir quoi bloquer ensuite.
Par exemple, si je constate que des fichiers .txt, .log ou autres sont testés régulièrement. Si je peux affirmer ne jamais avoir besoin de ce type de fichier disponible directement via une url => je ferais mon blocage côté htaccess => ici on bloque tout avant tout autre chose. C’est mieux et plus sécurisé.

Par exemple, je constate régulièrement ce genre de tentative sur mon blog :

Tout est en 404 MAIS qui me dit qu’un jour je ferais pas une bourde ?

Du coup, je peux tout a fait ajouter 2-3 infos dans mon htaccess pour bloquer certaines choses :

# 404 sur le dossier wordpress, .git, .aws et tout ce qu'il contient
RedirectMatch 404 /wordpress/
RedirectMatch 404 /\.git/
RedirectMatch 404 /\.aws/

# 404 sur fichier qui débute par aws suivi de _ - . avec des extenstions problématiques
RedirectMatch 404 /aws[_\-\.].*\.(js|json|env|yml|yaml|config|ini|txt)$

Et pourquoi pas une 403 vous allez me dire ?

Ici c’est simple c’est uniquement qu’une question de sécurité :

  • 404 -> la ressource demandée n’existe pas
  • 403 -> la ressource demandée existe potentiellement mais interdiction d’accès

La 403 donne une information en plus : le fichier existe peut-être donc peut inciter une personne mal intentionné de continuer à fouiller.

Dans mon cas je préfère donner le minimum d’informations.

Et oui même avec toute la bonne volonté du monde, le htaccess est toujours important et pratique.

Compatibilité universelle avec tous les serveurs

En intervenant au niveau PHP plutôt qu’au niveau serveur (.htaccess), votre solution pour bloquer une IP WordPress fonctionne sur : Apache et Nginx

Vous gardez le contrôle total, quel que soit votre hébergeur ou votre architecture serveur.

Indépendance des services externes

Certains plugins de sécurité effectuent des appels vers leurs serveurs à chaque requête. Si leur infrastructure rencontre des problèmes, votre site ralentit. Avec une solution maison pour bloquer une IP WordPress, vous contrôlez tout localement.

FAQ

Utilisez un mu-plugins placé dans le dossier wp-content/mu-plugins/ qui vérifie l'IP du visiteur avant le chargement complet de WordPress. Cette méthode pour bloquer une IP WordPress est plus performante qu'un plugin classique car elle intervient plus tôt dans le cycle de chargement et consomme moins de ressources serveur.

Le .htaccess bloque au niveau serveur (avant PHP), tandis que le mu-plugins bloque au niveau PHP. Le .htaccess est plus rapide mais nécessite un serveur Apache et l'accès au fichier. Le mu-plugins fonctionne sur tous les serveurs (Apache, Nginx, etc.) et offre plus de flexibilité pour la gestion dynamique des IP.

Non, si correctement optimisé. Une requête SQL unique sur une table indexée consomme moins de 1ms. C'est négligeable comparé aux 200-500ms nécessaires pour charger WordPress complet. Tests réalisés sur hébergements mutualisés O2Switch et Hostinger confirment l'absence d'impact mesurable sur les performances.

Oui, c'est un avantage majeur. Contrairement aux plugins de sécurité qui ne protègent que les URL WordPress, un mu-plugins bien codé intercepte toutes les requêtes PHP, y compris vers les fichiers orphelins, anciens scripts ou fichiers de configuration oubliés que les hackers ciblent systématiquement.

Pas nécessairement. Cette solution remplace uniquement la fonction de blocage d'IP des plugins de sécurité. Si vous utilisez d'autres fonctionnalités (scan de malware, vérification d'intégrité, firewall applicatif), gardez votre plugin. Notez que WP-CLI permet la vérification d'intégrité des fichiers avec la commande wp core verify-checksums.

Utilisez une table MySQL dédiée. Créez un index pour des requêtes ultra-rapides. Alimentez cette table via notre système de monitoring ou manuellement via phpMyAdmin. Pour automatiser, combinez avec un script qui analyse vos logs et détecte les patterns suspects.

Conclusion : Bloquer une IP WordPress efficacement en fin 2025 ( début 2026 on peut dire ? 🤓 )

Ce système de firewall pour bloquer une IP WordPress via mu-plugins ne remplace pas intégralement un plugin de sécurité complet. Il accomplit une tâche spécifique avec excellence : empêcher les IP malveillantes de consommer vos ressources serveur.

C’est une pièce essentielle du puzzle de sécurité WordPress, pas le puzzle entier. Mais c’est une pièce que vous contrôlez totalement, qui fonctionne sur tous les environnements, et qui ne dépend d’aucun service externe.

Posez-vous les bonnes questions :

  • De quelles fonctionnalités de sécurité avez-vous réellement besoin ?
  • Payez-vous pour des options que vous n’utilisez jamais ?
  • Avez-vous les compétences pour gérer une partie de votre sécurité vous-même ?
  • Votre hébergement mutualisé supporte-t-il la charge de vos plugins de sécurité actuels ?

La réponse vous appartient. Mais maintenant, vous disposez d’une alternative crédible et performante pour bloquer une IP WordPress sans compromettre vos performances serveur.

Samy Kantari - Expert WordPress + IA

Kantari Samy

Expert WordPress + IA

👨‍💻 10 ans dans le game WordPress, chez Whodunit, à bricoler du code, à dompter des bugs et à faire tourner des projets de toutes tailles.
Puis l’IA est arrivée… et là, révélation 💡 !
J’ai switché de mindset, réinventé ma façon de coder et avec le vibe coding : une nouvelle ère où je ne suis plus limité par le temps ni par les outils.

Aujourd’hui ? Je code toujours… Mais avec mon copilote IA.
On forme une team de choc. Lui, c’est la puissance. Moi, c’est la vision. Ensemble, on déverrouille ce qui semblait impossible hier. 🚀

10+ Années d'expérience
+++ Projets réalisés
80% code par IA
S’abonner
Notification pour
guest
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires