Vous êtes sur la page 1sur 5

Incrementando seu Firewall com o Layer 7 Filter

Autor: Fabiano <fabiano.pires at gmail.com> Data: 26/04/2006 Introduo As formas tradicionais de classificao de pacotes, baseadas geralmente no tipo de protocolo de transporte, na camada 4 do modelo de rede OSI (TCP ou UDP) e nas portas de origem e/ou destino, so suficientes na maioria dos casos. Porm ela pode ser ineficaz em alguns casos especficos, como por exemplo, no caso de programas de P2P (programas de compartilhamento de arquivos, como o Kazaa), que utilizam portas aleatrias ou em caso de servios rodando em uma porta no padro (por exemplo um servidor HTTP rodando na porta 1111). Em casos como este, o uso de um classificador de pacotes que faz a anlise dos dados na camada de aplicao (camada 7 do modelo OSI) torna-se indispensvel.

Funcionamento
O sistema atua como uma extenso do iptables, e utilizado atravs da sintaxe "-m layer7 --l7proto XXXX", onde XXXX o protocolo desejado (veremos alguns exemplos mais frente). Vamos a um exemplo mais concreto: # iptables -I INPUT -m layer7 --l7proto fasttrack -j DROP Este comando "derruba" (-j DROP) pacotes que utilizem o protocolo FastTrack (--l7proto fasttrack) e estejam entrando na mquina (-I INPUT). Vale lembrar que o protocolo FastTrack utilizado pelo Kazaa e por outros aplicativos P2P. Perceba que no feita nenhuma referncia portas ou endereos IP (embora elas possam ser utilizadas em conjunto - voc poderia escrever essa regra de forma a afetar apenas um host especificamente). Tambm possvel utilizar o L7-Filter em conjunto com a ferramenta tc, para fazer controle de banda. Arquivos necessrios 2.1) Arquivos do projeto (disponveis em http://l7-filter.sf.net)

netfilter-layer7-vX.X.X.tar.gz -> Contm os patches que sero aplicados no kernel e no iptables (X.X.X a verso do arquivo) l7-protocols-YYYY_MM_DD.tar.gz -> Contm os arquivos com as definies de protocolos. (YYYY_MM_DD a data das definies)

2.2) Fontes do kernel (disponveis em http://www.kernel.org ou nos CD's/repositrios da sua distribuio)


Pacote Debian (sarge): FIXME Pacote Conectiva 10 : kernel26-source-2.6.11-72032U10_21cl.i386.rpm Pode ser utilizado um kernel da famlia 2.4 ou 2.6 (nos meus exemplos, estarei utilizando a famlia 2.6)

OBS: prefervel que voc SEMPRE utilize os fontes cedidos pela sua distribuio. A razo que as distribuies costumam aplicar patches elas mesmas no kernel e utilizar o kernel direto de www.kernel.org (que no vai conter esses patches), pode fazer com que algo deixe de funcionar. VOC FOI AVISADO!!!! 2.3) Fontes do iptables (disponveis em http://www.netfilter.org ou nos CD's da sua distribuio)

Pacote Debian (sarge): apt-get source iptables Pacote Conectiva 10 : no tem (ou eu no achei :-P )

OBS: Pelos motivos j expostos acima, prefervel que voc utilize o fonte do iptables da sua distribuio, a menos que ele seja muito antigo (a verso mnima recomendada pelos autores a 1.2.11 ). Descompactando, compilando e instalando Para facilitar, vamos descompactar todos os arquivos em /usr/src. # tar -zxvf netfilter-layer7-vX.X.X.tar.gz -C /usr/src # tar -zxvf l7-protocols-YYYY_MM_DD.tar.gz -C /usr/src # tar -jxvf iptables-1.X.XX.tar.bz2 -C /usr/src # tar -jxvf linux-2.6.XX.tar.bz2 -C /usr/src (se voc estiver utilizando a verso do kernel de www.kernel.org) OBS: necessrio que as coisas sejam feitas nesta ordem. 3.1) Patch do kernel (aqui vou considerar que voc j possui os fontes do seu kernel no diretrio /usr/src/linux-2.6.xx e que um link simblico de nome /usr/src/linux aponta para este diretrio). Entre no diretrio /usr/src/linux e execute o seguinte comando: # patch -p1 < ../netfilter-layer7-vX.X.X/kernel-2.6-layer7-X.X.X.patch

Aps isso, voc deve habilitar algumas coisas no kernel:

Em "Device Drivers -> Networking support -> Networking options" marque a opo "Network packet filtering". Depois entre nela e em "Netfilter Configuration" e marque "Layer 7 match support". Voc provavelmente vai querer marcar outras opes, ou talvez todas elas. Se voc pretende utilizar o CBQ ou o HTB para limitao de banda (eu utilizo o HTB), voc deve verificar se eles esto selecionados em "Device Drivers -> Networking support -> Networking options -> QoS and/or fair queueing". Aqui eu tenho todas as opes selecionadas. Opcionalmente voc pode editar o arquivo Makefile do Kernel e na linha EXTRAVERSION voc acrescenta a um texto sugestivo (como L7 ou algo assim ...). Esse texto vai aparecer junto da verso do Kernel quando voc digitar "uname -r".

Feito isso, compile e instale o novo kernel. No vou entrar em detalhes aqui sobre como fazer isso, pois isso fugiria do escopo do artigo e j h muita documentao sobre isso na Internet. 3.2) Patch do iptables Entre no diretrio /usr/src/iptables-1.X.XX e execute o seguinte comando: # patch -p1 < ../netfilter-layer7-vX.X.X/iptables-layer7-X.X.X.patch Compile o iptables com o comando: Conectiva: # make BINDIR=/usr/bin LIBDIR=/usr/lib MANDIR=/usr/man Debian Sarge: # make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man e instale com o comando: Conectiva: # make BINDIR=/usr/bin LIBDIR=/usr/lib MANDIR=/usr/man install Debian Sarge: # make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install

