quarta-feira, 24 de setembro de 2008

Instalando iptables l7 (layer 7) no debian i386

As vezes é necessário fazer bloqueio nos firewalls que vão além de portas e ips. No caso do emule por exemplo, não podemos definir um ip de origem ou mesmo uma porta, pois esses são variáveis. Neste caso, temos que subir até a camada de aplicação, nos protocolos utilizados por esses programas que não são variáveis igual aos ips e portas, e fazer o bloqueio pelos padrões de comunicação utilizados pela aplicação.
Resumindo, o iptables l7 permite a filtragem de pacotes por protocolo da camada 7 (modelo OSI). É uma filtragem menos eficiente (como dito, o iptbles deve "subir" até a camada 7) porém eficaz (como dito, a aplicação não varia o protocolo ).

Abaixo mostro um passo a passo da instalação do iptables l7 no Debian. Do original http://www.eduardoramos.eti.br/ drupal/?q=node/12, porém com algumas correções:


[Passos prévios]

- O sistema utilizado para a instalação foi debian-40r4a-i386-netinst baixado no site http://www.debian.org/distrib/netinst em 09/09/2008 no link http://cdimage.debian.org/debian-cd/4.0_r4a/i386/iso-cd/debian-40r4a-i386-netinst.iso
É necessário que seja i386 por causa das versões dos fontes que utilizaremos.

- Autentique-se como root no sistema para efetuar todos os passos desta explicação.

- Adicione a linha abaixo no arquivo /etc/apt/source.list para manter o apt-get atualizado:
deb http://ftp.br.debian.org/debian etch main contrib

- Após adicionada a linha, atualize o apt-get com o comando abaixo:
apt-get update


[Baixando fontes e instalando utilitarios]

- O iptables é intimamente ligado ao kernel para aumetar sua performance, então, para a instalação do iptables l7 é necessário compilar um kernel com as opções de l7. Baixe os fontes necessários com os comandos abaixo:
cd /usr/src

wget http://www.kernel.org/pub/linux/kernel/v2.6/ linux-2.6.19.tar.gz

wget http://www.netfilter.org/projects/iptables/files/ iptables-1.3.7.tar.bz2


wget http://ufpr.dl.sourceforge.net/sourceforge/l7-filter/ netfilter-layer7-v2.9.tar.gz


wget http://ufpr.dl.sourceforge.net/sourceforge/l7-filter/ l7-protocols-2007-01-14.tar.gz


- Alguns utilitarios que não vêm com o Debian devem ser instalados:
aptitude install bzip2 gzip unzip

aptitude install libncurses5-dev


aptitude install kernel-package


- Descompactando fontes:
tar xvzf linux-2.6.19.tar.gz

tar xvjf iptables-1.3.7.tar.bz2


tar xvzf netfilter-layer7-v2.9.tar.gz


tar xvzf l7-protocols-2007-01-14.tar.gz



[Configurando, compilando e instalando o kernel com l7]

- Criando um link para o diretório do kernel para auxiliar no processo de configuração:
ln -s /usr/src/linux-2.6.19 /usr/src/linux

- Copiando as configurações de boot:
cp /boot/config-2.6.24* /usr/src/linux/.config

- Aplicando o patch do layer7 no kernel:
cd /usr/src/linux
patch -p1 < /usr/src/netfilter-layer7-v2.9/kernel-2.6.18-2.6.19-layer7-2.9.patch

- Agora o kernel está pronto para ser configurado, compilado e instalado:
make menuconfig

- Uma tela de configuração do kernel será mostrada. Você deverá seguir os passos:
Networking ---> Networking options ---> [*] Network packet filtering (replaces ipchains) ---> Core Netfilter Configuration ---> Netfilter Xtables support (required for ip_tables)

- Ative com M a opção Netfilter Xtables support.

- Siga para:
Networking ---> Networking options ---> [*] Network packet filtering (replaces ipchains) ---> IP: Netfilter Configuration ---> IP tables support (required for filtering/masq/NAT) --->

- Ative:
Layer 7 match support (EXPERIMENTAL)
[*] Layer 7 debugging output

- Após ativar conforme acima, siga selecionando Exit e até que seja perguntado se você deseja salvar a nova configuração do kernel, selecione YES e para salvar.

- compilando o kernel:
make-kpkg -initrd kernel_image

Nota: demorará vários minutos.

- Após a compilação, será gerado um arquivo em /usr/src/linux-image-2.6.19.7_2.6.19.7-10.00.Custom_i386.deb, instale-o com o comando abaixo:
dpkg -i linux-image-2.6.19.7_2.6.19.7-10.00.Custom_i386.deb

- Após a instalação, reinicie sua máquina e selecione o novo kernel para ser carregado.


[Configurando e instalando o iptables l7]

- O iptables deve ser configurado para utilizar as novas funcionalidades oferecidas pelo kernel. Faça os comandos abaixo para efetivar essa configuração:
cd /usr/src/iptables-1.3.7

patch -p1 < /usr/src/netfilter-layer7-v2.9/iptables-layer7-2.9.patch


chmod +x extensions/.layer7-test


- Instalando o iptables:
make KERNEL_DIR=/usr/src/linux

make install KERNEL_DIR=/usr/src/linux


- Instalando protocolos que podem ser filtrados:
cd /usr/src/l7-protocols-2007-01-14

make install



[Finalizações]

- Reinicie sua máquina, selecione o novo kernel e insira a seguinte regra para testar o novo iptables:
iptables -I FORWARD -m layer7 --l7proto bittorrent -j DROP


[Possíveis problemas]

- Se a regra anterior for executada com sucesso, o seu iptables está pronto para ser utilizado. Caso contrário, o módulo l7 talvez não foi carregado automaticamente. Carregue-o com o comando abaixo:
modprobe ipt_layer7

- Se for exibida uma mensagem que o módulo não foi encontrado, a sua instalação falhou. Comente os problemas nesta postagem.


[Informações adicionais]

- Uma relação dos protocolos suportados pode ser vista em http://l7-filter.sourceforge.net/protocols

2 comentários:

Andre O. B. disse...

No arquivo /var/log/messages temos a seguinte mensagem:
"
iptables kernel: layer7: This is some protocol I can't handle
"

E pelo que parece o layer7 não reconhece seus protocolos. Estou estudando esse erro, se alguém pudar ajudar.

Gabriel de Figueiredo Corrêa disse...

Graaaaaaande Oshiro,
Muuuuuuuito irado o seu blog, tem muitas informações úteis para o dia a dia de um administrador.

Shooooow !!!

Abraços !!!