====== 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 raisons((Le point de vue d'un expert : [[http://dyn.com/blog/new-dns-geolocation-map-for-traffic-director/|The Problem of Geolocation Accuracy]].)) :
* 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 =====
[[https://www.maxmind.com/en/geoip2-services-and-databases|GeoIP2]] (aka GeoIP) désigne une gamme de produits et services proposés par l'éditeur [[https://www.maxmind.com/|MaxMind]].
==== GeoIP2 démo ====
Pour une interrogation ponctuelle et limitée, on peut utiliser le [[https://www.maxmind.com/fr/geoip-demo|service en ligne]] de démonstration (gratuit) de //GeoIP2 City//.
==== GeoLite2 : produit gratuit ====
[[http://dev.maxmind.com/geoip/geoip2/geolite2/|GeoLite2]] est une version gratuite de bases de données de localisation. On peut les télécharger et les utiliser gratuitement, sous licence [[http://creativecommons.org/licenses/by-sa/3.0/|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// [[http://stackoverflow.com/questions/tagged/geoip|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
[[https://packages.debian.org/wheezy/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 [[http://dev.maxmind.com/geoip/geoipupdate/|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 :
* geoiplookup
* geoiplookup6
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 [[https://packages.debian.org/jessie/geoip-database-extra|geoip-database-extra]].
===== iplocation.net =====
Pour une utilisation ponctuelle via une interface web, [[http://www.iplocation.net/|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 :
* [[https://technique.arscenic.org/lamp-linux-apache-mysql-php/apache/modules-complementaires/article/mod_geoip-pour-apache-2|mod_geoip pour Apache 2]], arsenic.org (fr).
* [[http://www.how-to.ovh/viewtopic.php?t=6|Ajouter la géolocalisation avec GeoIP (Debian)]], HowTo OVH (fr).
* [[http://www.devops.zone/webserver/libapache2-mod-geoip-debian/|http://example.com|Installing and using libapache2-mod-geoip on Debian]], devops.zone, (en).
* [[http://piwik.org/faq/how-to/faq_165/|How do I install the GeoIP module for Apache for accurate Geo location data?]], FAQ Piwik (en).
Pour exploiter GeoIP dans une application Web, une des solutions((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.)) 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 :
La configuration ci-après n'a pas encore été testée !
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