====== 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.\\ {{howhard>3}}\\ \\ ===== Pré-requis ===== 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. \\ ===== Qu'est ce que MadMind ? ===== 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.\\ \\ ===== Le principe ===== 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**. ===== Installation des paquets Linux ===== 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 [[https://github.com/maxmind|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.\\ \\ ===== Configuration de Geoipupdate ===== En premier lieu, rendez-vous sur le site officiel pour [[https://www.maxmind.com/en/geolite2/signup|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 \\ \\ ===== Bloquer des pays avec Apache2 ===== 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 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 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 [[https://www.geonames.org/countries/|cette page]].\\ Et on recharge Apache2 : systemctl reload apache2 ===== Autoriser que les adresses IPs françaises avec Apache 2 ===== 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 : 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 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. ===== Pour finir ==== 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.\\ ===== Notes de version ===== * [04/01/2025] : Création de l'article ===== Auteurs et sources ===== * Auteur : [[:user:montuy337513]] \\ ====Sources==== * [[https://github.com/maxmind|GitHub MaxMind]] * [[https://www.maxmind.com/en/home|Site offcielle de MaxMind]] * [[https://www.geonames.org/countries/|Liste des codes ISO pour les différents pays]] ===== Navigation ===== * [[:accueil|Accueil]] * [[:serveur-debian-securite]] * [[:serveur-debian-general]] * [[:serveur-debian-automatisation]] * [[:serveur-debian-file]] * [[:serveur-debian-log]] * [[:serveur-debian-user-groupe]] * [[:serveur-debian-apache2]] * [[:serveur-debian-postfix]] * [[:serveur-debian-mysql]] * [[:serveur-debian-divers]]