Integrando Layer7 + IPP2P ao Iptables

O artigo ensina como integrar o Layer7 e o IPP2P junto ao Iptables. Todos os procedimentos foram feitos na distribuição Linux Debian Lenny, mas o artigo está bem claro, o que permite sua implementação em outras distribuições.

[ Hits: 46.047 ]

Por: Magno Lima em 24/07/2009


Conclusão



Espero que tenham gostado do artigo, fico feliz por aqueles que conseguiram chegar até aqui! No decorrer do artigo tentei ser o mais claro possível, colocando explicação para quase todos os comandos executados.

Para aqueles que querem conhecer mais afundo os dois softwares, podem consultar diretamente na documentação oficial.

Bibliografia


Um grande abraço e espero que o artigo seja de grande proveito. Qualquer dúvida estou a disposição para responder...

Bye bye galera do VOL.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Compilação e instalação do Layer7
   3. Instalação IPP2P
   4. Conclusão
Outros artigos deste autor

Configuração de um servidor VPN com OpenVPN e chave estática

Leitura recomendada

Firewall e NAT em FreeBSD com controle de banda e redirecionamento de portas e IPs

Análise da distribuição Mandrake Security

Dois links de ADSL em um mesmo servidor

Mandrake Firewall - Firewall com interface amigável

Script de firewall e análise de log

  
Comentários
[1] Comentário enviado por roberto_espreto em 24/07/2009 - 02:12h

Boaaa!

Cara, já são 2 da madruga e estou mais pescando que nunca, acredito que nessa regra para bloqueio do msn:
iptables -t filter -A FORWARD -m layer7 --l7proto msnmessenger -j DROP

Nem precisa do "-t filter". Poderia ser:
iptables -A FORWARD -m layer7 --l7-proto msnmessenger -j DROP

Lendo as referências que você deixou, segue uma dica. Pode-se deixar o acesso a um endereço IP ou mais. Vai saber o patrão que se tem. :)

iptables -A FORWARD -s <ENDEREÇO IP> -m layer7 --l7-proto msnmessenger -j ACCEPT
iptables -A FORWARD -s <ENDEREÇO IP> -m layer7 --l7-proto msn-filetransfer -j ACCEPT

1º regra liberando o acesso do msn no IP especificado.
2º regra para habilitar o protocolo msnslp e msnftp usado para transferência de arquivos pelo MSN.

Abraços.

[2] Comentário enviado por removido em 24/07/2009 - 10:49h

roberto_espreto,

Não é que não precisa de ter o '-t filter' na regra para funcionar. A tabela padrão do iptables é a filter, ou seja, se você não especificar a tabela a qual vai destinar sua regra, ela por padrão vai jogar na tabela filter, por isso nesse caso ai seria opcional usar -t filter, pois a cadeia FORWARD faz parte da tabela filter.
:)

Sobre o artigo, show de bola. Vou ate testar pois anos atras eu também lancei um artigo sobre ipp2p aqui e está desatualizado, e ambas as ferramentas são boas para quem precisa desse tipo de filtro. Artigo show de bola.

[3] Comentário enviado por roberto_espreto em 24/07/2009 - 11:21h

@timidboy.

Certo, acredito que usei as palavras erradas, como sou "meio" que minimalista, você acabou dizendo o que eu pretendia expor: "...Por isso, nesse caso ai seria opcional...",
Mais valeu. Bom artigo mesmo, esqueci de elogiar :P


R0b3®70

[4] Comentário enviado por magnolinux em 24/07/2009 - 12:21h

e ae roberto espreto, como o nosso amigo timiboy disse, por padrao no iptables, quando omitimos a tabela é referenciado a tabela filter, em minhas regras sempre gosto de especificar as tabelas, por motivos de costume mesmo..

um abraço.. e duvidas estou a disposição.


[5] Comentário enviado por predator em 24/07/2009 - 21:48h

