Implementando o layer7 no Linux Debian Lenny com Kernel 2.6.28 e iptables 1.4.2. Depois de várias tentativas de recompilar o kernel do Debian Lenny para implementar o layer7 e sofrer muito com a famosa mensagem "KERNEL PANIC", consegui recompilá-lo de acordo com os comandos abaixo.
# tar jxvf linux-2.6.28.tar.bz2
# tar jxvf iptables-1.4.2.tar.bz2
# tar zxvf netfilter-layer7-v2.21.tar.gz
# tar zxvf l7-protocols-2008-04-23.tar.gz
# uncompress config-2.6.28-1-686.gz
Criando um link para o diretório do kernel:
# ln -s /usr/src/linux-2.6.28 /usr/src/linux
Copiando as configurações de boot e aplicando os patches do layer7 no kernel:
Entre no diretório Networking -> Networking Options -> Network Packet Filtering Framework (netfilter) -> Core Netfilter Configuration
Marque os módulos (M) layer7 match support e (M) string match support
(M) layer7 match support #MARCAR COMO MÓDULO
(M) string match support #MARCAR COMO MÓDULO
Saia pelo exit, na última tela, escolha a opção salvar para o arquivo .config, ou seja, no último exit você será questionado se deseja salvar. Agora é simples, basta compilar.
# make-kpkg -initrd kernel_image
Foi criado um arquivo linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb no diretório /usr/src, volte ao diretório e instale.
# cd /usr/src
# dpkg -i linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb
Pronto, o novo kernel já esta instalado.
Aplicando os patches no iptables e instalando
Digite:
# cd /usr/src/iptables-1.4.2
Copie os arquivos libxt_layer7.c libxt_layer7.man para o diretório do iptables:
[2] Comentário enviado por brunosilva.ti em 19/05/2009 - 18:21h
Olá Micnet,
Sim pode ser qualquer versão do kernel, so utilizei a 2.6.28 por ser a mais atual no momento e foi a que testei e funcionou perfeitamente. Também teste alguns artigos do VOL mas acorreu akele problema do "KERNEL PANIC". por isso escrevi também com o kernel 2.6.28
[6] Comentário enviado por oismael007 em 29/05/2009 - 13:56h
Opa.. Blz.. o meu deu certo aki.. só teve um problema... quando colocava o meu firewall para iniciar junto com o sistema ela dava msg de erro para todas as regras contida no firewall (command not foud) mais se eu executace o firewall na maum dava certo...
Naum entendi por que .. mais daew fui ateh o gerenciador de pacotes do debian e vi qeu o iptables naum estava listado como instalado..daew instalei e funciono..... mais eu jah havia instalado anteriormente na maum com o tutorial explica .. mais agóra funciona .. inclusive as regra do layer7.. valeu -- se puder me responder agradeço.. abraçosss..
[7] Comentário enviado por brunosilva.ti em 29/05/2009 - 17:21h
Blz, depois que vi seu comentário testei o meu script pois ainda não tinha reiniciado o servidor. E tive o mesmo problema. Quando usei o comando:
#whereis iptables
/usr/src/iptables-1.4.2/iptables.xslt /usr/src/iptables-1.4.2/iptables.8...../usr/local/sbin/iptables
Como o binário do iptables está em /usr/local ele só iniciava quando um usuário logasse na máquina.
Solução: Reinstalar o iptables com o comando abaixo:
# ./configure --with-ksource=/usr/src/linux sbindir=/sbin libdir=/lib
ow então,
copiar o binario iptables para sbin
#mv /usr/local/sbin/iptables /sbin/
Não entendi pq vc disse que mesmo depois de logar no sistema nao funcionava. Mas espero ter ajudado.
[9] Comentário enviado por jucaetico em 04/06/2009 - 17:22h
Cara, Show de bola esse artigo!! Parabéns! Só uma dúvida estou com problemas em algumas regras do meu firewall, por exemplo:
Regra:
iptables -t nat -A PREROUTING -i $EXTERNAL_INTERFACE -s 192.168.0.0/16 -j DROP
ou
iptables -t nat -A POSTROUTING -p tcp --dport 443 -j DROP
The "nat" table is not intended for filtering, hence the use of DROP is deprecated and will permanently be disabled in the next iptables release. Please adjust your scripts.
Na versão do iptables 1.3.X funciona normalmente, pelo que a mensagem nos diz é que a tabela NAT não é mais destinada pra filtragem e não justifica o uso do "DROP".
[10] Comentário enviado por brunosilva.ti em 04/06/2009 - 18:05h
Obrigado humano10,
Pelo que sei da tabela nat, ele serve mais para redirecionamento de pacotes, essa politicas acima vc teria q utilizar na tabela filter, pode ser assim:
iptables -A FORWARD -s 192.168.0.0/16 -i $EXTERNAL_INTERFACE -j DROP
iptales -A FORWARD -p tcp --dport 443 -j DROP
[13] Comentário enviado por brunosilva.ti em 08/06/2009 - 09:05h
Olá downloadd,
Que bom que funcionou no ubuntu server. Em relação a regra do messenger não está bloqueando nada, vc verificou se tem alguma regra acima que está liberando a porta ow libera o acesso, é a única coisa que acho que pode estar liberando, pois se chega a requisição nessa regra antes de chegar no bloqueio o msn fica liberado. Mas se vc quiser poste seu script ou mande pro meu e-mail faço questão de testar e te ajudar a resolver o problema.
[14] Comentário enviado por downloadd em 08/06/2009 - 22:00h
Olá Bruno,
No ubuntu server 9.04 funcionou, mas tive que reduzir a versão do kernel para 2.6.28, como mostra seu tutorial. Pra mim, isso não faz diferença nenhuma.
meu script é este, somente isto, pois no momento só quero testar o L7
[18] Comentário enviado por brunosilva.ti em 10/06/2009 - 17:27h
Não, o msn plus só adciona algumas funções a mais no windows live messenger, é isso mesmo? então ele roda sobre o protocolo do messenger e deveria ser bloqueado. Não sei o que pode estar acontecendo com seu firewall, pois testei sua regra e funcionou normalmente.
[19] Comentário enviado por dalveson em 12/06/2009 - 11:38h
brunosilva.ti ja tentei de tudo quanto é jeito e nao consegui, terminei de baixar o ubuntu serve 9.04 com kernel 2.6.28, vou começar tudo denovo e verei onde errei.
ah, estou instalando numa maquina virtual, o virtual box da sun, tem algun problema com isso? embora eu acho que nao
[20] Comentário enviado por dalveson em 15/06/2009 - 10:38h
galera fiz tudo passo a passo, desta vez nao deu erro de kernel panic, porem acho que o modulo layer7 nao esta funcionando, como posso fazer para verificar se o modulo esta ou nao funcionando?
tentei da seguitnte maneira e nao deu certo:
modprobe ipt_layer7
fatal: module ipt_layer7 not found
[22] Comentário enviado por andrefreire em 18/06/2009 - 10:47h
Excelente sua dica ! Testada e aprovada ! Agora uma questão, ja que temos um kernel novo podemos leva-lo e intala-lo em outras máquinas com o Lenny sem a necessidade de compila-lo novamente ? No caso do iptables podemos gerar um pacote com o checkinstall e usá-lo também em outras máquinas ? Se isso for possivel só teremos que instalar os pacotes DEB do kernel e do IPTABLES e ja estaria tudo pronto ! Aguardo sua resposta !
[24] Comentário enviado por dalveson em 19/06/2009 - 11:21h
bem pessoal, ja que uma das soluçoes bem praticas e faceis seria reutilizar o novo kernel, teria como algeum postar esse arquivo para download, assim facilitando a vida daqueles que por incrivel que parece, ja tentaram 7 vezes, seguindo a risca o tutorial e ainda nao conseguiram, eu agradeceria muito
[29] Comentário enviado por dalveson em 22/06/2009 - 14:30h
brunosilva.ti to passando para dizer que testei e funcionou perfeitamente a sua imagem do kernel com suporte a layer7, acabei de testar e tudo esta ok, vlw pela força em hospeda-la para que pudesemos fazer download.
[31] Comentário enviado por brunosilva.ti em 22/06/2009 - 20:55h
Vc pode utilizar da seguinte forma:
iptables -A FORWARD -s 192.168.0.xxx -m layer7 --l7proto bittorrent -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -m layer7 --l7proto bittorrent -j DROP
Desta forma quando chegar pacotes do xxx, se for outro ip da rede ele passa para próxima regra que é bloquear. E qualquer outro ip que vc for liberar vc tem que colocar acima da regra de bloqueio pq o iptables verifica linha por linha.
[34] Comentário enviado por jucaetico em 24/06/2009 - 17:02h
Galera, eu não recomendaria ativar a opção "Layer 7 debugging output" sei que não está escrito no artigo mas ela fica abaixo da opção "layer7 match support " pois essa opção gera muito logs de debugs que aparecem a toda hora no syslog. Abraços
[37] Comentário enviado por carbony em 24/09/2009 - 10:53h
ola, excelente tutorial, esta de parabensss, funcionou aqui comigo de primeira, bloqueou os p2p os msn tudo, liberei os do chefe ( e os meus tambem heheheh).
So que tem um porem, o windows live messenger , consigo acessar pelo login.live.com, pelo hotmail.com, porque dentro tem um messeger live web, alguem conseguiu bloquear esse danado, sem bloquear o hotmail.com e login.live.com?
[42] Comentário enviado por brunosilva.ti em 01/12/2009 - 15:52h
Olá,
Já tentou utilizar as seguintes regras:
iptables -A FORWARD -s 192.168.0.0/24 -m layer7 --l7proto gnutella -j DROP
iptables -A FORWARD -s 192.168.0.0/24 -m layer7 --l7proto bittorrent -j DROP
[43] Comentário enviado por consultor.inf em 15/12/2009 - 15:53h
Segui o seu tutorial e instalei tudo sem problemas.
Aparentimente todos os modulos estão rodando.
Crio as regras normalmente, visualizo com
#iptables -n -L
O estranho que que não bloqueiam nada.
Já testei varias regras e nada...
O que sera que esta acontecendo?
[45] Comentário enviado por diter em 24/12/2009 - 11:47h
Oi Bruno, perfeito post, estou começando a testar, muito obrigado pela ajuda, aproveito e estou seguindo a dica de pegar o .deb para aplicar em outras instalações, porém surgiu a seguinte dúvida:
Como faço para instalar o Iptables já que não tenho o caminho /usr/src/linux, se partir direto do .deb, passei direto pelas etapas de criar o link para o /usr/src/linux posso usar só comando ./configure no lugar do ./configure --with-ksource=/usr/src/linux?
[46] Comentário enviado por andrefreire em 26/12/2009 - 18:29h
Boa noite !
O Layer7 só ta funcionando quando uso a politica padrão do Chain Forward como ACCEPT se eu mudar ela pra drop bloqueio tudo menos MSN ! Alguém pode ajudar ?
[47] Comentário enviado por kepas em 29/04/2010 - 02:23h
Olá pessoal!
estou com o seguinte problema, quando aplico a regra: iptables -A FORWARD -m layer7 --l7proto msnmessenger -j DROP
me retorna o seguinte erro: iptables v1.4.2: Couldn't load match `layer7':/usr/local/libexec/xtables/libipt_layer7.so: cannot open shared object file: No such file or directory
[48] Comentário enviado por brunosilva.ti em 11/05/2010 - 14:16h
Olá kepas,
Primeiro verifique se não esqueceu de executar os comandos abaixo, após a instalação do iptables:
# cd /usr/src/l7-protocols-2008-04-23
# make install
Se já executou e o erro continua, é porque o patch do layer7 está atualizado para a verção do iptables 1.4.3, então faça o seguinte:
Remova a pasta e o binário do iptables:
# cd /usr/src
# rm -rf iptables-1.4.2*
# rm -f /usr/local/sbin/iptables
Compile e instale o iptables
# cd iptables-1.4.3
# cp ../netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/* extensions/
# ./configure --with-ksource=/usr/src/linux
# make
# make install
# cd /usr/src/l7-protocols-2009-05-28
# make install
[49] Comentário enviado por iltoncesar em 09/06/2010 - 17:42h
Ola pessoal, aqui não funcionou 100% o bittorrent consegui bloquear, mas por incrivel q parece o utorrent funciona normalz, fiz um teste instalei os dois p2p, peguei um arquivo do thepiratebay e mandei baixar pelo bittorrent ficou 30min e nada de baixar, coloquei o msm arquivo no utorrent e no msm instante começou a baixar...... alguem sabe o motivo????
[50] Comentário enviado por consultor.inf em 03/11/2010 - 11:09h
Muito bom seu artigo.
Instalei e aparentemente ocorreu tudo bem, fis um teste bloqueando msn e funcionou.
O problema e quando tento bloquear videos ele não bloqueia. Estou usando a seguite regra
# iptables -t mangle -A POSTROUTING -m layer7 --l7proto httpvideo -j DROP
[52] Comentário enviado por mrjeday em 02/02/2011 - 11:09h
Olá Bruno, aqui compilei tudo direitinho. Tive que adaptar para meu kernel, já que não uso o mesmo que você. Porém ao reiniciar ele não reconhece o layer7. Tens alguma idéia?
Linux servidor 2.6.26-2-686 #1 SMP Thu Nov 25 01:53:57 UTC 2010 i686 GNU/Linux
iptables v1.4.2
ao digitar o comando abaixo, retorna o seguinte erro:
#modprobe ipt_layer7
FATAL: Module ipt_layer7 not found.
Minhas regra para compartilhamento de conexão por NAT também só estão iniciando manualmente depois de feito todo o processo.
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
[53] Comentário enviado por __FERNANDO__ em 02/03/2011 - 20:20h
Pessoal, por favor.
Eu fiz o procedimento, mas não achei essa linha:
(M) layer7 match support #MARCAR COMO MÓDULO
É algum problema ?
Pois não tinha essa opção para selecionar em: Networking -> Networking Options -> Network Packet Filtering Framework (netfilter) -> Core Netfilter Configuration