3.3) Arquivos de definies de protocolos Entre no diretrio /usr/src/l7-protocols-YYYY_MM_DD e digite o comando: # make install Isso vai criar um diretrio /etc/l7-protocols e copiar os arquivos para l. Simples no? Quando for atualizar as definies basta repetir estes passos (descompactar o arquivo com as definies atualizadas, entrar na pasta e executar "make install"). Testando e exemplos Testando: Crie uma regra qualquer que combine com um protocolo que voc utilize nesta mquina. Por exemplo, se voc possui um servidor web rodando nesta mquina, crie a seguinte regra: # iptables -A INPUT -m layer7 --l7proto http Agora gere algum trfego (acessando as pginas do seu servidor) e em seguida execute o seguinte comando: # iptables -nvxL OUTPUT -m layer7 --l7proto http Isto vai mostrar a contagem de pacotes e bytes que casam com esta regra (pacotes que a mquina enviou via protocolo http). Eu uso essa tcnica (junto com awk/grep/cut e rrdtool) para gerar grficos de consumo de banda.

Bloqueando protocolos
# iptables -A FORWARD -m layer7 --l7proto msnmessenger -j DROP e acabe com o uso do MSN Messenger na sua rede.

Limitando ("shapeando") a taxa de downloads


OBS: Este exemplo pressupe que voc conhece um pouco de CBQ/HTB. Caso voc no esteja familiarizado com a ferramenta tc, sugiro uma lida nos artigos que esto na rea de referncia.

Use o iptables para marcar os pacotes que coincidem com sua regra: # iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6 No caso foi colocada a marca 6. Poderia ser utilizado qualquer nmero (desde que seja inteiro, positivo e diferente de zero) Depois, crie um filtro que pega tudo o que estiver com a marca definida (6, no nosso caso) e joga para a classe definida (no caso abaixo 1:1). # tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 6 fw flowid 1:1 Bibliografia e leituras recomendadas

Site do Projeto Layer 7 Classifier Layer 7 Classifier HOWTO Artigos sobre HTB no BR-Linux: http://br-linux.org/tutoriais/001648.html http://br-linux.org/tutoriais/001794.html Linux Advanced Routing & Trafic Control HowTo (LARTC) The Ultimate Traffic Conditioner

http://www.vivaolinux.com.br/artigo/Incrementando-seu-Firewall-com-o-Layer-7-Filter Voltar para o site

Vous aimerez peut-être aussi