Pessoal só uma dica..
essa opção aqui "(x) "Layer7" Debugging Output" se marcada vai ficar jogando tudo o que o layer7 pegar,vai mostrar no seu terminal (na tela é muito chato isso), então é bom deixar desmarcada mesmo.

abs

eduardo

[6] Comentário enviado por marciomarkes em 25/07/2009 - 01:51h

Parabéns Magno, muito bom.. estava quebrando a cabeça para compilar o ipp2p.. dessa vez foi..
Só estou com uma duvida, você conseguiu bloquear a (REDE Kad) do emule pois ela sempre conecta.. teria alguma ideia..

Abs.

[7] Comentário enviado por andrefreire em 25/07/2009 - 10:05h

Bim dia ! Excelente artigo ! Já tenho essa Iptanles + Layer 7 já funcionando mas ainda não tinha conseguido com o IPP2P só que utilizo o próprio Kernel de Lenny o 2.6.26, e o Iptables 1.4.2 que é o padrão do Debian Lenny. Seria possível implementar o IPP2P dessa forma ?

[8] Comentário enviado por paulinhorm em 25/07/2009 - 11:16h

Muito bom o seu artigo colega...ja gravei nos meus favoritos...parabéns e continue contribuindo
com artigos de qualidade como este.

Abraços

Paulo

[9] Comentário enviado por magnolinux em 25/07/2009 - 13:31h

obrigado marciomarkes pelo elogio, Em relação a rede Kad, na minha fase de testes nao tive nenhum problema, fez o bloqueio normal. Mais como eu disse no inicio do artigo, essa não é a forma ideal de bloquear todo trafego p2p e sim um paleativo que até o presente momento tem sido de grande valia. Vou citar um exemplo, o layer7 por exemplo nao consegue ler o payload do pacote, se o mesmo estiver encriptado, entao muitos p2p já começaram a criptografar o trafego para burlar o layer7, mesmo que a rede p2p tenha um desempenho muito inferior, mais pelo menos é uma forma que eles arrumaram para burla o layer7.

Mais duvidas posta aí..

Abraço

[10] Comentário enviado por magnolinux em 25/07/2009 - 13:35h

boa tarde andrefreire, é possivel sim, so que voçe tera que buscar um pacth do ipp2p para o iptables-1.4.2. Os patch que eu postei no artigo foram tirados do site do arch. Tive acessando o site e vi um patch para o iptables 1.4.3. ta aí o link abaixo.

http://aur.archlinux.org/packages/ipp2p/ipp2p/

Abraço.

[11] Comentário enviado por sequisso em 04/08/2009 - 08:32h

Olá, ah algum tempo atrás achei que essa fosse uma boa solução para tentativa de bloqueio do tráfego p2p, mas após algumas lidas vi que eles estavam conseguindo burlar o layer 7 p2p através do "protocol obfuscation", ai desisti da ideia.

[12] Comentário enviado por andrefreire em 04/08/2009 - 17:01h

Testei com kernel 2.6.26 padrão do Debian e Iptables 1.4.1 e não deu certo ! Todos os P2P que testei continuaram conectando na boa ! Só bloqueou mesmo o MSN !

[13] Comentário enviado por magnolinux em 04/08/2009 - 18:01h

boa noite andrefreire, a alguns meses atras quando fiz minha seção de testes nao tive nenhum problema o unico software p2p que burlava o layer7 era o limewire. Sugiro que de uma olhada nas regras do seu firewall. Irei fazer alguns testes e e postar os resultados abraço.

[14] Comentário enviado por doomk em 10/09/2009 - 13:28h

muito bom o artigo. Funcionou de prima! vc é o cara!!! :)))

[15] Comentário enviado por magnolinux em 10/09/2009 - 17:03h

Obrigado doomk.!

[16] Comentário enviado por arisimoes em 06/10/2009 - 10:15h

quebrei um pouco a cabeça com o ipp2p mas conssegui compilar vlw otimo post

[17] Comentário enviado por arisimoes em 09/10/2009 - 13:41h

