GeoIp Nginx
De ICEnetX Docs
Geo IP
GeoIP es una herramienta para identificar de que país viene el trafico de un sitio. Esta aplicación puede ayudar a localizar los visitantes, para ofrecer de esta manera por ejemplo mejor publicidad, o para hacer la transferencia de archivo más rápida, además de detectar el fraude en línea. GeoIP es una base de datos que recoge las direcciones de IP de países, ciudades y de proveedores de Internet (ISP), que se enlazan con los LGPLed APIs para tener acceso a esta desde varios lenguajes, en este caso nos enfocaremos a su integración con awstats, herramienta para generar estadisticas que esta escrita en perl, vamos a trabajar sobre Debian Linux. La licencia de esta base de datos es abierta y libre de uso.
Instalamos las librerias necesarias
apt-get install libgeoip1 libgeoip-dev geoip-bin
Descargamos, compilamos e instalamos el modulo en perl del geoip.
# wget http://www.maxmind.com/download/geoip/api/perl/Geo-IP-1.27.tar.gz # tar -xvzf Geo-IP-1.27.tar.gz # cd Geo-IP-1.27 # perl Makefile.PL # make # make test # make install
El paquete de GeoIP de debian nos instala únicamente la base de datos de países pero no la de ciudades, descargaremos ambas para tener la ultima versión:
# cd /usr/share/GeoIP # wget http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz # wget http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz # gzip -d GeoIP.dat.gz # gzip -d GeoLiteCity.dat.gz
Awstats
Una vez instalado GeoIP procedemos a instalar y configurar awstats, procedemos a instalarlo:
# apt-get install awstats
Sera necesario crear un archivo de configuración por cada sitio del cual queremos generar estadisticas, awstats necesita acceso a los archivos de logs y ser corrido desde cron cada X tiempo para actualizar los estados. Para configurar un sitio necesitamos copiar el template del archivo de configuración, todos los archivos de configuración deben seguir el patró awstats.sitio.com.conf
# cp /etc/awstats/awstats.conf /etc/awstats/awstats.sitio.com.conf
Bien, ahora necesitamos configurar un par de variable basicas dentro de este archivo, estas variables controlan la ruta al archivo de log, el tipo de log a procesar (W para web, M para mail, F para ftp ...), el tipo de log (1 para apache, 2 para IIS ...), el nombre del sitio y los alias y la ruta al archivo del plugin de GeoIP.
LogFile="/var/log/httpd/access_log" LogType=W LogFormat=1 SiteDomain="sitio.com" HostAliases="localhost 127.0.0.1 sitio.com" LoadPlugin="geoip GEOIP_STANDARD /usr/share/GeoIP/GeoIP.dat"
Una vez hecho esto sera necesario correr awstats para generar las estadísticas, la forma de hacerlo es la siguiente, recomiendo agregarla a scripts de cron con el comando crontab -e desde root, el primero actualiza la base de datos de awstats, el segundo nos genera una salida en HTML que podemos utilizar.
# perl /home/awstats/awstats.pl -config=www.sitio.com -update # perl /home/awstats/awstats.pl -config=www.sitio.com -output -staticlinks > /home/htdocs/sitio.html
Integración con NGINX Web Server
Nginx nos ofrece el modulo ngx_http_geo_module para trabajar con GeoIP, por cuestiones de diseño, las bases de datos de GeoIP estan formados por registros de esta forma:
"222.252.0.0","222.255.255.255","3741057024","3741319167","VN","Vietnam"
Nginx no puede trabajar con este tipo de registros, de nuevo hay que liarse para hacerlo trabajar. Existe para esto un script en perl que nos convertirá cada una de estas lineas en el archivo de bases de datos de GeoIP en registros similares a este:
222.252.0.0/14 VN;
Nginx si puede trabajar con estos. Para lograrlo debemos bajar la base de datos SCV de http://www.maxmind.com y correr el script en perl geo2nginx.pl que acompaña al código fuente de nginx en la carpeta contrib/ con este generaremos el archivo que necesitamos:
# wget http://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip # unzip GeoIPCountryCSV.zip # cat GeoIPCountryWhois.csv |perl -w geo2nginx.pl > geoip.nginx # mkdir /etc/nginx/geoip/ # mv geoip.nginx /etc/nginx/geoip
Ahora procederemos a configurar el modulo de nginx con la nueva base de datos de geoip. Esto debe ser agregado en el archivo nginx.conf antes de la directiva server:
geo $country {
default no;
include /etc/nginx/geoip/geoip.nginx;
}
