Iptables com módulo GEOIP para bloqueio de Países
Autor: Thiago Laurito | Publicado: 2012-04-22T00:04:00-03:00

Neste artigo irei demonstrar como adicionar o módulo GeoIP para trabalhar em conjunto com Iptables.

Através dele você pode estar bloqueando ranges de ip por origem.

Efetue o Download dos Builds:

http://download.sourceforge.net/xtables-addons/xtables-addons-1.39.tar.xz

http://slackbuilds.org/slackbuilds/13.37/network/xtables-addons.tar.gz

Com o comando whereis vamos localizar o diretório que se encontra os scripts necessários para o términa da configuração:

root@boot-v1:~# whereis xtables-addons
xtables-addons: /usr/libexec/xtables-addons /usr/man/man8/xtables-addons.8.gz /usr/share/man/man8/xtables-addons.8.gz /usr/X11/man/man8/xtables-addons.8.gz

O diretório que vamos localizar os scripts é o /usr/libexec/xtables-addons

root@boot-v1:/usr/libexec/xtables-addons# ls
xt_geoip_build*&nbsp; xt_geoip_dl*

O script xt_geoip_dl é responsavel pelo download das listas que o iptables vai utilizar para o bloqueio de países.

root@boot-v1:/usr/libexec/xtables-addons# ./xt_geoip_dl 

Agora vamos a conversão desta lista para que o iptables consiga utilizá-la corretamente:

root@boot-v1:/usr/libexec/xtables-addons# ls
GeoIPCountryCSV.zip&nbsp; GeoIPCountryWhois.csv&nbsp; GeoIPv6.csv&nbsp; xt_geoip_build*&nbsp; xt_geoip_dl*

root@boot-v1:/usr/libexec/xtables-addons# ./xt_geoip_build GeoIPCountryWhois.csv 

Vamos utilizar também os blocos em IPV6:

root@boot-v1:/usr/libexec/xtables-addons# ./xt_geoip_build GeoIPv6.csv

Após a execução vamos criar um diretório para onde vamos mover a Database que acabamos de gerar:


mkdir -p /usr/share/xt_geoip/



cp -r {BE,LE} /usr/share/xt_geoip/



Agora já pode visualizar o módulo funcionando com o comando:



root@boot-v1:~# iptables -m geoip --help | more
iptables v1.4.10

Usage: iptables -[AD] chain rule-specification [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iptables -I chain [rulenum] rule-specification [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iptables -R chain rulenum rule-specification [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iptables -D chain rulenum [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iptables -[LS] [chain [rulenum]] [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iptables -[FZ] [chain] [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iptables -[NX] chain
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iptables -E old-chain-name new-chain-name
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iptables -P chain target [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iptables -h (print this help information)

Em IPV6 também pode ser utilizado:


root@boot-v1:~# ip6tables -m geoip --help | more
ip6tables v1.4.10

Usage: ip6tables -[AD] chain rule-specification [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ip6tables -I chain [rulenum] rule-specification [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ip6tables -R chain rulenum rule-specification [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ip6tables -D chain rulenum [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ip6tables -[LS] [chain [rulenum]] [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ip6tables -[FZ] [chain] [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ip6tables -[NX] chain
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ip6tables -E old-chain-name new-chain-name
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ip6tables -P chain target [options]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ip6tables -h (print this help information)

Segue exemplo:

O exemplo abaixo estou bloqueando qualquer range da China com o rigem ao meu servidor no protocolo IPV4:


iptables -I INPUT -m geoip --src-cc CN -j DROP