linux_netfilter-logo-120x120

O netfilter oferece, nativamente, uma gama de extensões poderosas. Mas, é possível incluir também o suporte a extensões adicionais (não oficiais), como: geoip (filtragem por geo referência), ipp2p (detecção de aplicativos peer-to-peer) e/ou TARPIT (inviabiliza uma conexão – descarta manipulando o tamanho da janela TCP), por exemplo.

Ao contrário do que costuma ser dito, não é preciso recompilar kernel. No entanto, como as extensões são módulos de kernel, será necessária a existência de bibliotecas essenciais de desenvolvimento e pacote linux-headers – durante a instalação, os módulos (apenas) serão compilados automaticamente.

Não é um processo manual! 😉

– Em “distribuições Debian“, a instalação básica pode ser feita com os seguintes comandos:

sudo apt-get install build-essential
sudo apt-get install linux-headers-generic
# Suporte no *Debian*
sudo apt-get -y install module-assistant
sudo module-assistant auto-install xtables-addons
# Suporte no *Ubuntu*
sudo apt-get -y install unzip geoip-bin
sudo apt-get -y install xtables-addons-common

– Por fim, é preciso instalar e configurar o suporte ao GEOIP (bibliotecas e base de dados).

sudo aptitude install libtext-csv-xs-perl
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo mkdir /usr/share/xt_geoip
sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

Este último passo pode ser refeito, periodicamente, para manter a base de dados atualizada.

Concluída a instalação, a utilização das extensões será transparente (como no suporte nativo). Em alguns casos, se houver incompatibilidade com a versão de kernel do sistema, será necessário buscar uma atualização/correção específica no site de sua distribuição (é raro acontecer).

O processo descrito é feito apenas uma vez e, nas próximas atualizações de sistema (upgrade ou dist-upgrade), será refeito automaticamente pelos scripts de instalação. O risco de incompatibilidade de kernel só existe quando o administrador força a instalação de um kernel que não é instalado, por padrão e automaticamente, na distribuição.

Para saber quais são os módulos ou extensões suportados liste o conteúdo do diretório /lib/xtables.

O número de recursos é grande…

A utilização do TARPIT, por exemplo, segue a mesma lógica do DROP ou REJECT. A diferença principal está na forma como o pacote é bloqueado. Ao invés de descartar ou rejeitar, o sistema manipula o tamanho da janela TCP (para 0), fazendo com que a conexão fique “pendurada”. Assim, o endereço de origem não encerra a conexão e o recurso permanece alocado. É uma alternativa interessante para reagir a diferentes tipos de ataque, mas não utilize em substituição ao DROP ou REJECT. Mais adiante abordarei este assunto com maiores detalhes.

Caso você tenha alguma dúvida em relação a sintaxe de configuração das extensões, utilize as opções de ajuda do próprio comando iptables (–help):

root@fips:/usr/share/xt_geoip# iptables -m ipp2p --help
root@fips:/usr/share/xt_geoip# iptables -m geoip --help
    geoip match options:
    [!] --src-cc, --source-country country[,country...]
            Match packet coming from (one of) the specified country(ies)
    [!] --dst-cc, --destination-country country[,country...]
            Match packet going to (one of) the specified country(ies)

Podemos testar a detecção geoip através da ferramenta geoiplookup:

root@fips:/usr/share/xt_geoip# geoiplookup 8.8.8.8
    GeoIP Country Edition: US, United States

ou

root@fips:/usr/share/xt_geoip# geoiplookup 200.147.3.199
    GeoIP Country Edition: BR, Brazil

Exemplo de filtro:

Suponhamos que você tenha configurado um bridge-firewall/IPS (interface física de entrada eth0) e deseja liberar o acesso aos servidores apenas para endereços do Brasil, ignorando requisições de DNS ou email.

/sbin/iptables -t filter -N dropgeo 2>/dev/null
/sbin/iptables -t filter -A dropgeo -p udp --dport 53 -j RETURN
/sbin/iptables -t filter -A dropgeo -m multiport -p tcp --dport 25,587,110 -j RETURN
/sbin/iptables -t filter -A dropgeo -m geoip --src-cc BR -j RETURN

/sbin/iptables -t filter -A dropgeo -m limit --limit 3/s --limit-burst 3 -j LOG --log-level info --log-prefix "DROP profile dropgeo "
/sbin/iptables -t filter -A dropgeo -j DROP

/sbin/iptables -t filter -A FORWARD -m physdev --physdev-in eth0 -d 200.200.200.0/24 -j dropgeo