Table des matières
Localiser une IP
Problématique
On souhaite localiser géographiquement une IP (continent, pays, département, ville…).
La solution n'est pas simple pour plusieurs raisons1) :
- une IP n'est pas structurellement liée à une infrastructure matérielle déployée sur un territoire donné (ce n'est qu'une configuration sujette au changement),
- les blocs d'IP peuvent changer de main (d'un opérateur à l'autre), notamment les blocs d'IPV4, leur rareté attisant la convoitise,
- l'infrastructure n'épouse pas les contours des territoires administratifs (frontières de communes, de départements…),
- l'organisation détentrice d'un bloc d'IP n'est pas obligée de déclarer la localisation géographique des IP de ce bloc.
En conséquence, établir la correspondance entre une IP une localisation géographique est le fruit d'un travail d'analyse de données existantes, d'exploration et de déduction. Il débouche sur la création, par des éditeurs, de bases de données qualifiées, régulièrement mises à jour. Autrement dit, c'est un job !
En tant qu'utilisatrice, on en est réduite à utiliser des bases de données existantes, suivant les modalités proposées par les éditeurs.
GeoIP
GeoIP2 démo
Pour une interrogation ponctuelle et limitée, on peut utiliser le service en ligne de démonstration (gratuit) de GeoIP2 City.
GeoLite2 : produit gratuit
GeoLite2 est une version gratuite de bases de données de localisation. On peut les télécharger et les utiliser gratuitement, sous licence CC-by-sa.
Les bases GeoLite2 sont qualifiées par l'éditeur de “comparables mais moins précises” que celles utilisées par le service GeoIP2 (payant). Elles ne sont mises à jour que mensuellement. L'assistance technique est assurée par la communauté des utilisatrices sur le site de Questions-Répones Stackoverflow.
Récupérer les bases de données
Sous Debian, une version non actualisée de la base “pays” est souvent installée (paquetage geoip-database) car elle est utilisée par certains services.
Pour disposer des bases mises à jour sur son système :
# apt-get install geoip-database-contrib
geoip-database-contrib remplace geoip-database s'il est déjà installé et met en place une mise à jour périodique automatisée des bases.
Interroger les bases de données
Pour interroger ces bases en ligne de commande, il faut installer un paquetage supplémentaire :
# apt-get install geoip-bin
On dispose alors de deux commandes d'interrogation :
- geoiplookup
- geoiplookup6
Sous Debian-Jessie, voir aussi geoip-database-extra.
iplocation.net
Pour une utilisation ponctuelle via une interface web, iplocation.net permet non seulement d'obtenir “une” information de géolocalisation mais de comparer les résultats délivrés par plusieurs éditeurs de solutions.
Configurer Apache
sources :
- mod_geoip pour Apache 2, arsenic.org (fr).
- Ajouter la géolocalisation avec GeoIP (Debian), HowTo OVH (fr).
- http://example.com|Installing and using libapache2-mod-geoip on Debian, devops.zone, (en).
Pour exploiter GeoIP dans une application Web, une des solutions2) consiste à utiliser le module Apache ad hoc.
Pour cela il faut :
- installer le module Apache (si ce n'est pas déjà fait)
- activer le module dans la configuration d'Apache
- configurer le module pour qu'il exploite les bases de données téléchargées dans la section précédente.
Typiquement, les deux premières étapes correspondent aux commandes suivantes :
# apt-get install libapache2-mod-geoip # a2enmod geoip
L'activation du module ne suffit pas à disposer des données de localisation collectées, sauf si vous vous contentez de la configuration par défaut.
Dans notre cas, nous avons configuré GeoIP pour disposer de données plus précises (et mises à jour) que ce qu'offre l'installation par défaut. Nous devons donc configurer le module Apache geoip pour qu'il tire parti de ces données supplémentaires.
La troisième étape nécessitera donc d'éditer manuellement le fichier de configuration du module Apache /etc/apache2/mods-available/geoip.conf pour qu'il ressemble à ce qui suit :
<IfModule mod_geoip.c> GeoIPEnable On GeoIPScanProxyHeaders On GeoIPDBFile /usr/share/GeoIP/GeoIP.dat GeoIPDBFile /usr/share/GeoIP/GeoIPASNum.dat GeoIPDBFile /usr/share/GeoIP/GeoIPCity.dat GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat