Comment installer Mod_GeoIP pour Apache dans RHEL et CentOS
Mod_GeoIP s’agit d’un module Apache qui peut être utilisé pour obtenir l’emplacement géographique de l’adresse IP du visiteur sur le serveur Web Apache. Ce module vous permet de déterminer le pays, l’organisation et la localisation du visiteur. Il est particulièrement utile pour la diffusion d’annonces géographiques, le contenu cible, la lutte contre le spam, la détection des fraudes, la redirection/le blocage des visiteurs en fonction de leur pays et bien plus encore.
Le module GeoIP permet aux administrateurs système de rediriger ou de bloquer le trafic Web en fonction de l’emplacement géographique du client. L’emplacement géographique est appris via l’adresse IP du client.
Mod_GeoIP a deux versions différentes, l’une est gratuite et l’autre est payante, et utilise les bases de données MaxMind GeoIP/GeoCity.
- Version gratuite : Dans la version gratuite, les bases de données Geo City et Country sont disponibles avec une précision de 99,5 %.
- Version payante : Dans la version payante, vous obtiendrez les deux bases de données avec une précision de 99,8 % avec des détails plus avancés sur l’adresse IP.
Si vous souhaitez découvrir les plus grandes différences entre la version gratuite et payante, veuillez visiter Maxmind.com.
Cet article explique comment configurer et installer le module Mod_GeoIP pour Apache dans RHEL et CentOS à l’aide du référentiel EPEL avec l’utilitaire de gestion de paquets YUM.
Nous supposons que vous avez déjà un système RHEL et CentOS en cours d’exécution avec une configuration LAMP (Linux, Apache, MySQL et PHP) fonctionnelle. Si ce n’est pas le cas, lisez nos articles où nous avons montré l’installation des deux systèmes d’exploitation avec LAMP.
Installation de RHEL/CentOS
- Installation de RHEL 7 et CentOS 7 Minimal.
- Installation de RHEL 8 et CentOS 8 Minimal.
Configuration de LAMP sur RHEL/CentOS
- Comment installer LAMP (Linux, Apache, MySQL, PHP) sur RHEL et CentOS 7
- Comment installer Apache, MySQL/MariaDB et PHP sur RHEL et CentOS 8
Activer le référentiel EPEL dans RHEL et CentOS
Par défaut, mod_Geoip n’est pas disponible dans le dépôt officiel RHEL/CentOS, nous devons donc installer et activer le dépôt EPEL tiers.
# yum install epel-release
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm [On RHEL 8]
Installer Mod_GeoIP dans RHEL et CentOS
Une fois que vous avez activé le référentiel EPEL sur votre système, vous pouvez simplement installer mod_geoip en exécutant la commande suivante avec leurs packages de dépendance.
# yum install mod_geoip GeoIP GeoIP-devel GeoIP-data zlib-devel
Télécharger la dernière base de données Geo City and Country
C’est une bonne idée de télécharger la dernière base de données Geo City and Country pour rester à jour.
# cd /usr/share/GeoIP/
mv GeoIP.dat GeoIP.dat_org
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
gunzip GeoLite2-Country.tar.gz
gunzip GeoLite2-City.tar.gz
Activer Mod_GeoIP dans Apache
Une fois le module installé, ouvrez et modifiez le fichier de configuration principal du module, avec un éditeur de texte en ligne de commande tel que vi, et activez le module à l’échelle du serveur, comme illustré dans l’extrait ci-dessous.
# vi /etc/httpd/conf.d/geoip.conf
Réglez la ligne GeoIPEnable de Off à On. Assurez-vous également d’ajouter le chemin absolu au fichier de base de données GeoIP.
<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat MemoryCache
</IfModule>
Redémarrez le service Apache pour refléter les modifications.
# systemctl restart httpd
OR
service httpd restartCependant, il n’est pas recommandé d’activer le module GeoIP à l’échelle du serveur. Vous ne devez activer le module GeoIP que dans les blocs <Emplacement> ou <Répertoire> où vous effectueriez réellement la redirection ou le blocage du trafic.
Module de test Mod_GeoIP
Pour tester le mod_geoip module fonctionne correctement avec Apache, nous devons créer un fichier PHP appelé testgeoip.php sous le répertoire racine Apache (par exemple /var/www/html).
# vi /var/www/html/testgeoip.php
Insérez-y le morceau de code php suivant.
<html>
<head>
<title>What is my IP address - determine or retrieve my IP address</title>
</head>
<body>
<?php
if (getenv(HTTP_X_FORWARDED_FOR)) {
$pipaddress = getenv(HTTP_X_FORWARDED_FOR);
$ipaddress = getenv(REMOTE_ADDR);
echo "Your Proxy IP address is : ".$pipaddress. " (via $ipaddress) " ;
} else {
$ipaddress = getenv(REMOTE_ADDR);
echo "Your IP address is : $ipaddress";
}
$country = getenv(GEOIP_COUNTRY_NAME);
$country_code = getenv(GEOIP_COUNTRY_CODE);
echo "<br/>Your country : $country ( $country_code ) ";
?>
</body>
</html>
Maintenant, essayez d’appeler le fichier à l’aide d’un navigateur Web (par exemple http://localhost/testgeoip.php). Vous obtiendrez votre adresse IP et les détails de votre pays.
Mise à jour de la base de données GeoIP
La base de données GeoIP est mise à jour au début de chaque mois. Il est donc très important de maintenir la base de données GeoIP à jour. Pour télécharger la dernière version de la base de données, utilisez la commande suivante.
# cd /usr/share/GeoIP/
mv GeoIP.dat GeoIP.dat_org
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
gunzip GeoLite2-Country.tar.gz
gunzip GeoLite2-City.tar.gz
Mise à jour automatique de la base de données GeoIP
Nous avons écrit un petit script shell qui téléchargera automatiquement la dernière version de la base de données GeoIP tous les mois. Il suffit de placer l’un des scripts suivants sous /etc/cron.monthly.
Scénario 1
# Automatic GeoIP Database Update
#!/bin/sh
cd /usr/share/GeoIP
mv GeoIP.dat GeoIP.dat_org
wget -q http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
gzip -d -f GeoLite2-Country.tar.gzScénario 2
#!/bin/sh
GEOIP_MIRROR="http://geolite.maxmind.com/download/geoip/database"
GEOIPDIR=/usr/share/GeoIP
TMPDIR=
DATABASES="GeoLiteCity GeoLiteCountry/GeoIP asnum/GeoIPASNum GeoIPv6"
if [ -d "${GEOIPDIR}" ]; then
cd $GEOIPDIR
if [ -n "${DATABASES}" ]; then
TMPDIR=$(mktemp -d geoipupdate.XXXXXXXXXX)
echo "Updating GeoIP databases..."
for db in $DATABASES; do
fname=$(basename $db)
wget --no-verbose -t 3 -T 60 "${GEOIP_MIRROR}/${db}.dat.gz" -O "${TMPDIR}/${fname}.dat.gz"
gunzip -fdc "${TMPDIR}/${fname}.dat.gz" > "${TMPDIR}/${fname}.dat"
mv "${TMPDIR}/${fname}.dat" "${GEOIPDIR}/${fname}.dat"
chmod 0644 "${GEOIPDIR}/${fname}.dat"
done
[ -d "${TMPDIR}" ] && rm -rf $TMPDIR
fi
fiRedirection des utilisateurs en fonction du pays
L’exemple de code ci-dessous redirigera les utilisateurs en fonction du code de pays que nous avons défini sur AS (Asie). De cette façon, vous pouvez rediriger n’importe quel utilisateur en fonction de son code de comté.
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AS$
RewriteRule ^(.*)$ https://linux-console.net$1 [R,L]Blocage d’utilisateurs en fonction du pays
Cet exemple bloquera les utilisateurs en fonction du code de pays défini par GeoIP. L’exemple ci-dessous bloquera les utilisateurs des pays AS (Asie) et USA (États-Unis).
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
SetEnvIf GEOIP_COUNTRY_CODE AS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry
... place more countries here
Deny from env=BlockCountryAutoriser les utilisateurs en fonction du pays
L’exemple ci-dessous n’autorisera que les utilisateurs des pays mentionnés ci-dessous.
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
SetEnvIf GEOIP_COUNTRY_CODE AS AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
... place more countries here
Deny from all
Allow from env=AllowCountryPour plus d’informations sur le mod_geoip et son utilisation, consultez http://www.maxmind.com/app/mod_geoip. Si vous rencontrez des difficultés pour configurer un module mod_geoip, n’hésitez pas à nous le faire savoir via les commentaires et n’oubliez pas de le partager avec vos amis.