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) :

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 (aka GeoIP) désigne une gamme de produits et services proposés par l'éditeur MaxMind.

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.

Il se peut qu'il faille préalablement installer une clé d'authentification par création du fichier /etc/GeoIP.conf, en suivant les indications de mise à jour (pour GeoLite2).

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 :

Au cas où un doute subsisterait, à la différence de nslookup (qui interroge les DNS), ces commande n'interrogent pas le service GeoIP, mais la copie locale des bases de données.

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 :

Pour exploiter GeoIP dans une application Web, une des solutions2) consiste à utiliser le module Apache ad hoc.

Pour cela il faut :

  1. installer le module Apache (si ce n'est pas déjà fait)
  2. activer le module dans la configuration d'Apache
  3. 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 :

La configuration ci-après n'a pas encore été testée !
<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
1)
Le point de vue d'un expert : The Problem of Geolocation Accuracy.
2)
On peut aussi s'appuyer sur des composants propres au langage ou framework utilisé pour développer l'application, tel que des modules PHP spécifiques.