Noobunbox

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

 

Catégories : Sécurité

Novakin

Passionné d'informatique depuis de longues années je me suis tourné vers Linux et des solutions de virtualisation il y a peu. Ce blog est une sorte de carnet de web où je partage mes mémos.

7
Poster un Commentaire

4 Comment threads
3 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
5 Comment authors

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

  Subscribe  
plus récents plus anciens plus de votes
Me notifier des

Plop !
Il y a de ca quelques mois/années, j’avais étudié la situation présente car j’en avais marre de voir les niaks(*) venir titiller mon ssh. Cependant, et dixit le web, ca ralentirait nettement la vitesse du surf sur le srv concerné par cette règle.
Du coup, j’ai hésité et donc pas testé en situation réelle (Srv en production).
Des infos là dessus à ton niveau?

Kéro
(*) a prendre avec de l’humour forcément !

Cyril

« Dans l’exemple ci-dessous, nous autoriserons seulement les visites provenant des USA et de la France. »
il faut changer le « default yes » à « no » 😉
Par contre, comment autorise-t-on le réseau local (192.168.) ?

siger

Il est également possible de bloquer avec Geoip au niveau du pare-feu iptables avec xtables-addons-geoip . L’opération est plus compliquée sur raspberry pi en raison du noyau un peu particulier mais ça marche . Ca permet de bloquer les attaques potentielles pour tous les ports. https://www.how-to.ovh/viewtopic.php?t=11

siger

Pour ssh il est aussi possible de bloquer avec cette méthode https://www.axllent.org/docs/view/ssh-geoip/