Iptables + Layer7

Este artigo tem o objetivo de apresentar a ferramenta Iptables, explicando um pouco sobre seu funcionamento e mostrando alguns exemplos da utilização deste firewall, bem como alguns de seus módulos. Em seguida detalharemos a importância, a instalação e mostraremos alguns exemplos de uso de um dos módulos existentes para o Iptables: o Layer7.

[ Hits: 119.724 ]

Por: Andre Oliveira em 19/11/2008


Instalando o Layer 7



Neste passo-a-passo, foi utilizada a distribuição Debian Linux. Porém, os passos a serem seguidos em qualquer distribuição são similares. Para qualquer um que conhece o processo de compilação do kernel, o processo é trivial.

Existem alguns tutoriais que explicam a instalação de versões mais antigas do Layer 7 e/ou utilizando versões mais antigas do kernel e/ou do Iptables. Iremos mostrar neste tutorial a instalação da última versão do Layer 7, na última versão do kernel que suporta o Layer 7 (2.6.25) e nas versões mais recentes do Iptables (1.4.1.1 em diante).

Embora seja possível a utilização do Layer 7 em "user space", mostraremos aqui a instalação no kernel, uma vez que a rapidez no tratamento de pacotes é superior.

Então, vamos lá. São necessários privilégios de superusuário. Iremos realizar o processo no diretório /usr/src:

# cd /usr/src

Vamos agora baixar os fontes do kernel 2.6.25:

# wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.tar.bz2

Baixando os fontes do Iptables 1.4.1.1:

# wget -c ftp://ftp.netfilter.org/pub/iptables/iptables-1.4.1.1.tar.bz2

Baixando os fontes do Layer 7 compatíveis com as versões do kernel e do Iptables utilizadas:

# wget -c http://downloads.sourceforge.net/l7-filter/netfilter-layer7-v2.20.tar.gz?modtime=1219454763&big_mirror=0

Baixando as definições dos protocolos para o Layer 7:

# wget -c http://downloads.sourceforge.net/l7-filter/l7-protocols-2008-10-04.tar.gz?modtime=1223085729&big_mirror=0

Instalando algumas aplicações necessárias para desempacotar os fontes:

# apt-get install gzip
# apt-get install bzip2


Instalando a biblioteca necessária para abrirmos a tela de configuração do kernel:

# apt-get install libncurses5-dev

Instalando a ferramenta que ajuda a automatizar o processo de instalação do novo kernel do Debian:

# apt-get install kernel-package

Vamos agora desempacotar os fontes baixados:

# tar xjvf iptables-1.4.1.1.tar.bz2
# tar xzvf l7-protocols-2008-10-04.tar.gz
# tar xzvf netfilter-layer7-v2.20.tar.gz
# tar xjvf linux-2.6.25.tar.bz2


Vamos criar agora um link simbólico para o diretório com o código fonte do kernel baixado:

# ln -s /usr/src/linux-2.6.25 /usr/src/linux

Como já temos o .config do kernel que está rodando agora na máquina, vamos copiá-lo para o diretório com os fontes do kernel. Caso queira customizar o kernel para seu hardware "do zero", ou seja, sem usar o .config, sinta-se à vontade. Utilizei o .config aqui por uma questão de praticidade apenas e para garantir que vai funcionar. Copiando então:

# cp /boot/config-2.6.22-3-686 /usr/src/linux/.config

Vamos aplicar agora o patch do Layer 7 correspondente ã  nossa versão do kernel:

# patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch

Agora, vamos à configuração do kernel:

# cd linux
# make menuconfig


As opções que devem ser habilitadas são as seguintes:

