[iptables]: Usar geoIP y Shorewall para bloquear paises

Y no, no es para hacer embargos! …

Preámbulo

Se estaba presentando el caso de un ataque de fuerza bruta contra un servidor públicamente visible, el ataque venía mayormente de China y Hong Kong y decidí, que sería interesante aprovechar las capacidades del módulo de xtables XT_GEOIP para ubicar una IP geográficamente con un porcentaje más o menos preciso.

Por ejemplo, GeoIPLookup (que hace uso de la base de datos de GeoIP), puede retornar la siguiente información:

geoiplookup 186.92.27.1
GeoIP Country Edition: VE, Venezuela

Lo cual resulta muy útil, ¿se podrá usar para bloquear tráfico desde países completos? …

Pre-requisitos

Los pre-requisitos son los siguientes:

  • Shorewall, versión 4.5 o superior
  • xtables-addons-common
  • libtext-csv-xs-perl (para procesar la base de datos de georeferencia).

Por ende, es simplemente instalar las dependencias y tener configurado Shorewall.

aptitude install xtables-addons-common libtext-csv-xs-perl

Creamos el directorio que requiere el módulo:

mkdir /usr/share/xt_geoip

Y montamos el módulo:

modprobe xt_geoip

Ahora, nos toca descargar la base de datos:

/usr/lib/xtables-addons/xt_geoip_dl

Veremos algo como:

root@proxy:/etc/shorewall# /usr/lib/xtables-addons/xt_geoip_dl
–2014-06-24 22:07:01– http://geolite.maxmind.com/download/geoip/database/GeoIPv6.csv.gz
Resolving geolite.maxmind.com (geolite.maxmind.com)… 108.168.255.243, 2607:f0d0:3:8::4
Connecting to geolite.maxmind.com (geolite.maxmind.com)|108.168.255.243|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 823979 (805K) [application/octet-stream]
Saving to: ‘GeoIPv6.csv.gz’
100%[====================================================================>] 823,979 91.0KB/s in 9.3s
2014-06-24 22:07:11 (86.9 KB/s) – ‘GeoIPv6.csv.gz’ saved [823979/823979]

Y por último, convertimos este CSV en una forma binaria empaquetada que requiere el módulo xt_geoip:

/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
1 IPv6 ranges for VC Saint Vincent and the Grenadines
23 IPv4 ranges for VC Saint Vincent and the Grenadines
38 IPv6 ranges for VE Venezuela
230 IPv4 ranges for VE Venezuela
0 IPv6 ranges for VG Virgin Islands, British
48 IPv4 ranges for VG Virgin Islands, British
2 IPv6 ranges for VI Virgin Islands, U.S.
47 IPv4 ranges for VI Virgin Islands, U.S.
32 IPv6 ranges for VN Vietnam
257 IPv4 ranges for VN Vietnam
5 IPv6 ranges for VU Vanuatu
14 IPv4 ranges for VU Vanuatu

Y ya estamos listos para hacer uso de esta base de datos en Shorewall.

Configurando Shorewall

Desde Shorewall 4.5 existe soporte para GeoIP y su uso es extremadamente fácil, por ejemplo, podemos agregar al archivo /etc/shorewall/rules la siguiente regla:

DROP net:^[CN,TW,JP] fw - -

Y estaríamos bloqueando (DROP) desde mi zona “Internet” (net) a China (CN), Taiwan (TW) y Japón (JP), con destino a mi firewall (fw) de absolutamente todo tráfico UDP y TCP.  el formato del país es ISO-3661.

Podríamos por ejemplo, aceptar pero con información (LOG) todo tráfico WEB reportado como IP de Venezuela:

ACCEPT:info              net:^[VE]        fw          tcp          80,443

Podemos bloquear todo tráfico que sea explicitamente declarado como un proxy anónimo (según las reglas de GeoIP):

DROP        net:^[A1,A2]                  fw              -             -

Y listo!, verifiquen sus reglas y disfruten!.

Conclusiones

Los 2 comandos de arriba para descargar la base de datos de GeoIP podemos meterlos en un script, que se ejecute mensualmente, con esto, el sistema se actualizaría solo:

vim /etc/shorewall/scripts/updategeoip.sh

#!/bin/bash
# update geoip database (xt_geoip)
/usr/lib/xtables-addons/xt_geoip_dl > /dev/null 2>&1
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv > /dev/null 2>&1
# refresh configuration
shorewall refresh &>/dev/null

hacerlo ejecutable:

chmod 0770 /etc/shorewall/scripts/updategeoip.sh

Y colocar un enlace simbólico en cron.monthly:

ln -s /etc/shorewall/scripts/updategeoip.sh /etc/cron.monthly/updategeoip.sh

Y ya tendríamos un Firewall que bloquea (con una precisión del 74%) todo acceso desde el gigante asiático.

 

 

Acerca de phenobarbital

http://about.me/phenobarbital

Publicado el 24 junio 2014 en Cultura Libre, Linux, PlanetaLinux, Software Libre y etiquetado en , , , , , . Guarda el enlace permanente. 5 comentarios.

  1. Freddy Taborda

    Hola Jesus, probando este material, siguiendo los pasos tengo este error:

    ERROR: A country-code require GeoIP Match in your kernel and iptables /etc/shorewall/rules (line 29)

    Linea 29: ACCEPT:info net:^[VE] fw tcp 8069

    ~# shorewall version
    4.5.5.3

    Buscando algo mas de soporte en google y shorewall veo que todo esta bien.

    Algun comentario.

    Saludos y gracias

    • No has descargado correctamente (y en el lugar indicado) las tablas de geoIP que requieren el módulo, o en su defecto, no has ejecutado modprobe xt_geoip …

      • Freddy Taborda

        Gracias por el comentario.

        Ya lo habia hecho, como lo puede observar, sigo revisando paso a paso para ver donde esta el error.

        # lsmod | grep xt_geoip
        xt_geoip 12591 0
        x_tables 19118 54 ip_tables,iptable_filter,xt_multiport,ipt_ULOG,iptable_mangle,iptable_nat,xt_state,xt_tcpudp,ipt_LOG,xt_AUDIT,xt_CLASSIFY,xt_connmark,xt_conntrack,xt_dccp,xt_dscp,xt_DSCP,xt_hashlimit,xt_helper,xt_iprange,xt_length,xt_limit,xt_mac,xt_mark,xt_NFLOG,xt_NFQUEUE,xt_owner,xt_physdev,xt_pkttype,xt_tcpmss,ip6_tables,xt_TPROXY,xt_set,ipt_ah,ipt_CLUSTERIP,ipt_ecn,ipt_ECN,ipt_MASQUERADE,ipt_NETMAP,ipt_REDIRECT,ipt_REJECT,xt_policy,xt_recent,compat_xtables,xt_ipp2p,xt_comment,iptable_raw,xt_addrtype,xt_realm,xt_connlimit,xt_time,xt_condition,xt_CT,xt_statistic,xt_geoip

        Saludos

  2. Freddy Taborda

    Problema resuelto, estaba omitiendo un paso (habia un error que no habia visto, al descomprmir el archivo), todo funciona excelente. Muchas gracias por ta buen material.

  1. Pingback: Iptables con geoIP | Linux Trucupei Blog

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: