Script de mise à jour auto des bases de GeoIP
Parce qu'on aime tous regarder les petits drapeaux et la provenance des peers sur nos box, histoire de voyager un peu sans rester trop longtemps loin de nos consoles. 
Autant que nos bases de plage d'IP soit à jour. Maxmind qui fournit ces infos à GeoIP les mets à jour le 1er mardi du mois.
Voilà un script trouvé je ne sais plus du tout où qui va se charger de les récupérer automatiquement.
Donc c'est parti !
Créer un dossier pour le script :
mkdir /usr/share/mes-scripts
On se déplace à l'intérieur :
cd /usr/share/mes-scripts
On créer le script :
nano /usr/share/mes-scripts/updateGeoIP.sh
Et coller :
#!/bin/bash
#
# GeoIP Databases Update
# Version 1.1
#
# updateGeoIP.sh
#
# SID Solutions
# http://sidsolutions.net
# Copyright (c) 01/13/2008
# Programmed by Sid McLaurin
#
# Adpated for Apache & regular Debian folders by kent1
#
# Description:
#
# Script to update all GeoIP databases
#
# Location:
#
# /opt/scripts/
#
# Changes:
# 01/02/2009 - Create an URL for the new location of the
# GeoIP.dat
# 20/07/2009 - Adaptation forApache & regular Debian
# folders by kent1
# Variables
URL=http://www.maxmind.com/download/geoip/database/
NUMURL=http://www.maxmind.com/download/geoip/database/asnum/
COUNTRYURL=http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/
GEODBS=( "GeoIP.dat.gz" "GeoLiteCity.dat.gz" "GeoIPASNum.dat.gz" )
GEOPATH=/usr/share/GeoIP
GEOUSER=root
GEOGROUP=root
echo -e "\n\033[1;32m\tStarting GeoIP Database Update\n \033[0m"
# Change to GeoIP database directory
cd $GEOPATH
# Delete previous database
echo -e "\033[1;33mRemoving previous databases\033[0m ...............\c"
/bin/rm -f Geo*dat
echo -e "\033[1;32m Done!\n \033[0m"
# Get new databases
echo -e "\033[1;31mDownloading databases\n\033[0m"
for GEODB in ${GEODBS[@]}
do
echo -e "\tDownloading \033[1;33m"$GEODB"\033[0m ..........\c"
if [ $GEODB = "GeoLiteCity.dat.gz" ]
then
/usr/bin/wget $URL$GEODB > /dev/null 2>&1
elif [ $GEODB = "GeoIPASNum.dat.gz" ]
then
/usr/bin/wget $NUMURL$GEODB > /dev/null 2>&1
else
/usr/bin/wget $COUNTRYURL$GEODB > /dev/null 2>&1
fi
echo -e "\033[1;32m Done!\n \033[0m"
done
# Deflate new databases
echo -e "\033[1;31mDeflating databases\n\033[0m"
for GEODB in ${GEODBS[@]}
do
echo -e "\tDeflating \033[1;33m"$GEODB"\033[0m ............\c"
/bin/gunzip $GEODB
echo -e "\033[1;32m Done!\n \033[0m"
done
# Set permissions
if [ "$GEOUSER" != "" ] || [ "$GEOGROUP" != "" ];
then
echo -e "\033[1;31mSetting permissions\n\033[0m"
fi
# Set user permissions
if [ "$GEOUSER" != "" ]
then
echo -e "\033[1;33m\tSetting user permissions to "$GEOUSER"\033[0m .........\c"
/bin/chown -R $GEOUSER $GEOPATH
echo -e "\033[1;32m Done!\n \033[0m"
fi
# Set group permissions
if [ "$GEOGROUP" != "" ]
then
echo -e "\033[1;33m\tSetting group permissions to "$GEOGROUP"\033[0m ........\c"
/bin/chgrp -R $GEOGROUP $GEOPATH
echo -e "\033[1;32m Done!\n \033[0m"
fi
echo -e "\033[1;31mTweak City Plugin GeoIP\n\033[0m"
# Tweak City Plugin GeoIP
echo -e "\033[1;33m\tCopy GeoIPLiteCity GeoIPCity\033[0m ........\c"
cd /usr/share/GeoIP
cp GeoLiteCity.dat GeoIPCity.dat
echo -e "\033[1;32m Done!\n \033[0m"
# Done!
echo -e "\033[1;32m\tGeoIP Database update completed!\n \033[0m"
On rend le script exécutable :
chmod +x updateGeoIP.sh
A ce niveau on peut faire un test pour voir si tout est ok :
bash /usr/share/mes-scripts/updateGeoIP.sh
On va maintenant ajouter une tache cron pour que le script s'exécute à 2h30 le 9 de chaque mois :
( vous pouvez modifier l'heure mais gardez la date du 9 )
crontab -e
Et coller à la fin :
30 2 9 * * bash /usr/share/mes-scripts/updateGeoIP.sh > /dev/null 2>&1
Voilà on a fini et on aura plus à s'en soucier.
Ex.
Note: J'ai l'habitude de mettre mes scripts dans /usr/share/mes-scripts/, pas sûr que ce soit vraiment leurs places mais ça ne pose pas de problème. 