General Setup --> Prompt for development and/or incomplete code/drivers
Networking --> Networking support --> Networking options --> Network packet filtering framework (Netfilter)
Networking --> Networking support --> Networking options --> Network packet filtering framework (Netfilter) --> Core Netfilter Configuration --> Netfilter Xtables support (required for ip_tables)
Esta opção deve ser habilitada como módulo.
Networking --> Networking support --> Networking options --> Network packet filtering framework (Netfilter) --> Core Netfilter Configuration --> Netfilter connection tracking support
Networking --> Networking support --> Networking options --> Network packet filtering framework (Netfilter) --> Core Netfilter Configuration --> Connection tracking flow accounting
Networking --> Networking support --> Networking options --> Network packet filtering framework (Netfilter) --> Core Netfilter Configuration --> "layer7" match support

Esta opção é habilitada como módulo.

Nesta mesma tela, é conveniente marcar todas as opções como módulos, pois podem ser utilizadas posteriormente por você como módulos do Iptables.

Selecione a opção "Exit" até que apareça a mensagem: "Do you wish to save your new kernel configuration?". Aqui, selecione "Yes".

Agora, compilamos o kernel e geramos o pacote .deb. Dependendo da quantidade de opções habilitadas no kernel o processo pode demorar.

# make-kpkg -initrd kernel_image

Vamos então instalar o novo kernel. No caso, o pacote .deb gerado:

# cd /usr/src
# dpkg -i linux-image-2.6.25_2.6.25-10.00.Custom_i386.deb


Vamos copiar as extensões do Layer 7 para o Iptables:

# cd netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/
# cp libxt_layer7.c libxt_layer7.man /usr/src/iptables-1.4.1.1/extensions/


Compilamos então o Iptables com as extensões do Layer 7:

# cd /usr/src/iptables-1.4.1.1
# ./configure --with-ksource=/usr/src/linux
# make
# make install


Agora basta instalar as especificações dos protocolos para o Layer 7:

# cd /usr/src/l7-protocols-2008-10-04
# make install


Esta instalação apenas vai copiar as definições para o diretório /etc/l7-protocols. Caso queira copiar as especificações para outro diretório, não há problemas, desde que a cada comando iptables que utilize o Layer 7 seja especificado este diretório através da opção --l7dir, antes da opção --l7proto (que irá especificar o protocolo da camada de aplicação a ser filtrado).

Pronto, a instalação está concluída! Agora basta reiniciar a máquina e "bootar" o novo kernel.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Utilização do Iptables
   3. Módulos
   4. Instalando o Layer 7
   5. Utilização do Layer 7
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Implementando prioridade nos serviços com TOS no Iptables

Firewall para o dia a dia

Squid/IPtables - Bloqueando Facebook e personalizando IP de acesso irrestrito (definitivo)

Iptables em modo gráfico

Squid + iptables (método ninja)

  
Comentários
[1] Comentário enviado por brunocontin em 19/11/2008 - 16:42h

Muito bom, mais teria como eu colocar o Layer 7 no meu Kernel atual? Já que ele está numa versão acima do que você descreveu.

[2] Comentário enviado por renato_pacheco em 19/11/2008 - 17:02h

Excelente artigo! Tinha um professor meu q ele não conseguia bloquear o skype pelo Windows Server 2003. Eu acho q ele vai t q mudar pra um server Linux agora. Huiahiuahuiaha!!

[3] Comentário enviado por aolb em 19/11/2008 - 18:57h

renato_pacheco valeu pela força... espero que o tutorial possa ajudar!

brunocontin foi excelente sua pergunta, pois aproveito para colocar um link que não pus no tutorial. Este link é uma lista de compatibilidade do Layer 7 com as versões do kernel. Note que eu fiz o tutorial com a última versão que comprovadamente compila e funciona. De qualquer forma, segue o link para que você (e os demais que tenham a mesma dúvida) verifique de acordo com a sua versão.

Link: http://l7-filter.sourceforge.net/kernelcompat

Abraços a todos.

[4] Comentário enviado por macvitor em 20/11/2008 - 15:37h

Parabéns, pelo artigo. Eu havia escrito um, mas já faz tempo, está ultrapassado.

