serveur-debian-apache2:securite-apache2:bloquer-pays-par-ip-avec-apache2

Bloquer ou autoriser les IPs d'un pays avec Apache2

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.

Difficulté
Moyen


Pour la mise en place de cette solution de blocage / autorisation par pays à votre site, vous devez :

  • Avoir un accès root à votre serveur ou sudo d'installé.
  • Avoir Apache2.4 de fonctionnel sur votre serveur.
  • Les paquets de votre distribution sont à jour.



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.

  • [04/01/2025] : Création de l'article


  • serveur-debian-apache2/securite-apache2/bloquer-pays-par-ip-avec-apache2.txt
  • Dernière modification : 04/01/2025 03:51
  • de zonewebmaster