Documentation technique : Debian
Documentation basée sur la distribution Debian

> > > > mod_geoip pour Apache 2

mod_geoip pour Apache 2

Le module GeoIp pour apache2 est un module permettant de connaitre une géolocalisation approximative des visiteurs. Il est basé sur les base de données de MaxMind. Certaines sont gratuites, d’autres payantes. Ici nous allons expliquer comment utiliser les bases de données gratuites.

Installation des paquets

Dans un premier temps, on installera les paquets nécessaires grâce à apt :

  1. sudo apt-get install geoip-bin libapache2-mod-geoip libgeoip1

Activation du module

Pour activer dans la configuration d’Apache le nouveau module, il suffira de lancer cette commande :

  1. sudo a2enmod geoip

On pourra le désactiver tout aussi simplement avec la commande suivante :

  1. sudo a2dismod geoip

Il est ensuite nécessaire de redémarrer le serveur Apache pour le prendre en considération :

  1. /etc/init.d/apache2 restart

Le module est automatiquement configuré par le fichier /etc/apache2/mods-available/geoip.conf dont le contenu est :

  1. <IfModule mod_geoip.c>
  2.   GeoIPEnable On
  3.   #GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
  4. </IfModule>

Télécharger

Ici la directive GeoIPDBFile est commentée, s’il est actif le module utilisera la base de donnée standard qui se trouve à l’endroit /usr/share/GeoIP/GeoIP.dat. Si vous souhaitez utilisez une autre base il suffit donc de décommenter et de modifier la directive GeoIPDBFile (voir la suite pour les explications sur les bases de données).

Les bases de données

Les bases de données utilisées par le module sont par défaut dans le répertoire /usr/share/GeoIP/.

Il y a plusieurs bases de données utilisables :

Mise à jour des bases de données

Afin de tenir ces bases de données à jour, il suffit de les récupérer sur le serveur de Maxmind, les décompresser et les copier dans le répertoire /usr/share/GeoIP. Cette tâche est longue, fastidieuse et on doit y penser régulièrement pour tenir son système à jour.

La solution est d’utiliser un script updateGeoIP.sh qui rend automatique ce travail à intervalle régulier (en Cron).

On va dans un premier temps créer un répertoire /opt/scripts qui nous sert de répertoire de scripts personnels (vous pouvez les mettre où bon vous semble) :

  1. sudo mkdir -p /opt/scripts/

Voici une adaptation du script de Sid McLaurin trouvé au hasard du net.

On ouvre le fichier updateGeoIP.sh :

  1. sudo nano /opt/scripts/updateGeoIP.sh

Et on y colle les lignes suivantes :

  1. #!/bin/bash
  2. #
  3. # GeoIP Databases Update
  4. # Version 1.1
  5. #
  6. # updateGeoIP.sh
  7. #
  8. # SID Solutions
  9. # Copyright (c) 01/13/2008
  10. # Programmed by Sid McLaurin
  11. #
  12. # Adpated for Apache & regular Debian folders by kent1
  13. #
  14. # Description:
  15. #
  16. # Script to update all GeoIP databases
  17. #
  18. # Location:
  19. #
  20. # /opt/scripts/
  21. #
  22. # Changes:
  23. # 01/02/2009 - Create an URL for the new location of the
  24. # GeoIP.dat
  25. # 20/07/2009 - Adaptation forApache & regular Debian
  26. # folders by kent1
  27.  
  28. # Variables
  29. URL=http://www.maxmind.com/download/geoip/database/
  30. NUMURL=http://www.maxmind.com/download/geoip/database/asnum/
  31. COUNTRYURL=http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/
  32.  
  33. GEODBS=( "GeoIP.dat.gz" "GeoLiteCity.dat.gz" "GeoIPASNum.dat.gz" )
  34. GEOPATH=/usr/share/GeoIP
  35. GEOUSER=www-data
  36. GEOGROUP=www-data
  37.  
  38. echo -e "\n\033[1;32m\tStarting GeoIP Database Update\n  \033[0m"
  39.  
  40. # Change to GeoIP database directory
  41. cd $GEOPATH
  42.  
  43. # Delete previous database
  44. echo -e "\033[1;33mRemoving previous databases\033[0m ...............\c"
  45. /bin/rm -f Geo*dat
  46. echo -e  "\033[1;32m Done!\n \033[0m"
  47.  
  48. # Get new databases
  49. echo -e "\033[1;31mDownloading databases\n\033[0m"
  50.  
  51. for GEODB in ${GEODBS[@]}
  52. do
  53.  
  54.   echo -e "\tDownloading \033[1;33m"$GEODB"\033[0m ..........\c"
  55.   if [ $GEODB = "GeoLiteCity.dat.gz" ]
  56.     then
  57.        /usr/bin/wget $URL$GEODB > /dev/null 2>&1
  58.  
  59.   elif [ $GEODB = "GeoIPASNum.dat.gz" ]
  60.     then
  61.       /usr/bin/wget $NUMURL$GEODB > /dev/null 2>&1
  62.  
  63.   else
  64.       /usr/bin/wget $COUNTRYURL$GEODB > /dev/null 2>&1
  65.   fi
  66.   echo -e  "\033[1;32m Done!\n \033[0m"
  67.  
  68. done
  69.  
  70. # Deflate new databases
  71. echo -e "\033[1;31mDeflating databases\n\033[0m"
  72.  
  73. for GEODB in ${GEODBS[@]}
  74. do
  75.  
  76.   echo -e "\tDeflating \033[1;33m"$GEODB"\033[0m ............\c"
  77.   /bin/gunzip $GEODB
  78.   echo -e  "\033[1;32m Done!\n \033[0m"
  79.  
  80. done
  81.  
  82. # Set permissions
  83. if [ "$GEOUSER" != "" ] || [ "$GEOGROUP" != "" ];
  84. then
  85.   echo -e "\033[1;31mSetting permissions\n\033[0m"
  86. fi
  87.  
  88. # Set user permissions
  89. if [ "$GEOUSER" != "" ]
  90. then
  91.   echo -e "\033[1;33m\tSetting user permissions to "$GEOUSER"\033[0m .........\c"
  92.   /bin/chown -R $GEOUSER $GEOPATH
  93.   echo -e  "\033[1;32m Done!\n \033[0m"
  94. fi
  95.  
  96. # Set group permissions
  97. if [ "$GEOGROUP" != "" ]
  98. then
  99.   echo -e "\033[1;33m\tSetting group permissions to "$GEOGROUP"\033[0m ........\c"
  100.   /bin/chgrp -R $GEOGROUP $GEOPATH
  101.   echo -e  "\033[1;32m Done!\n \033[0m"
  102. fi
  103.  
  104. # Done!
  105. echo -e "\033[1;32m\tGeoIP Database update completed!\n \033[0m"

Télécharger

Son utilisation est simple, après avoir récupéré le script, placez le dans le répertoires que vous souhaitez (Pour retrouver facilement vos scripts personnels, placez les dans un répertoire facile à retrouver /opt/scripts/ par exemple).

Donnez lui les droits d’exécution de la sorte :

  1. sudo chmod +x /opt/scripts/updateGeoIP.sh

Pour le tester il vous suffit de lancer la commande (en vous plaçant dans le répertoire où est situé le script) :

  1. bash /opt/scripts/updateGeoIP.sh

Les nouvelles bases de données devraient être téléchargées et mises en place. Pour le vérifier faites :

  1. ls -lsa /usr/share/GeoIP

Les dates de fichiers doivent correspondre à la date de la dernière modification de la base de données (soit le mois en cours au moins pour GeoLite City et GeoLite Country).

Pour automatiser cette mise à jour, il faut créer la tache cron adéquate en faisant :

  1. sudo crontab -e

Cette commande doit ouvrir le fichier des taches cron avec votre éditeur par défaut, ajoutez y cette ligne :

  1. 0 5 15 * * /opt/scripts/updateGeoIP.sh > /dev/null 2>&1

Cette ligne signifie pour simplifier, on exécute le script /opt/scripts/updateGeoIP.sh qu’on ne logue pas (> /dev/null) n’importe quel jour de la semaine, tous les mois (première étoile) le 15 de chaque mois, à 5h00 (voir cet article pour plus de précision).

Ainsi vos base de donnée de géolocalisation resteront à jour chaque mois.

Modification de la configuration Apache

Après avoir récupéré les bases de données, on peut vouloir utiliser la base des villes afin d’avoir de meilleurs informations. Le plugin GeoIP de Piwik le nécessite par exemple sinon les visiteurs ont comme ville la valeur "Unknown".

Pour cela il suffit de modifier le fichier de configuration de GeoIP pour Apache :

  1. sudo nano /etc/apache2/mods-available/geoip.conf

Puis de remplacer son contenu par :

  1. <IfModule mod_geoip.c>
  2.   GeoIPEnable On
  3.   GeoIPDBFile /usr/share/GeoIP/GeoLiteCity.dat
  4. </IfModule>

Télécharger

Puis de recharger la configuration d’apache par :

  1. sudo /etc/init.d/apache2 force-reload

Cas d’utilisation de GeoIP

  • GeoIP est principalement utilisé par les outils de statistiques par exemple :
    • AWStats : analyseurs de fichiers de logs pour Apache / FTP / mail
    • Piwik : outil d’analyse de fréquentation web par tracker javascript. En utilisant le plugin adéquat

Articles connexes

  • Auteur :
  • Publié le :
  • Mis à jour : 11/09/16

2 commentaires


Qui êtes-vous ?
[Se connecter]
Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.