Apache2 - Restrictions par pays

Apache2 et MaxMind : bloquer ou autoriser les connexions pour certains pays

I. Présentation

Dans ce tutoriel, nous allons configurer un serveur Web Apache de manière à bloquer l’accès à notre site Web à certains pays, ou à l’inverse, autoriser uniquement certains pays à se connecter. Pour cela, nous allons installer et configurer le module mod_maxminddb qui va permettre de faire de la géolocalisation d’adresses IP en utilisant la base MaxMind.

En ce qui me concerne, j’utilise une machine sous Debian 11 avec un serveur Web Apache déjà mis en place et répondant à l’adresse « it-connect.tech« . Si besoin, vous pouvez consulter cet article pour la préparation d’un serveur Web :

II. Géolocalisation IP dans Apache : installation des prérequis

A. Installation des outils de développement Apache

Premièrement, nous devons installer le paquet « apache2-dev » car sinon il nous manquera une dépendance pour la suite. Voici les commandes à exécuter :

sudo apt-get update
sudo apt-get install apache2-dev

B. Installation de la librairie libmaxminddb

Deuxièmement, nous devons installer la librairie libmaxminddb sur le serveur dans le but de pouvoir lire les bases de données « MaxMind DB » notamment la base GeoIP2 qui contient les adresses IP publiques classées par pays. Cette librairie est publiée sur GitHub : libmaxminddb.

Pour cela, on va télécharger la dernière version :

cd /tmp
wget https://github.com/maxmind/libmaxminddb/releases/download/1.7.1/libmaxminddb-1.7.1.tar.gz

Puis, on va extraire le contenu de cette archive et se positionner dans le répertoire obtenu :

tar xzvf libmaxminddb-1.7.1.tar.gz
cd libmaxminddb-1.7.1/

Ici, on lance les commandes d’installation :

./configure
make
sudo make install
sudo ldconfig

Une fois que c’est fait, et s’il n’y a pas d’erreur, on peut passer à la suite.

C. Installation du paquet geoipupdate

Troisièmement, nous allons installer le paquet geoipupdate pour récupérer une copie des bases IP et surtout permettre une mise à jour automatique des bases d’adresses IP. Cela va nécessiter de s’inscrire sur le site de MaxMind pour obtenir une licence gratuite. Ce projet est également disponible sur GitHub : geoipupdate.

Nous allons télécharger le package DEB d’installation puisque l’on est sur Debian.

cd /tmp
wget https://github.com/maxmind/geoipupdate/releases/download/v4.10.0/geoipupdate_4.10.0_linux_amd64.deb

Une fois que l’on a ce package en notre possession, nous allons l’installer :

dpkg -i geoipupdate_4.10.0_linux_amd64.deb

Le fichier de configuration de ce paquet est « /etc/GeoIP.conf ». Avant de le modifier, nous devons créer un compte sur le site MaxMind, à cette adresse :

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« .

Donnez un nom à la licence et répondre « No » à la question posée. Confirmez. Une clé de licence sera affichée à l’écran avec un Account ID et une License Key. Copiez ces deux informations et gardez-les bien au chaud : la clé est visible une seule fois !

Apache - MaxMind - Licence GeoIP - 2

Retournez sur la ligne de commande de la machine Linux, et éditez le fichier de configuration :

sudo nano /etc/GeoIP.conf

Dans ce fichier, vous devez inclure votre ID de compte et votre clé de licence, en remplaçant les valeurs « YOUR_ACCOUNT_ID_HERE » et « YOUR_LICENSE_KEY_HERE« .

Apache - GeoIP Config

Quand c’est fait, enregistrez le fichier. Exécutez la commande suivante pour mettre à jour les bases (le fait d’avoir le -v active le mode verbeux, mais cela fonctionne aussi sans cette option) :

geoipupdate -v

geoipupdate - Mise à jour des bases

Il est également possible d’automatiser l’actualisation de la base d’adresses IP. Sur le site officiel de MaxMind, un exemple est donné de manière à mettre à jour la base deux fois par semaine. Voici la ligne :

45 15 * * 0,3 /usr/bin/geoipupdate

A ajouter dans la crontab :

crontab -e

Ainsi, la base s’actualisera toute seule.

D. Installation du module Apache mod_maxminddb

Quatrièmement, nous devons installer le module mod_maxminddb pour Apache2 ! Toujours sur le même principe, nous allons récupérer les sources sur GitHub et procéder à l’installation. Voici le lien vers le projet GitHub : mod_maxminddb.

