Pourquoi vouloir bloquer l’accès à votre site depuis certains pays ? Hé bien parce que les attaques (DoS, Flood, Spam) ont une grande tendance à venir des mêmes pays (Ukraine, Biélorussie, Chine, etc.)
Voici donc un petit mémo vous permettant d’apprendre à bloquer l’accès à votre site depuis certains pays avec Apache et NGinx
Bloquer l’accès à votre site depuis certains pays avec Apache
Le plus simple avec Apache reste d’utiliser un .htacess et vous pouvez en générer avec IP2LOCATION.
Première étape : Choisissez le type d’adresse à bloquer IPV4 ou IPV6
Deuxième étape : Sélectionnez les pays que vous souhaitez bloquer
Troisième étape : Sélectionnez le format correspondant à votre version d’Apache
Une fois ces trois étapes terminées votre navigateur télécharge un fichier texte. Il ne vous restera qu’à copier et coller son contenu dans un fichier .htaccess que vous placerez à la racine de votre site.
Bloquer l’accès à votre site depuis certains pays avec NGinx
NGinx ne gère pas les .htacess, nous allons donc devoir utiliser un module. NGinx doit avoir été compilé avec le support du mod http_geoip_module
Pour vérifier la présence de ce module utilisez la commande suivante
nginx -V
Qui dans notre cas, nous retourne :
root@noobunbox:/# nginx -V nginx version: nginx/1.9.13 built by gcc 4.9.2 (Debian 4.9.2-10) built with OpenSSL 1.0.2g 1 Mar 2016 TLS SNI support enabled configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --user=www-data --group=www-data --with-threads --with-http_ssl_module --with-http_v2_module --with-ipv6 --with-http_geoip_module --with-http_mp4_module --with-http_auth_request_module --with-http_slice_module --with-file-aio --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security' --add-module=/opt/headers-more-nginx
Installation de la base de données GeoIP
Sous Debian et Ubuntu, la base de donnés GeoIP peut être installée via la commande suivante
sudo apt-get install geoip-database libgeoip1
Cette base de données est par défaut stockée dans le dossier /usr/share/GeoIP/. Nous allons donc effectuer une sauvegarde de la BDD puis la mettre à jour
mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak cd /usr/share/GeoIP/ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz gunzip GeoIP.dat.gz
Configuration de NGinx
Modifions le fichier de configuration de nginx
sudo nano /etc/nginx/nginx.conf
Dans notre exemple nous bloquerons les accès depuis : la Biélorussie, la Chine et l’Ukraine, consultez la page suivante pour connaitre les codes utilisés par chaque pays.
Dans le bloc http
avant les lignes de configuration includes
ajoutez le code suivant :
geoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $allowed_country { default yes; BY no; CN no; UKR no; }
Vous pouvez aussi n’autorisez que certains pays, il vous suffira de remplacer la variable default yes
par default no
et de lister ensuite les pays qui pourront accéder à votre site.
Dans l’exemple ci-dessous, nous autoriserons seulement les visites provenant des USA et de la France
geoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $allowed_country { default yes; FR yes; US yes; }
Il ne nous reste plus qu’à configurer le blocage par site. Dans votre virtual host ajoutez dans le bloc server
le code suivant
if ($allowed_country = no) { return 444; }
Maintenant vérifiez la configuration de NGinx et si tout va bien rechargez la
sudo nginx -t sudo service nginx reload
Sources
- Blogmotion, Bloquer l’accès à votre site pour certains pays du monde
- Howtoforge, How To Block Visitors By Country With The GeoIP Module