l’Almanet doLys Gnu/Linux – Open Source – Entreprises › Forums › L’almanet doLys Open Source › Tuto : Géoblocage léger et souverain pour WordPress
Mots-clés : bloquer IP, bloquer pays, firewall WordPress, géoblocage, geoip, hébergement mutualisé, maxmind, mu-plugin, performance, plugin minimaliste, sécurité, souveraineté web, wordpress
- This topic is empty.
-
AuteurArticles
-
mars 22, 2025 à 7:05 pm #12777
Parce que le meilleur plugin est celui qui ne parle pas et fait le boulot.
J’avais besoin d’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’ai mis cela en place, et comment vous pouvez le faire aussi, pas à pas.
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… into the void !)
- Enregistre les tentatives dans un fichier par site (sans fioritures)
Prérequis
- Disposez d’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 dossiergeoip
:/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)
- Si Composer est indisponible, utilisez un dossier
logs/
: un fichier.log
par domaineupdate-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
:<?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->country($_SERVER['REMOTE_ADDR']); $countryCode = $record->country->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’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 dossiergeoip
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 >> /chemin/vers/geoip/update.log 2>&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’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.
Un jeune site que j'aime bien, la ferrari du T-shirt ...bio en plus : GoudronBlanc
-
AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.