From UnderLinux Wiki
Por Rafael M. Capovilla - 1c3_m4n - iceman NAOSPAM underlinux com br
Introdução
O projeto l7-filter é um "classificador" para o subsistema do Kernel Netfilter que identifica pacotes baseado no conteúdo da camada de aplicação (camada 7 OSI). Isto significa que é possivel facilmente classificar pacotes como HTTP,FTP,eDonkey,MSN,etc.. além das portas. Ele complementa os classificadores existentes que comparam endereços, portas,etc.
A intenção do l7-filter é para ser utilizado em conjunto com o QoS, mas é possível utilizá-lo como meio de filtrar o que entra e sai da rede.
Pacotes necessários
Kernel - http://www.kernel.org
Iptables - http://www.netfilter.org
L7-filter - http://l7-filter.sourceforge.net/
Neste exemplo estou utilizando
Kernel - 2.6.11.8
Iptables - 1.3.1
Mão na massa
Não vou entrar em detalhes de como se compila o kernel neste tutorial, vou apenas mostar como aplicar o patch necessário:
tar -zxvf netfilter-layer7-v1.3.tar.gz
cd /path/do/kernel
patch -p1 < /path/do/netfilter-layer7-v1.3/kernel-2.6.11-layer7-1.3.patch
Agora execute o make menuconfig ou xconfig para entrar nas opções do kernel e ative:
# EXPERIMENTAL (Code maturity level options > Prompt for development and/or incomplete code/drivers)
# Netfilter (Device Drivers > Networking support > Networking Options > Network packet filtering)
# Connection tracking (Network packet filtering > IP: Netfilter Configuration > Connection tracking)
# "Connection tracking flow accounting" and "IP tables support" (na mesma tela)
# "Layer 7 match support" (mesma tela)
# Opcional: as demais opções para o iptables
Recompile o kernel e reinicie o sistema
Agora vamos (re)compilar o iptables:
cd /path/do/iptables
patch -p1 < /path/do/netfilter-layer7-v1.3/iptables-layer7-1.3.patch
make KERNELDIR=/path/do/kernel
make KERNELDIR=/path/do/kernel install
O último passo antes de começar a criar as regras é copiar os
protocolos do l7, descompacte o arquivo l7-protocols-2005-04-29.tar.gz
e copie seu conteúdo para o diretório /etc/l7-protocols/, vc deve ficar
com uma estrutura parecida com esta:
|
root@under:/etc/l7-protocols# ls
CHANGELOG LICENSE README extra l7-protocols.spec protocols
HOWTO Makefile WANTED file_types malware
|
Cada um destes diretórios contém alguns protocolos prontos para serem utilizados, por exemplo dentro do diretorio protocols existem as regras:
|
root@under:/etc/l7-protocols# ls protocols/
100bao.pat gkrellm.pat nbns.pat socks.pat
README gnucleuslan.pat ncp.pat soribada.pat
aim.pat gnutella.pat netbios.pat ssdp.pat
aimwebcontent.pat goboogy.pat nntp.pat ssh.pat
applejuice.pat gopher.pat openft.pat subspace.pat
ares.pat h323.pat poco.pat telnet.pat
battlefield1942.pat hddtemp.pat pop3.pat tesla.pat
bgp.pat hotline.pat pressplay.pat tftp.pat
biff.pat http.pat qq.pat tls.pat
bittorrent.pat ident.pat quake-halflife.pat tsp.pat
ciscovpn.pat imap.pat quake1.pat unknown.pat
counterstrike.pat ipp.pat rdp.pat validcertssl.pat
cvs.pat irc.pat rlogin.pat vnc.pat
dhcp.pat jabber.pat rstp.pat x11.pat
directconnect.pat kugoo.pat shoutcast.pat xboxlive.pat
dns.pat live365.pat sip.pat yahoo.pat
edonkey.pat lpd.pat skype.pat zmaap.pat
fasttrack.pat msn-filetransfer.pat smb.pat
finger.pat msnmessenger.pat smtp.pat
ftp.pat mute.pat snmp.pat
|
|
Exemplos de Regras
Concluídos os passos anteriores, podemos criar as regras que utilizarão o l7, darei apenas um simples exemplo, mas você pode facilmente criar suas regras, basta ter um pouco de conhecimento em iptables, para maiores informações sobre ele veja: http://iptables.underlinux.com.br
Regra para bloquear o MSN na rede INTERNA:
#!/bin/bash
IPTABLES=/sbin/iptables
LANNET=192.168.0.0/24
$IPTABLES -A FORWARD -m layer7 --l7proto msnmessenger -d $LANNET -j DROP
$IPTABLES -A FORWARD -m layer7 --l7proto msnmessenger -s $LANNET -j DROP
Conclusão
Colocar o l7-filter da um pouco de trabalho no início, mas depois de tudo compilado reduz o seu trabalho em criação de regras para bloqueios como no caso do msn, se você for utilizar apenas iptables + squid você vai precisar criar uma série de bloqueios e mesmo assim corre o risco de seus usuários acessarem o msn por proxys externos,tuneis,etc. O l7-filter consegue bloquear tudo isso facilmente pois ele analisa o conteudo do pacote, além de endereços ou portas. Além disso é possível criar seus próprios filtros, ainda estou estudando esta parte mas me parece perfeitamente possível utilizar as regras do snort com o l7-filter e bloquear worms,ataques,etc diretamente. Existe o outro patch para netfilter chamado patch-o-matic que tem o mesmo intuito, de analisar o conteúdo do pacote, mas o patch-o-matic tem uma desvantagem, ele não analisa o pacote pela camada de aplicação como o l7-filter faz, isso faz com que o patch-o-matic consuma muitos recursos da máquina.
Se você quiser aprender como criar seus próprios protocolos para o l7-filter leia este documento: Pattern Writing Howto
|