Implementando Iptables Layer 7 no Fedora Core 7 e 8
Olá Pessoal,
Nesse artigo eu ensinarei como implementar o Iptables Layer 7 nos Fedoras Core 7 e 8, mas, esse tutorial, aplica-se a qualquer distribuição, devidamente acompanhada de suas ferramentas de compilação e manipulação de kernel.Instale o Fedora com os pacotes default, e os pacotes desenvolvimento, a primeira e a
segunda opção de escolha, a opção de web server, só se for preciso mesmo.
Depois de instalado, e reiniciado, façamos o seguinte :
Baixe os seguintes pacotes :
Kernel 2.6.23
Remova o Iptables que vem na distribuição :
# yum remove iptables
Aceite as condições de remoção do Iptables.
Depois de removido o iptables, vamos começar a descompactar os pacotes.
Vamos para a primeiro para a pasta /usr/src. Descompacte o kernel com o comando :
# tar xjvf linux-2.6.23.tar.bz2
Ele vai ficar com o nome linux-2.6.23, copie-o para a pasta /usr/src, então seu caminho deve
ficar /usr/src/linux-2.6.23. Ótimo, agora vamos fazer um link simbólico para linux. Então
executaremos o comando :
# ln -s /usr/src/linux-2.6.23 /usr/src/linux
Passemos para a parte do Iptables agora, descompacte o iptables numa pasta qualquer,
depois copie-o para /usr/src. O caminho deverá ficar assim /usr/src/iptables-1.3.8, agora
vamos criar um link simbólico para iptables, então executaremos o comando :
# ln -s /usr/src/iptables-1.3.8 /usr/src/iptables
Agora vamos compilar um novo kernel, com o suporte ao netfilter-layer7. Entre nas pasta do
linux.
# cd /usr/src/linux
Depois aplique o patch
#patch -p1 < /usr/src/netfilter-layer7-v2.14/kernel-2.6.22-layer7-2.14.patch
Feito isso, estaremos prontos para compilar o novo kernel. Abra o terminal em uma janela
grande, por que dependendo do tamanho da janela, pode apresentar algum erro. Bem,
façamos o comando :
# make menuconfig
Você estará dentro do ambiente do kernel.
Navegue com o teclado até a opção Networking, Networking Options, Network packet
filtering framework (Netfilter), Core Netfilter Configuration, lá embaixo você deverá encontrar
essa opção :
< > “layer7″ match support
Marque-a com um M, e a que vem logo abaixo dela com um asterisco.
<M> “layer7″ match support
[*] Layer 7 debugging output
Marcadas as opções, é hora de salvar, vá fazendo Exit, até chegar ao menu principal, A
ultima opção é para salvar :
Save an Alternate Configuration File
Salve como .config mesmo.
Agora é hora de compilar o kernel. Então faça :
# make dep
# make clean
# make bzImage
# make modules
# make modules_install
# make install
Vai demorar um pouco dependendo da máquina.
Feito isso, precisamos reiniciar a máquina, note que, ao dar o boot, o kernel que vai prevalecer é o antigo, tenha o cuidado de selecionar o novo kernel, apesar dele aparacer como primeira opção no grub, o kernel que dá boot é o que está em segundo.
Agora vamos compilar o iptables. Vamos para /usr/src/iptables
# cd /usr/src/iptables
Aplicaremos agora o patch no iptables, que coloca as funcionalidades do layer-7, ou seja
implantamos a funcionalidade no kernel, agora estamos implantando a funcionalidade no
próprio iptables .
# /usr/src/iptables
# patch -p1 < /usr/src/netfilter-layer7-v2.14/iptables-for-kernel-2.6.20forwardlayer7-2.14.patch
Feito isso, vamos dar as devidas permissões as extensões :
# chmod 755 extensions/.layer7-test
# make KERNELDIR=/usr/src/linux
# make KERNELDIR=/usr/src/linux install
Depois de compilado o iptables, temos mais uma tarefa agora, que é subir os protocolos do
layer 7 .
Primeiro criamos o diretório em que ele vai ficar :
# mkdir /etc/l7-protocols
Depois copiamos o conteúdo :
# cp -a /usr/src/l7-protocols-2007-11-22/protocols/ /etc/l7-protocols/
Bem, se tudo correu bem até aqui temos um iptables com layer 7 funcionando, você poderá
testar com o seguinte comando :
# iptables -m layer7 –help
Caso seja necessário levantar o módulo na mão, use o comando :
# modprobe ipt_layer7
Agora podemos criar algumas regras como exemplo ( coletado em algum site na internet, esqueci de anotar a fonte, mas é isso o script não fui eu quem fiz, porém funciona. ):
#!/bin/sh
#
echo “===================”
echo ” Bloquear Softwares P2P ”
echo “===================”
#
iptables -I FORWARD -m layer7 –l7proto edonkey -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto edonkey -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto fasttrack -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto fasttrack -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto directconnect -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto directconnect -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto bittorrent -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto bittorrent -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto napster -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto napster -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto soulseek -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto soulseek -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto gnutella -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto gnutella -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto imesh -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto imesh -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto ares -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto ares -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto counterstrike-source -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto counterstrike-source -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto doom3 -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto doom3 -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto dayofdefeat-source -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto dayofdefeat-source -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto halflife2-deathmatch -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto halflife2-deathmatch -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto quake-halflife -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto quake-halflife -s any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto quake1 -d any/0 -j DROP
iptables -I FORWARD -m layer7 –l7proto quake1 -s any/0 -j DROP
#
echo “=================”
echo ” FIM DOS BLOQUEIOS ”
echo “=================”
Você pode ver uma lista maior de protocolos em :
http://l7-filter.sourceforge.net/protocols
E se ainda precisar de algo mais personalizado, podemos escrever alguns protocolos com
expressões regulares, seguindo os exemplos desse site :
http://l7-filter.sourceforge.net/Pattern-HOWTO
Espero que gostem.

