Dans ce tutoriel, nous verrons comment configurer un serveur Web Apache pour bloquer ou pour autoriser uniquement l'accès de notre site Web à certains pays.
Nous utiliserons la base de données GeoIP fournie par l'entreprise MaxMind.
Pour la mise en place de cette solution de blocage / autorisation par pays à votre site, vous devez :
Ce tutoriel a été testé sur un serveur Debian 11 et 12. Il est relativement simple de l'adapter à une autre distribution Linux.
MaxMind, Inc. est une société de données basée dans le Massachusetts qui fournit des données de localisation pour les adresses IP et d'autres données pour les adresses IP, ainsi que des données de détection de fraude.
Pour bloquer ou autoriser certains pays à se connecter à votre site web, nous allons installer et configurer le module mod_maxminddb qui va permettre à Apache2 de faire de la géolocalisation d'adresses IP en utilisant les données de la base GeoIP.
En premier lieu, installons les dépendances requises. Il faut notamment le paquet apache2-dev pour utiliser mod_maxminddb et libmaxminddb.
Les lignes suivantes sont saisies dans un terminal en mode super-admin (root).
apt-get apt-get install apache2-dev
Ensuite, nous installons la librairie libmaxminddb, la dernière version stable à l'heure de l'écriture de ce tutoriel est la version 1.11.0.
cd /tmp wget https://github.com/maxmind/libmaxminddb/releases/download/1.11.0/libmaxminddb-1.11.0.tar.gz tar xzvf libmaxminddb-1.11.0.tar.gz cd libmaxminddb-1.11.0 ./configure make make install ldconfig
Explications du code :
Nous allons dans un répertoire temporaire.
Nous téléchargeons la librairie libmaxminddb-1.11.0 sur le GitHub de MaxMind.
Nous décompressons l'archive téléchargée.
Nous allons dans le répertoire libmaxminddb-1.11.0.
Ensuite nous lançons la procédure d'installation, avec la configuration, la configuration et la l'installation de la librairie libmasminddb.
Si vous utilisez sudo, remplacez les deux dernières lignes par :
sudo make install sudo ldconfig
Ensuite nous installons le paquet geoipupdate qui permet de faire une mise à jour automatique des bases d'adresses IPs.
cd /tmp wget https://github.com/maxmind/geoipupdate/releases/download/v7.1.0/geoipupdate_7.1.0_linux_amd64.deb dpkg -i geoipupdate_7.1.0_linux_amd64.deb
Ici, le code est simple, nous téléchargeons le paquet Debian de geoipupdate puis nous l'installons avec le gestionnaire de paquets dpkg avec l'option -i.
Nous configurerons ce paquet plus loin dans le tutoriel.
Maintenant installons le module Apache mod_maxminddb à proprement parler :
cd /tmp wget https://github.com/maxmind/mod_maxminddb/releases/download/1.2.0/mod_maxminddb-1.2.0.tar.gz tar xzvf mod_maxminddb-1.2.0.tar.gz cd mod_maxminddb-1.2.0 ./configure make make install
A ce niveau du tutoriel, tout est installé. Maintenant en tamons la configuration et quelques exemples.
En premier lieu, rendez-vous sur le site officiel pour ouvrir un compte.
Après l'inscription, vous allez recevoir un e-mail qui contient un lien vous permettant de définir votre mot de passe.
Quand c'est fait, connectez-vous sur le site, cliquez à gauche sur "Manage License Keys" puis à droite sur "Generate new license key". La licence est gratuite.
Le account ID et le License Key sont à insérer dans le fichier /etc/GeoIP.conf
Ensuite modifions le fichier de configuration /etc/GeoIP.conf.
nano /etc/GeoIP.conf
Dans ce fichier, repérez les lignes AccountID et LicenseKey et remplacez les valeurs "YOUR_ACCOUNT_ID_HERE" et "YOUR_LICENSE_KEY_HERE" avec les valeurs obtenues ci-dessus.
Une petite mise à jour :
geoipupdate -v
Il ne reste plus qu'à configurer la tâche cron avec
crontab -e
et ajoutez la ligne suivante
45 15 * * 0,3 /usr/bin/geoipupdate
Nous pouvons interdire l'accès d'un pays à tous le site ou juste à une partie de votre site.
Dans l'exemple ci-dessous, nous allons modifier le fichier de configuration virtualhost du site monexemple.com. Et la racine de ce site est /var/www/html/
Nous allons interdire les IPs en provenance de Russie et Chine. Ce sont les pays les plus couramment bloqués.
Commençons par éditer le fichier de configuration /etc/apaches2/sites-enabled/monexemple.com.conf
nano /etc/apaches2/sites-enabled/monexemple.com.conf
Puis insérez le code ci-dessous entre les balises VirtualHost
<Directory /var/www/html> <IfModule mod_maxminddb.c> MaxMindDBEnable On MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code SetEnvIf MM_COUNTRY_CODE ^(RU|CN) BlockCountry Deny from env=BlockCountry </IfModule> </Directory>
Vous pouvez tester les addresses IPs françaises pour tester (en ajoutant FR).
Pour obtenir les codes ISO-3166 des autres pays, vous pouvez consulter cette page.
Et on recharge Apache2 :
systemctl reload apache2
Pour ce second exemple, nous interdirons toutes les IPs saufs les IPs françaises. Et pour compléter un peu l'exemple, nous autoriserons aussi une adresse de réseau local comme 192.168.1.10. Nous éditons notre fichier de configuration comme ci-dessus mais nous insérons ces lignes :
<Directory /var/www/html> <IfModule mod_maxminddb.c> MaxMindDBEnable On MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb MaxMindDBEnv MM_COUNTRY_CODE COUNTRY_DB/country/iso_code SetEnvIf MM_COUNTRY_CODE ^(FR) AllowCountry Allow from env=AllowCountry Allow from host 192.168.1.10 Deny from all </IfModule> </Directory>
La ligne "Allow from host 192.168.1.10" est optionnelle. Elle autorise une adresse locale. Si vous utilisez une adresse proxy pour vous connecter, vous pouvez remplacer 192.168.1.10 par l'adresse IP de votre proxy.
Maintenant, vous disposez d'un serveur web Apache2 capable de filtrer les connexions entrantes sur votre site internet en fonction de la provenance de certains pays.
Autoriser ou interdire certaines IPs en fonction du pays permet de sécuriser, par exemple, une application ou un site n'ayant pas vocation à être à l'internationale.
Autres liens rapides pouvant vous intéresser