cd /tmp
wget https://github.com/maxmind/mod_maxminddb/releases/download/1.2.0/mod_maxminddb-1.2.0.tar.gz

Ensuite, on extrait le contenu de l’archive et on se positionne dans le répertoire :

tar xzvf mod_maxminddb-1.2.0.tar.gz
cd mod_maxminddb-1.2.0

Puis, on lance l’installation :

./configure
make
make install

Logiquement, l’installation va automatiquement activer le module dans Apache, mais on peut tout de même essayer de l’activer au cas où :

sudo a2enmod maxminddb
sudo systemctl restart apache2

Voilà, l’installation est terminée. Nous pouvons passer à la configuration d’Apache pour bloquer ou autoriser des pays.

III. Bloquer ou autoriser des pays dans Apache

Pour la suite de ce tutoriel, je vais modifier le fichier de configuration « /etc/apache2/sites-enabled/000-default.conf » correspondant au site activé par défaut dans Apache2. La racine de ce site est « /var/www/html« . Pour rappel, j’utilise une machine sous Debian 11 avec la dernière version d’Apache 2.4.

C’est parti, éditons ce fichier de configuration :

sudo nano /etc/apache2/sites-enabled/000-default.conf

Puis, nous allons modifier ce fichier de manière à bloquer les connexions en provenance de Russie et de Chine sur notre site Web (vous pouvez obtenir les codes des pays ici). D’autres exemples sont donnés sur le GitHub officiel du module Apache.

  

    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|CH) BlockCountry
    Deny from env=BlockCountry

  

Pour tester, on peut aussi bloquer la France (FR) de manière à voir que ça bloque bien. Sinon, il faut utiliser un VPN pour se « téléporter » dans un autre pays. 😉

Ici, la directive s’applique à tout le site Web puisque l’on cible la racine « /var/www/html », mais on pourrait faire une configuration au niveau d’un autre dossier, voire même au niveau global d’Apache.

On enregistre, on redémarre Apache2 :

sudo systemctl restart apache2

Puis, on teste :

Apache2 blocage geoIP

La configuration fonctionne… Si je retire « FR« , que je recharge Apache et que je retente ma chance, j’accède bien au site !

À l’inverse, on pourrait autoriser les connexions uniquement depuis la France et bloquer tout le reste, si ce n’est que l’on autorisera aussi l’adresse IP « 192.168.100.1 » qui est le reverse proxy utilisé dans mon lab :

  

    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.100.1
    Deny from all

  

En complément, voici ce que ça donne avec le fichier complet :

Apache2 bloquer ou autoriser des pays via MaxMind

IV. Conclusion

Voilà, grâce à cette configuration, vous disposez d’un serveur Web capable d’exploiter les bases GeoIP de MaxMind dans le but de bloquer ou d’autoriser les connexions en provenance de certains pays ! Plutôt sympa pour sécuriser un site Web ou une application qui n’a pas vocation à être utilisée à l’internationale.

Hébergez votre site à partir de 2$ sur 👉👉👉 https://www.tnctech.ca

À propos Santana

Analyste en cybersécurité avec 5 ans d'expérience dans la protection des systèmes d'information contre les menaces et les attaques. Expertise dans la surveillance des réseaux, l'analyse des vulnérabilités, et la gestion des incidents de sécurité. Passionnée par l'innovation technologique et la mise en œuvre de solutions de sécurité robustes pour protéger les données sensibles et assurer la conformité réglementaire.

Vérifiez également

PfSense : reverse proxy HTTPS avec HAProxy et ACME (Let’s Encrypt) | IT-Connect

PfSense : reverse proxy HTTPS avec HAProxy et ACME (Let’s Encrypt)

Table de Matieres1 I. Présentation2 II. Gérer les certificats Let’s Encrypt sur PfSense2.1 A. Installation …

Bloquer les attaques sur son serveur Web (Apache + PHP) avec CrowdSec

Bloquer les attaques sur son serveur Web (Apache + PHP) avec CrowdSec

Table de Matieres1 I. Présentation1.1 A. L’objectif du jour2 II. Mise en place d’Apache et …

Comment cacher la version de son serveur web Apache ?

Comment cacher la version de son serveur web Apache ?

I. Présentation Dans ce tutoriel, nous allons apprendre à cacher la version du serveur web …

Laisser un commentaire

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