Ótimo artigo gustavo. Abs.
Olá Gustavo segui as orientações mas no menu do kernel nao aparece a opção do layer7… tudo funciona perfeitamente ate a etapa de selecionar no menu a opçao que nao é exibida…
..
Vc pode me dar uma mao?
Estou usando RedHat Enterprise 5 –
por favor entre em contato comigo pelo email dad@unesc.net
Valeu…
Segui os passos desse tutorial, ao final, quando executo o script sugerido, ocorre falha de segmentação.
Ja refiz com fedora 4,6 e 7. Ocorre sempre o mesmo erro.
Pode ajudar?
Os links Netfilter-L7, L7-Protocols apontam para o mesmo pacote, isto esta correto?
Ai pessoal, Gustavo belo tutorial, cara só da uma olhadinha neste path:
patch -p1 < /usr/src/netfilter-layer7-v2.14/iptables-for-kernel-2.6.20forwardlayer7-2.14.patch
acho q ta faltando um tracinho. Ficaria assim:
patch -p1 < /usr/src/netfilter-layer7-v2.14/iptables-for-kernel-2.6.20forward-layer7-2.14.patch
vai do arquivo q vc baixou. mas tive problemas com isto então resolvi deixar a dica ai pro pessoal!
Segui todos os passos do tutorial, compilei todo o kernel não hove erros, mas as minhas regras do arquivo rc.local iptables não carregam mais na inicialização, depois do sistema todo carregado se eu for no shell e der um comando iptables ele funciona!
Como faço para inicializar minhas regras iptables novamente na inicialização?
Oieeee…
Eu uso o slackware, jah fiz todos esses passos e deu tudo certo , mais as regrinhas nao funcionam …
Por exemplo eu to tentando bloquear o http soh pra teste , mais nao da certo pq eu ainda consigo entrar em qualquer pagina da net …
O q eu posso ter feito de errado????????..
Me ajude…