não cnssigo colocar o ipp pra rodar no rc.local diz q n pode ser encontrado ou coisa do tipo
"insmod ipt_ipp2p.ko" esse comando só funciona quando eu to dentro da pasta do ipp2p la em rc.local alguma dica? pra fazer-lo funcionar automaticamente pois quando eu rodo ele manual funciona direito.

olha o q aparece:

root@server:/# insmod ipt_ipp2p.ko
insmod: can't read 'ipt_ipp2p.ko': No such file or directory

conssegui resolver com essa dica do arquivo README q vem com o ipp2p:

-insmod ipt_ipp2p.o / ipt_ipp2p.ko or copy to your kernel modules dir and do a "depmod -a"

copiei o ipt_ipp2p.ko para /lib/modules/<pasta_do_kernel>/ e depois executei o comando depmod -a dai ele passou a executar automaticamente no boot.

espero ter ajudado!!!!!

[18] Comentário enviado por magnolinux em 09/10/2009 - 17:54h

mais ao colocar o comando dentro do rc.local, vc deve indicar o caminho completo onde esta
o modulo do ipp2p

exemplo:

#vim rc.local
insmod /ipp2p/ipt_ipp2p.ko

ok.

[19] Comentário enviado por jardineti em 11/10/2009 - 11:17h

Magno, quando dou o comando make apos mudar as linhas do Makefile
IPTABLES_SRC = /usr/src/iptables

libipt_ipp2p.so: libipt_ipp2p.c ipt_ipp2p.h
$(CC) $(CFLAGS) $(IPTABLES_OPTION) $(IPTABLES_INCLUDE) -fPIC -c libipt_ipp2p.c
$ (CC) -shared -o libipt_ipp2p.so libipt_ipp2p.o

Aparece a mensagem Makefile:44 faltando separador

Já verifiquei a linha 44 é é exatamente essa $(CC) $(CFLAGS) $(IPTABLES_OPTION) $(IPTABLES_INCLUDE) -fPIC -c libipt_ipp2p.c
que está igual a sua.
O que pode ser?

[20] Comentário enviado por magnolinux em 13/10/2009 - 09:34h

jardineti , verifica espaços na linha...

[21] Comentário enviado por jardineti em 27/10/2009 - 09:29h

Ok agora gerou os arquivos, mas na hora de instalar o módulo olha o que aparece: insmod: error inserting 'ipt_ipp2p.ko': -1 Unknown symbol in module.

O que pode ser?

[22] Comentário enviado por jardineti em 27/10/2009 - 10:15h

Cara faltava ativar o modulo x_tables. modprobe x_tables. Agora funcionou.
Parabéns pelo tuto.

Valeu.

[23] Comentário enviado por magnolinux em 24/11/2009 - 12:47h

Obrigado...

quando testei no debian lenny e do ubuntu 9.04, o modulo já estava carregado automatico..

Mais de toda maneira,,

obrigado

[24] Comentário enviado por fbsalvi em 07/12/2009 - 20:45h

Fiz todos os passos necessarios mas esta dando o erro abaixo... na hora de compilar o kernel...

Makefile:510: /usr/src/linux-2.6.24/arch/xen/Makefile: No such file or directory
make[1]: *** No rule to make target `/usr/src/linux-2.6.24/arch/xen/Makefile'. Stop.
make: *** [conf.vars] Error 2

Se alguem puder me ajudar, eu agadeço

Fabiano.

[25] Comentário enviado por magnolinux em 08/12/2009 - 07:36h

Boma dia fbsalvi..

Pela mensagem de erro, ele não ta encontrando esse arquivo Makefile no diretorio....

tente descompactar o kernel novamente, aplique os pacth e faça o teste novamente..

De uma olhada na versão do kernel com a versão dos pacth aplicados...

configura todos os passos...

Flwww

[26] Comentário enviado por monteirog12 em 25/02/2010 - 11:47h

Estou com o mesmo problema do fbsalvi!

Já baixei novamente o kernel, tentei com outra versão e nada... aparece a mesma mensagem!!


Fiz todos os passos necessarios mas esta dando o erro abaixo... na hora de compilar o kernel...

Makefile:510: /usr/src/linux-2.6.24/arch/xen/Makefile: No such file or directory
make[1]: *** No rule to make target `/usr/src/linux-2.6.24/arch/xen/Makefile'. Stop.
make: *** [conf.vars] Error 2

Se alguem puder me ajudar, eu agadeço

Fabiano.



[27] Comentário enviado por diego_luisCF em 28/03/2010 - 13:29h

monteirog12 dá uma olhada nesse link:
http://ubuntuforums.org/showthread.php?t=954838

resumindo, vc deve desmarcar a opção de suporte a paravirtualização no menuconfig


agora a minha dúvida:

estou usando o kernel 2.6.28, iptables 1.4.1 e o layer7 já tá rodando beleza.

o problema é que ao compilar o ipp2p não está gerando o arquivo ipt_ipp2p.o / ipt_ipp2p.ko. Qual seria o problema?

o make gera somente esses arquivos:

COPYING ipt_ipp2p.h libipt_ipp2p.o Makefile
ipt_ipp2p.c libipt_ipp2p.c libipt_ipp2p.so README

a saída da compilação é esta aqui:
make[1]: Leaving directory `/usr/src/linux-2.6.28'
gcc -O3 -Wall -DIPTABLES_VERSION=\"1.4.1.1\" -I/usr/src/iptables/include -fPIC -c libipt_ipp2p.c
gcc -shared -o libipt_ipp2p.so libipt_ipp2p.o


PS. já estou muito satisfeito com o layer7, o problema é que fiquei intrigado com isto.

[28] Comentário enviado por rndrama em 07/05/2010 - 17:42h

Parabéns Magno, ótimo artigo. Rodei com o Debian Lenny e deu tudo certo, só que o emule continua regaçando e não conseguir colocar o comando insmod ipt_ipp2p.ko para iniciar no boot. Não sei se meu firewall, o qual está muito simples, está com alguma brecha para o emule funcionar, vou postar ele aqui para ver se vc ou outro brother pode verificar melhor, segue.

#!/bin/sh
#
#chkconfig: 345 99 80
#Description: Firewall
#

modprobe ipt_layer7
modprobe xt_layer7

iptables="/usr/local/sbin/iptables"

IPLIBERADOSMSN="/etc/firewall/ip_liberados_msn"
BLOQMSNREDE="/etc/firewall/redes_bloqueadas_msn"
BLOQIMO=imo.im
PROTOCOLOS="/etc/firewall/protocolos"
PROTOCOLOS_P2P="/etc/firewall/protocolos_p2p"

iptables -F
iptables -F INPUT
iptables -F OUTPUT
iptables -F POSTROUTING -t nat
iptables -F PREROUTING -t nat
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -I FORWARD -m ipp2p --ipp2p -j DROP
iptables -I OUTPUT -m ipp2p --ipp2p -j DROP
iptables -I INPUT -m ipp2p --ipp2p -j DROP

iptables -A FORWARD -p udp -m ipp2p --kazaa --bit -j DROP
iptables -A FORWARD -p udp -m ipp2p --ipp2p --bit -j DROP
iptables -A FORWARD -p tcp -m ipp2p --edk --soul -j DROP
iptables -A FORWARD -p tcp -m ipp2p --ipp2p --soul -j DROP

#iptables -A FORWARD -p udp -m ipp2p --kazaa --bit -j DROP

################################################
#IPP2P
################################################
#for BARRAP2P in `cat $PROTOCOLOS_P2P`; do
# iptables -t filter -A FORWARD -m ipp2p $BARRAP2P -j DROP
#done

################################################
#Ultrasurf
################################################
iptables -t filter -N fdenyall
iptables -t filter -I FORWARD 1 -j fdenyall

iptables -P FORWARD ACCEPT

iptables -A POSTROUTING -t nat -s 172.18.15.0/24 -o eth0 -j MASQUERADE
iptables -A POSTROUTING -t nat -s 172.18.16.0/24 -o eth0 -j MASQUERADE
iptables -A POSTROUTING -t nat -s 172.18.17.0/24 -o eth0 -j MASQUERADE
iptables -A POSTROUTING -t nat -s 172.18.18.0/24 -o eth0 -j MASQUERADE

iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

iptables -A PREROUTING -t nat -s 172.18.15.0/24 -p tcp --dport 80 -j DNAT --to-destination 172.18.15.1:3128
iptables -A PREROUTING -t nat -s 172.18.16.0/24 -p tcp --dport 80 -j DNAT --to-destination 172.18.15.1:3128
iptables -A PREROUTING -t nat -s 172.18.17.0/24 -p tcp --dport 80 -j DNAT --to-destination 172.18.15.1:3128
iptables -A PREROUTING -t nat -s 172.18.18.0/24 -p tcp --dport 80 -j DNAT --to-destination 172.18.15.1:3128

################################################
#Layer7
################################################
for BARRAPROTO in `cat $PROTOCOLOS`; do
iptables -I FORWARD -m layer7 --l7proto $BARRAPROTO -d any/0 -j DROP
iptables -I FORWARD -m layer7 --l7proto $BARRAPROTO -d any/0 -j DROP
iptables -I INPUT -s 0/0 -m layer7 --l7proto $BARRAPROTO -j DROP
iptables -t mangle -A POSTROUTING -m layer7 --l7proto $BARRAPROTO -j DROP
done

################################################
#MSN
################################################
for LIBERARIP in `cat $IPLIBERADOSMSN`; do
iptables -I FORWARD -s $LIBERARIP -p tcp --dport 1863 -j ACCEPT
iptables -I FORWARD -s $LIBERARIP -d loginnet.passport.com -j ACCEPT
done

for BLOQUEARREDE in `cat $BLOQMSNREDE`; do
iptables -A FORWARD -s $BLOQUEARREDE -p tcp --dport 1863 -j REJECT
iptables -A FORWARD -s $BLOQUEARREDE -d loginnet.passport.com -j REJECT
done

################################################
#IMO
################################################
iptables -A FORWARD -d $BLOQIMO -p all -j DROP
iptables -A INPUT -d $BLOQIMO -p all -j DROP
iptables -A OUTPUT -d $BLOQIMO -p all -j DROP

[29] Comentário enviado por andre_ramos em 11/05/2010 - 11:30h

kara ao dar o comando make ele começa compilar mas da o seguinte erro:

oque pode ser?


# make
gcc -O3 -Wall -DIPTABLES_VERSION=\"1.4.3\" -I/usr/src/iptables/include -fPIC -c libipt_ipp2p.c
libipt_ipp2p.c: In function ‘parse’:
libipt_ipp2p.c:91: warning: implicit declaration of function ‘exit_error’
libipt_ipp2p.c: At top level:
libipt_ipp2p.c:379: error: variable ‘ipp2p’ has initializer but incomplete type
libipt_ipp2p.c:381: error: unknown field ‘next’ specified in initializer
libipt_ipp2p.c:381: warning: excess elements in struct initializer
libipt_ipp2p.c:381: warning: (near initialization for ‘ipp2p’)
libipt_ipp2p.c:382: error: unknown field ‘name’ specified in initializer
libipt_ipp2p.c:382: warning: excess elements in struct initializer
libipt_ipp2p.c:382: warning: (near initialization for ‘ipp2p’)
libipt_ipp2p.c:383: error: unknown field ‘version’ specified in initializer
libipt_ipp2p.c:383: warning: excess elements in struct initializer
libipt_ipp2p.c:383: warning: (near initialization for ‘ipp2p’)
libipt_ipp2p.c:384: error: unknown field ‘size’ specified in initializer
libipt_ipp2p.c:384: warning: excess elements in struct initializer
libipt_ipp2p.c:384: warning: (near initialization for ‘ipp2p’)
libipt_ipp2p.c:385: error: unknown field ‘userspacesize’ specified in initializer
libipt_ipp2p.c:385: warning: excess elements in struct initializer
libipt_ipp2p.c:385: warning: (near initialization for ‘ipp2p’)
libipt_ipp2p.c:386: error: unknown field ‘help’ specified in initializer
libipt_ipp2p.c:386: warning: excess elements in struct initializer
libipt_ipp2p.c:386: warning: (near initialization for ‘ipp2p’)
libipt_ipp2p.c:387: error: unknown field ‘init’ specified in initializer
libipt_ipp2p.c:387: warning: excess elements in struct initializer
libipt_ipp2p.c:387: warning: (near initialization for ‘ipp2p’)
libipt_ipp2p.c:388: error: unknown field ‘parse’ specified in initializer
libipt_ipp2p.c:388: warning: excess elements in struct initializer
libipt_ipp2p.c:388: warning: (near initialization for ‘ipp2p’)
libipt_ipp2p.c:389: error: unknown field ‘final_check’ specified in initializer
libipt_ipp2p.c:389: warning: excess elements in struct initializer
libipt_ipp2p.c:389: warning: (near initialization for ‘ipp2p’)
libipt_ipp2p.c:390: error: unknown field ‘print’ specified in initializer
libipt_ipp2p.c:390: warning: excess elements in struct initializer
libipt_ipp2p.c:390: warning: (near initialization for ‘ipp2p’)
libipt_ipp2p.c:391: error: unknown field ‘save’ specified in initializer
libipt_ipp2p.c:391: warning: excess elements in struct initializer
libipt_ipp2p.c:391: warning: (near initialization for ‘ipp2p’)
libipt_ipp2p.c:392: error: unknown field ‘extra_opts’ specified in initializer
libipt_ipp2p.c:393: warning: excess elements in struct initializer
libipt_ipp2p.c:393: warning: (near initialization for ‘ipp2p’)
libipt_ipp2p.c: In function ‘_INIT’:
libipt_ipp2p.c:399: warning: implicit declaration of function ‘register_match’
make: ** [libipt_ipp2p.so] Erro 1

[30] Comentário enviado por toyso em 24/05/2010 - 20:39h

Salve!

Amigo, infelizmente o novo Ares parece estar "furando" nosso ipp2p... tô quebrando a cabeça aqui com esse programa safado.
Mestre, busquei informações na internet e parece que o novo Ares é como se fosse outro programa. Mudaram muita coisa.
Se possível, dê uma luz para nós!

Abração e baita artigo!

[31] Comentário enviado por magnolinux em 06/07/2010 - 11:51h

amigos, estive ausente durante um tempo devido a muito trabalho. Se alguem ainda estive com problemas, poste que estarei respondendo sempre que possível..

e obrigado toiyso, estarei escrevendo outros em breve.

abraço.


[32] Comentário enviado por elciojr em 06/07/2010 - 15:12h

Magno, estou com os eguinte problema na compilação do ipp2p. O que pode ser?

ipt_ipp2p.c: At top level:
ipt_ipp2p.c:877: error: unknown field `family' specified in initializer
ipt_ipp2p.c:877: warning: initialization makes pointer from integer without a cast
ipt_ipp2p.c:878: error: unknown field `matchsize' specified in initializer
ipt_ipp2p.c:878: warning: implicit declaration of function `XT_ALIGN'
ipt_ipp2p.c:878: error: initializer element is not constant
ipt_ipp2p.c:878: error: (near initialization for `ipp2p_match.destroy')
ipt_ipp2p.c:879: warning: initialization from incompatible pointer type
make: ** [ipt_ipp2p.o] Erro 1

Obrigado!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts