GeoIP es una base de datos de consulta de localizaciones IP, que dispone de múltiples lenguajes de programación para el acceso a los datos, desde php a python y como no iba a ser menos, también desde la shell de Linux se permiten las preguntas acerca de dónde es una IP concreta.
Lo primero que necesitamos, teniendo en cuenta que partimos de un sistema con geoip-database instalado, es instalar el binario para poder consultar los datos del fichero. Esto nos ofrecerá ya el software que vamos a emplear, geoiplookup y geoiplookup6, por si empleamos IPv6. Tanto la instalación como el uso es bastante sencillo e intuitivo. El paquete está en los repositorios de las principales distribuciones y el uso, simplemente necesitamos la IP de la que deseamos obtener la información.
shell> apt-get install geoip-bin
shell> geoiplookup 77.226.X.Y
GeoIP Country Edition: ES, Spain
Esta base de datos enorme de localizaciones está creada y mantenida por
MaxMind, empresa que ofrece una versión "
lite" (libre) y otra de pago.
En el caso de
Debian Wheezy o la última
Ubuntu (14.04), la versión de base de datos que trae es del 2013-08-27. Si por el contrario tenemos una
Debian Squeeze, la versión es mucho más antigua, 2010-07-14, por lo que los datos que ahí aparecen pueden no ser del todo correctos. Por lo tanto, antes de ponernos a trabajar, debemos de actualizar las bases de datos. Para ello, recurrimos a la
página oficial. Descargamos el fichero
GeoLite Country y
GeoLite City. El primero para actualizar el que ya tenemos y el segundo, para tener una mayor definición. Tras descargar ambos ficheros, los descomprimimos y los colocamos en el sitio oficial.
shell> cd ~/Descargas
shell> wget http://geolite.maxmind.com/GeoLiteCountry/GeoIP.dat.gz
shell> wget http://geolite.maxmind.com/GeoLiteCity.dat.gz
shell> gunzip GeoIP.dat.gz
shell> gunzip GeoLiteCity.dat.gz
shell> mv ~/Descargas/GeoIP.dat /usr/share/GeoIP/GeoIP.dat
shell> mv ~/Descargas/GeoLiteCity.dat /usr/share/GeoIP/GeoLiteCity.dat
Ahora ya tenemos una base de datos más completa y actualizada. Aunque nos faltarán datos, puesto que no pagamos la suscripción, sí es más moderna que la que trae el paquete.
Si ahora hacemos la misma prueba que antes, pero indicándole que emplee el fichero de localización por ciudad, tenemos lo siguiente,
shell> geoiplookup -f /usr/share/GeoIP/GeoLiteCity.dat 77.226.X.Y
GeoIP City Edition, Rev 1: ES, 58, Galicia, Orense, N/A...
Vemos que esta información ya es mucho más útil. No es lo mismo saber que alguien está en España, que que ese alguien está de Orense.
Aunque la integración con php, páginas web o cms no la voy a comentar, sí es bueno comentar la utilidad práctica de este comando, por ejemplo, para comprobar las IPs que consultan una determinada página web. Leyendo los logs de apache, ante un eventual ataque, podemos saber rápidamente de dónde provienen dichas peticiones. Así que con un poco de magia de scripting, tenemos algo tal que así,
for ip in `cat /var/log/apache/access.log | awk '{print $1}' | sort -n | uniq`
do
echo -ne "$ip\t"
geoiplookup -f /usr/share/GeoIP/GeoLiteCity.dat $ip
done
Donde el resultado es similar al que sigue,
222.77.229.X GeoIP City Edition, Rev 1: CN, 22, Beijing, Beijing, N/A...
222.77.242.X GeoIP City Edition, Rev 1: CN, 07, Fujian, Fuzhou, N/A...
222.79.153.X GeoIP City Edition, Rev 1: CN, 07, Fujian, Fuzhou, N/A...
222.87.129.X GeoIP City Edition, Rev 1: CN, 18, Guizhou, Guiyang, N/A...
223.219.152.X GeoIP City Edition, Rev 1: JP, 40, Tokyo, Tokyo, N/A...
223.240.142.X GeoIP City Edition, Rev 1: CN, 01, Anhui, Hefei, N/A...
223.27.200.X GeoIP City Edition, Rev 1: TH, 60, Surat Thani, Vibhavadi...
Puesto que estamos trabajando con la versión "lite", algunas de las IPs no están incluidas o actualizadas, pero para hacernos una idea general nos sirve.