30 agosto 2012

Apache + mod_geoip = WIN

Personalmente, soy muy fan de la geolocalización como medida de seguridad a la hora de implementar servicios en Internet, de hecho, hace un tiempo presenté un boceto de 'GEO Ips' como herramienta para filtrar conexiones basadas en su procedencia geográfica.

Hoy voy a hablar de un módulo para Apache que, entre otras cosas, permite establecer controles de acceso basados en la procedencia de la conexión.

El objetivo es 'banear' unos cuantos países para que no puedan acceder al contenido de un servidor web.

Para ello, vamos a usar mod_geoips, creado por MaxMind, empresa muy famosa por liberar bases de datos de IPs y su procedencia geográfica.

Los ejemplos de este post se han llevado a cabo en una distribución Linux CentOS 6 pero son fácilmente adaptables a cualquier otra distribución.

Paso 1: Instalar las librerías GeoIP

# wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz
# tar -xvzf GeoIP.tar.gz
# cd  GeoIP-1.4.8
# ./configure
# ./make
# ./make install

Con esto, habremos instalado las librerías sobre las que se apoya mod_geoips

Paso 2: Descargar la base de datos de IPs

# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# gzip -d GeoLiteCity.dat.gz
# cp GeoLiteCity.dat /opt/

Es conveniente descargar con cierta frecuencia esta base de datos ya que se va actualizando, se puede crear un trabajo en Cron para que lo haga cada mes, por ejemplo.

Paso 3: Instalar mod_geoips

# wget http://www.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.7.tar.gz
# tar -xvzf mod_geoip2_1.2.7.tar.gz
# cd  mod_geoip2_1.2.7
# apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c

NOTA: Para poder ejecutar el último comando es necesario tener instalado el paquete httpd-devel que provee el comando 'apxs'

Ahora, configuramos httpd.conf añadiendo lo siguiente:

<IfModule mod_geoip.c>
  GeoIPEnable On
  GeoIPDBFile /opt/GeoLiteCity.dat

</IfModule>

Paso 4: Configurar los bloqueos

Supongamos que no tenemos excesivo interés en recibir visitas desde China o Rusia en nuestro servidor web, para establecer un bloqueo a esos países, creamos un fichero .htaccess en la raíz del árbol html de nuestro servidor web de la siguiente forma:

SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry

Deny from env=BlockCountry

Y et voilà ! ya tenemos configurado nuestro servidor Apache para rechazar conexiones que provengan de China (CN) y Rusia (RU), como se puede ver, resulta muy fácil añadir mas países a la lista de 'castigados'.

9 comments :

josemari dijo...

GRANDE!!!! Por mucho que leia las instrucciones no era capaz de instalarlo. Ahora gracias a ti GRANDE, listo, ya funciona! Lo ideal seria ahora poder banear las IPs procedente de un pais que vayan a traves de tor o un proxy

José A. Guasch dijo...

Puedes conocer si una IP se encuentra tras un nodo TOR o no utilizando, por ejemplo, esta librería
https://blog.torproject.org/blog/torbel-tor-bulk-exit-list-tools que sustituye a la anterior TorDNSEL

dario90 dijo...

¿Para vos esta bien que banee paises enteros de una pagina web? Es una practica cada ves mas comun pero al mismo tiempo xenofobica. Ya me da mucha bronca cuando no puedo ver un video en YouTube porque dice que "no esta disponible para tu pais", y ni hablar ahora que cuando intento entrar a http://www.hackforums.net me dice:
"Your IP address based on the country, region or network has been flagged by the website owner."

¿imaginense si Taringa se le cantara banear todas las IP españolas un dia? ¿no les daria rabia que una web que suelen usar un dia meta a todos los españoles en la misma bolsa y los banee?

Ademas de que ya seguro conocen los casos de juegos MMORPG que banean a toda latinoamerica por ejemplo, para que se den una idea hasta donde pueden llegar esas practicas.

dario90 dijo...

¿Para vos esta bien que banee paises enteros de una pagina web? Es una practica cada ves mas comun pero al mismo tiempo xenofobica. Ya me da mucha bronca
cuando no puedo ver un video en YouTube porque dice que "no esta
disponible para tu pais", y ni hablar ahora que cuando intento entrar a www .hackforums. net me dice:

"Your IP address based on the country, region or network has been flagged by the website owner."



¿imaginense si Taringa se le cantara banear todas las IP españolas un
dia? ¿no les daria rabia que una web que suelen usar un dia meta a todos
los españoles en la misma bolsa y los banee?



Ademas de que ya seguro conocen los casos de juegos MMORPG que banean a
toda latinoamerica por ejemplo, para que se den una idea hasta donde
pueden llegar esas practicas.

Yago Jesus dijo...

Uno de los pilares de la seguridad informática se basa en restringir accesos, es la base de los Firewalls (bloquea aquellos puertos que no deben ser usados o añade reglas para IPs concretas)

Bajo mi punto de vista esto de bloquear países es exactamente lo mismo, piensa en una tienda de flores que solo sirve encargos para Buenos Aires, ¿Necesita esa web visitas de Irán? ¿De China? Yo creo que no, independientemente de que sean visitas 'buenas' o 'malas', simplemente es que no son necesarias y por tanto deben ser bloqueadas.

German dijo...

Indudablemente hay una cuestión ética pero también hay que aplicar un poco de criterio sobre cada caso, como ocurre con el ejemplo de la florería de Buenos Aires y creo que los rusos o los chinos no lamentarían no tener acceso a mi blog personal donde escribo pavadas en idioma castellano.

txalin dijo...

Yago, sabes si hay estadisticas por ahi de la penalizacion del rendimiento al instalar este mod de apache? Es un tema que me interesa mucho.

Yago Jesus dijo...

No, no he visto nada en la página del proyecto. No obstante, es un módulo escrito en C, en función de como gestione las búsquedas en la bd, no debería ser muy agresivo con el consumo ...

Yomijmoconmiorganijmo dijo...

Gracias, no conocía mod_geoip, me va a ser muy útil para bloquear a los spammers chinos en mi blog, cada vez más cargantes.

Lo que dicen de xenofobia y de prohibir el acceso a sitios desde latinoamérica, no es que esté de acuerdo, pero puedo entenderlo en ciertos casos, por ejemplo, de los juegos online, si no se comercializa el juego desde allí y hay altas tasas de piratería. Ya digo, no estoy de acuerdo, pero lo entiendo.

Otra cosa es la experiencia que conocemos de muchos foros de "halludenme a jaquear jotmeil mi correo es soymuycargante@hotmail.tld grasias de antebraso" y que puede ser que cómo comentan "les toque la fibra sensible" a más de una web que decida utilizar este módulo, pero hay muchas webs en el océano y una web que haga eso, no merece ser visitada por ese país que seguro que tiene otras personas expertas que podrán montar una web de la misma temática pero mejor que al dejar entrar a todo el mundo, sea más visitada.