Je suis récemment tombé sur un article décrivant comment bloquer l’accès de certains pays avec Nginx. J’ai donc décidé de bloquer les pays responsables de spams (commentaires indésirables). Je vais ici décrire la procédure sur Debian Jessie.
Tout d’abord vérifier que le module GOIP est activé :
nginx -V
Si c’est le cas, la commande vous retournera quelque chose comme cela. C’est normalement la configuration par défaut sur Debian :
nginx version: nginx/1.x.x TLS SNI support enabled configure arguments: [...] --with-http_geoip_module [...]
Installer GEOIP :
apt-get install geoip-database libgeoip1
Puis créer le fichier /etc/nginx/conf.d/geo.conf
geoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $allowed_country { default yes; BE no; FR no; }
Via cette configuration, la France et la Belgique (désolé amis frontaliés) sont bloquées. Je vous laisse le soin d’ajouter d’autres pays…
Dans la le fichier de configuration du site web concerné, ajouter :
if ($allowed_country = no) { return 444; }
Redémarrer le serveur :
service nginx configtest service nginx restart
Au besoin, il possible de mettre à jour la base de données GEOIP
cd /usr/share/GeoIP/ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz gunzip GeoIP.dat.gz
A surveiller dans la durée dans vos logs. La manipulation fonctionne, je l’ai tester depuis un poste extérieur.
Source : JBNet.fr
Documentation Nginx : HttpGeoipModule
Liste des codes pays : ICI