[5] Comentário enviado por jpaulo_farias em 25/11/2008 - 15:45h

Parabens pelo artigo, eu ja tenho o layer 7 funcionando normal esta bloqueando perfeitamente, so que eu estou tendo um problema, espero que vc pode me ajudar.

Aqui em baixo esta as minhas regras que eu to usando, eu to bloqueando geral na o MSN e o SKYPE e to liberando pra alguns ips e esta funcionando normal so que esta bloqueando os aplicativos do telnet smtp e ftp, e ja fiz de tudo e nao consigo libera telnet e o ftp o telnet, ja o smtp funcionou depois que eu adicionei essa linha $IPT -A FORWARD -m layer7 --l7proto smtp -j ACCEPT, eu tentei fazer a mesma coisa com o ftp e o telnet + nao funcionou.

Isso acontece quando eu blqoueio o skype, ai para de funciona o telnet e o ftp, vc pode me ajudar. se abaixo comandos do layer 7 que eu estou usando.

#===========================================
#echo "Liberando Messeger e o Skype por IP ............................. OK"
#===========================================
$IPT -t filter -A FORWARD -s 10.46.22.248/32 -m layer7 --l7proto msnmessenger -j ACCEPT
$IPT -t filter -A FORWARD -d 10.46.22.248/32 -m layer7 --l7proto msnmessenger -j ACCEPT

$IPT -t filter -A FORWARD -s 10.46.22.250/32 -m layer7 --l7proto skypeout -j ACCEPT
$IPT -t filter -A FORWARD -d 10.46.22.250/32 -m layer7 --l7proto skypeout -j ACCEPT

#============================================
echo "Libera os programa no Layer 7 ...................... OK"
#============================================
#
$IPT -A FORWARD -m layer7 --l7proto smtp -j ACCEPT
$IPT -A FORWARD -m layer7 --l7proto telnet -j ACCEPT

#===========================================
#echo "Bloqueando P2p/Messenger e Skype ...................... OK"
#============================================
$IPT -A FORWARD -m layer7 --l7proto msnmessenger -j DROP
$IPT -A FORWARD -m layer7 --l7proto skypeout -j DROP
$IPT -A FORWARD -m layer7 --l7proto skypetoskype -j DROP


Grato,

Joao Paulo

[6] Comentário enviado por relofi em 25/11/2008 - 17:01h

Olá segui o tuto e não deu erro algum, porém qdo executo o comando da esse erro:

/usr/src/iptables-1.4.1.1# iptables -A INPUT -m layer7 --l7proto fasttrack -j DROP
iptables: Invalid argument

porque será? alguém tem alguma idéia?Carreguei o mod: ipt_layer7

[7] Comentário enviado por carbony em 03/12/2008 - 09:10h

valeu pelo tutorial,

um duvida,

consegui rodar as regras iptable e layer7, bloqueou msn,emule, etc etc.

so que no prompt do root , ficando aparecendo essa mensagem na tela


kernel: layer7: couldn't get conntrack.
kernel: layer7: couldn't get conntrack.
kernel: layer7: couldn't get conntrack.
kernel: layer7: couldn't get conntrack.
kernel: layer7: couldn't get conntrack.


alguem saberia me dizer se isso e um error , e como eu resolveria?

ate que ponto atrapalha meu sistema?

valeu!!!

[8] Comentário enviado por carbony em 03/12/2008 - 18:12h

ola tenho uma duvida

instalei o layer7 e ipp2p,

o layer7 bloqueia os p2p, bittorrent,kazza, emule, ou e somente pra msn?

como instalei os dois , to conseguindo bloquear o msn e o p2p, gostaria de saber qual e comando para liberar determinado ip no ipp2p, sendo que no layer7 usei a dica acima do nosso companheiro.

outra duvida, o log do ipp2p consegui ver no /var/log/iptables e do layer7 aonde consigo ver o log dele?

valeu!!!

