# Tuto : Géoblocage léger et souverain pour WordPress

- Link: https://dolys.fr/forums/topic/tuto-geoblocage-leger-et-souverain-pour-wordpress/
- Published: 2025-03-22T19:05:18+02:00
- Author: nam1962

Parce que le meilleur plugin est celui qui ne parle pas et fait le boulot. J&rsquo;avais besoin d&rsquo;une solution simple et efficace pour bloquer les requêtes provenant de certains pays sur plusieurs petits sites WordPress. Je voulais quelque chose de léger, de souverain, sans dépendance externe ni interface à surveiller. Ce tutoriel vous montre comment j&rsquo;ai mis cela en place, et comment vous pouvez le faire aussi, pas à pas. Pourquoi ce choix ? Ce que fait ce système Prérequis Mise en place pas à pas Exemple de log Effectuez un test Notes complémentaires Pourquoi ce choix ? Restez maître de vos outils Évitez de surcharger vos sites avec des extensions lourdes ou bavardes Mutualisez intelligemment plusieurs petits sites sur un même hébergement Ce que fait ce système : Bloque les IP provenant de pays jugés à risque ou non pertinents Renvoie un simple HTTP 403 (ce qui affiche une page blanche&#8230; into the void !) Enregistre les tentatives dans un fichier par site (sans fioritures) Prérequis Disposez d&rsquo;un hébergement mutualisé (type PlanetHoster, EX2, etc.) Accédez aux fichiers via FTP ou SSH Utilisez WordPress avec accès au dossier mu-plugins Mise en place pas à pas 1. Créez un répertoire geoip mutualisé Placez-vous à la racine de votre hébergement (en dehors de public_html) et créez un dossier geoip : /chemin/vers/compte/geoip/ Dans ce dossier, placez : GeoLite2-Country.mmdb : la base MaxMind GeoIP Téléchargez-la depuis : https://dev.maxmind.com/geoip/geolite2/ (créez un compte gratuit pour obtenir une licence) vendor/ : les librairies PHP nécessaires Si Composer est indisponible, utilisez un dossier vendor/ préconstruit (voir lien fourni en bas de page) logs/ : un fichier .log par domaine update-geoip.php : le script de mise à jour mensuelle 2. Installez la librairie PHP GeoIP2 Si Composer est disponible sur votre hébergement, ouvrez un terminal et tapez : composer require geoip2/geoip2 Sinon, téléchargez le dossier vendor/ déjà prêt, que je vous fournis ici : [lien de téléchargement à insérer] 3. Ajoutez le plugin mu-plugin WordPress Dans chaque site WordPress concerné, accédez au dossier suivant ou créez-le si besoin : /wp-content/mu-plugins/ Ajoutez-y ce fichier geoip-blocker.php : &lt;?php require_once '/chemin/vers/compte/geoip/vendor/autoload.php'; use GeoIp2\Database\Reader; try { $reader = new Reader('/chemin/vers/compte/geoip/GeoLite2-Country.mmdb'); $record = $reader-&gt;country($_SERVER['REMOTE_ADDR']); $countryCode = $record-&gt;country-&gt;isoCode; $blockedCountries = ['AO', 'BD', 'BF', 'BJ', 'CD', 'CF', 'CG', 'CI', 'CN', 'DJ', 'DZ', 'EH', 'ER', 'ET', 'GQ', 'IQ', 'IR', 'KP', 'MR', 'MW', 'MZ', 'NA', 'NE', 'NG', 'NI', 'PK', 'PS', 'SD', 'SN', 'SO', 'SS', 'SY', 'TD', 'TG', 'UA', 'UG', 'ZM', 'ZW', 'GH']; if (in_array($countryCode, $blockedCountries)) { $host = $_SERVER['HTTP_HOST'] ?? 'unknown'; $safeHost = preg_replace('/[^a-zA-Z0-9.-]/', '_', strtolower($host)); $logDir = '/chemin/vers/compte/geoip/logs'; if (!is_dir($logDir)) { mkdir($logDir, 0755, true); } $logFile = $logDir . '/' . $safeHost . '.log'; $logLine = date('Y-m-d H:i:s') . " - Blocked IP: " . $_SERVER['REMOTE_ADDR'] . " - Country: " . $countryCode . "\n"; file_put_contents($logFile, $logLine, FILE_APPEND); header('HTTP/1.1 403 Forbidden'); exit; } } catch (Exception $e) { // Ne rien bloquer en cas d'erreur } Ce fichier s&rsquo;exécute automatiquement dès le chargement de WordPress, sans activation. 4. Automatisez la mise à jour de la base Créez un fichier update-geoip.php dans le dossier geoip et ajoutez-y le script de mise à jour. Il devra : Télécharger la base depuis MaxMind (via votre licence) Remplacer la base .mmdb Nettoyer les fichiers temporaires Programmez ensuite une tâche cron : 0 4 2 * * /chemin/vers/php /chemin/vers/geoip/update-geoip.php &gt;&gt; /chemin/vers/geoip/update.log 2&gt;&amp;1 Exemple de log Fichier : /chemin/vers/geoip/logs/monsite.com.log Contenu : 2025-03-22 07:38:00 - Blocked IP: 1.2.3.4 - Country: CN Chaque domaine a son propre fichier log. Effectuez un test Quand tout est en place, je vous recommande de tester ainsi : Ajoutez temporairement 'FR' à la liste noire Rechargez le site : vous verrez une page blanche (403) Consultez le log correspondant pour vérifier que l&rsquo;IP a été bloquée Retirez 'FR' ensuite pour éviter de vous bloquer ! Notes complémentaires Ce système est simple, statique, sans interface Il peut être enrichi si vous en ressentez le besoin (statistiques, bannissements temporaires, affichages personnalisés) Il fonctionne en toute discrétion, sans plugin visible ni impact sur les performances Adaptez ce fonctionnement à vos besoins. Ce dispositif a été conçu pour protéger en silence et durablement une flotte de petits sites WordPress mutualisés. Made with soin, café, et sans Cloudflare. &nbsp;