minha regra pra gerar log, gostaria de saber se esta certa

# gerar log ipp2p e msn
iptables -A FORWARD -m ipp2p --edk --kazaa --gnu --bit --apple --dc --soul --winmx --ares -j LOG --log-level 1 --log-pre$
iptables -A FORWARD -m layer7 --l7proto msnmessenger -j LOG --log-prefix "msn : "

[9] Comentário enviado por jucaetico em 19/03/2009 - 18:31h

Amigos, Segui a risca esse tutorial e muitos outros desse mesmo assunto, quando reinicio a maquina para carregar o novo kernel recebo a seguinte mensagem: "Begin: Waiting for root file system". e fica nisso o kernel antigo carrega normal!! Obs: Meu HD é SATA. Obrigado!

[10] Comentário enviado por jucaetico em 20/03/2009 - 15:51h

Galera, descobri que o problema está relacionado ao tipo da placa mãe, no meu caso o meu HD sata é reconhecido como IDE na BIOS. Então após recompilar o "kernel" o mesmo não é encontrado como sda1 e nem como ide, não sei explicar o porque. O que fiz foi utilizar um outro tipo de placa mãe que reconhece o meu HD como SATA na BIOS e funcionou blz! Obrigado,

[11] Comentário enviado por danne em 21/08/2009 - 20:29h

Segui o tutorial utilizando as seguintes versões: Ubuntu Server 9.04, Kernel 2.6.28, Iptables 1.4.4, Layer7 2.22, protocolos 28/05/2009. Rodou numa boa.

[12] Comentário enviado por hugo.andrade em 18/09/2009 - 15:41h

Otimo tutorial...
Acabei de instala-lo aqui na minha empresa:

Debian(Net-inst)
Kernel 2.6.28
Iptables 1.4.1.1
Layer7 2.21

Seguindo a risca esse tutotial e não deu problema algum durante a instalação.
Parabens pelo otimo tutorial!!!

[13] Comentário enviado por blade_ander em 27/12/2010 - 11:10h

Pessoal,

Se tiverem problemas e o módulo não subir, vai a dica, no caso usando Debian 5.06 lenny.

Alterando configuração do modulo L7:
# cp /lib/modules/2.6.26/kernel/net/netfilter/xt_layer7.ko
/lib/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/xt_layer7.ko


Editando arquivo de módulos:


vim /lib/modules/2.6.26-2-686/modules.dep

Adicone a linha abaixo no final do arquivo:

/lib/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/xt_layer7.ko: /lib/modules/2.6.26-2-686/kernel/net/netfilter/nf_conntrack.ko /lib/modules/2.6.26/kernel/net/netfilter/x_tables.ko


Reinicie o servidor.

Subir o modulo: modprobe xt_layer7

[14] Comentário enviado por Xelito em 20/05/2011 - 18:41h

Pra mim da erro ao executar o comando:
make-kpkg -initrd kernel_image

Aparece a seguinte mensagem:
Unknown option: i
Unknown option: n
Unknown option: i
Unknown option: t
Unknown option: r
Unknown option: d

Ou seja ele nao esta mais reconhecendo o comando initrd
como faço para tentar resolver isso?
Alguem pode me ajudar?

[15] Comentário enviado por rick_G em 09/10/2011 - 22:16h

Olá,
não estou conseguindo aplicar o modulo do Debian squeeze,
Alguem pode me ajudar?

[16] Comentário enviado por fred.aug em 17/11/2011 - 14:49h

Xelito,

digite o comando desta forma:
make-kpkg --initrd kernel_image

[17] Comentário enviado por smallboy em 26/11/2014 - 12:25h

Possuo um server web cujo nele há instalado diversos tipos de serviços. Kernel dele é 2.6.18 eu consigo instalar o layer 7 no CentOS ?
More one question, Quero bloquear downloads Torrent, p2p principalmente torrent que consome maior parte da banda.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts