[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Quais as Portas do Msn ?? - como bloquear pelo squid - não funcionou



Aí vai. Se alguém achar algum erro ou inconsistência, favor me avisar.
Quem quiser publicar este artigo em seu site, sinta-se à vontade, mas
por favor, desde que seja citado o autor. Um abraço, Fabiano.
Incrementando seu Firewall com o Layer 7 Filter

Neste artigo demonstro como compilar, instalar e utilizar o L7 Filter,
um filtro de pacotes que se baseia no protocolo da aplicação utiliza.

1) Introdução

As formas tradicionais de classificação 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, são
suficientes na maioria dos casos. Porém ela pode ser ineficaz em
alguns casos específicos, como por exemplo, no caso de programas de
P2P (programas de compartilhamento de arquivos, como o Kazaa) que
utilizam portas aleatórias ou em caso de serviços rodando em uma porta
não padrão (por exemplo um servidor HTTP rodando na porta 1111). Em
casos como este, o uso de um classificador de pacotes que faz a
análise dos dados na camada de aplicação (camada 7 do modelo OSI)
torna-se indispensável.

2) Funcionamento

O sistema atua como uma extensão do iptables, e é utilizado através 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) estejam entrando na máquina (-I
INPUT). Vale lembrar que o protocolo FastTrack é utilizado pelo Kazaa
e por outros aplicativos P2P. Perceba que não é feita nenhuma
referência à portas ou endereços IP (embora elas possam ser utilizadas
em conjunto - você poderia escrever essa regra de forma a afetar
apenas um host especificamente).

Também é possível utilizar o L7-Filter em conjunto com a ferramenta
tc, para fazer controle de banda.

3) Arquivos necessários

3.1) Arquivos do projeto (disponíveis em http://l7-filter.sf.net)
  netfilter-layer7-vX.X.X.tar.gz -> Contém os patches que serão
aplicados no kernel e no iptables (X.X.X é a versão do arquivo)
  l7-protocols-YYYY_MM_DD.tar.gz -> Contém os arquivos com as
definições de protocolos. (YYYY_MM_DD é a data das definições)

3.2) Fontes do Kernel (disponíveis em http://www.kernel.org ou nos
CD's/repositórios da sua distribuição)
  Pacote Debian (sarge): FIXME
  Pacote Conectiva 10  : kernel26-source-2.6.11-72032U10_21cl.i386.rpm
  Pode ser utilizado um kernel da família 2.4 ou 2.6 (nos meus
exemplos, estarei utilizando a família 2.6)
  Obs: É preferível que você SEMPRE utilize os fontes cedidos pela sua
distribuição. A razão é que as distribuições costumam aplicar patches
elas mesmas no kernel, e utilizar o kernel direto de
http://www.kernel.org (que não vai conter esses patches), pode fazer
com que algo deixe de funcionar. VOCÊ FOI AVISADO !!!!

3.3) Fontes do iptables (disponíveis em http://www.netfilter.org ou
nos CD's da sua distribuição)
  Pacote Debian (sarge): apt-get source iptables
  Pacote Conectiva 10  : não tem (ou eu não achei :-P )
  Obs: Pelos motivos já expostos acima, é preferível que você utilize
o fonte do iptables da sua distribuição, à menos que ele seja muito
antigo (a versão mínima recomendada pelos autores é a 1.2.11 ).

4) 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 versão do kernel de http://www.kernel.org)

Obs: É necessário que as coisas sejam feitas nesta ordem.

4.1) Patch do Kernel (aqui vou considerar que você já possui os fontes
do seu kernel no diretório /usr/src/linux-2.6.xx e que um link
simbólico de nome /usr/src/linux aponta para este diretório.).

Entre no diretório /usr/src/linux e execute o seguinte comando

# patch -p1 < ../netfilter-layer7-vX.X.X/kernel-2.6-layer7-X.X.X.patch

Após isso, você deve habilitar algumas coisas no kernel:

* Em "Device Drivers -> Networking support -> Networking options"
marque a opção "Network packet filtering". Depois entre nela e em
"Netfilter Configuration" e marque "Layer 7 match support". Você
provavelmente vai querer marcar outras opções, ou talvez todas elas.

* Se você pretende utilizar o CBQ ou o HTB para limitação de banda (eu
utilizo o HTB), você deve verificar se eles estão selecionados em
"Device Drivers -> Networking support -> Networking options -> QoS
and/or fair queueing". Aqui eu tenho todas as opções 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 versão do Kernel
quando você digitar "uname -r".

Feito isso, compile e instale o novo kernel. Não vou entrar em
detalhes aqui sobre como fazer isso, pois isso fugiria do escopo do
artigo e já há muita documentação sobre isso na Internet.

4.2) Patch do iptables

Entre no diretório /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

4.3) Arquivos de Definições de Protocolos

Entre no diretório /usr/src/l7-protocols-YYYY_MM_DD e digite o comando

# make install

Isso vai criar um diretório /etc/l7-protocols e copiar os arquivos
para lá. Simples não? Quando for atualizar as definições basta repetir
estes passos (descompactar o arquivo com as definições atualizadas,
entrar na pasta e executar "make install").

5) Testando e Exemplos

Testando:
Crie uma regra qualquer que combine com um protocolo que você utilize
nesta máquina. Por exemplo, se você possui um servidor web rodando
nesta máquina, crie a seguinte regra:

# iptables -A INPUT -m layer7 --l7proto http

Agora gere algum tráfego (acessando as páginas 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 máquina enviou via protocolo http). Eu uso essa
técnica (junto com awk/grep/cut e rrdtool) para gerar gráficos 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 pressupõe que você conhece um pouco de CBQ/HTB. Caso
você não esteja familiarizado com a ferramenta tc, sugiro uma lida nos
artigos que estão na área de referência.

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 número
(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

-----------------------------------------------------------------------------------------------------------------------------

Referências e Leitura Recomendada:

* Site do Projeto Layer 7 Classifier (http://l7-filter.sf.net)

* Layer 7 Classifier HOWTO (http://l7-filter.sourceforge.net/HOWTO)

* Artigos sobre HTB no BR-Linux
(http://br-linux.org/tutoriais/001648.html e
http://br-linux.org/tutoriais/001794.html)

* Linux Advanced Routing & Trafic Control HowTo (LARTC) (http://www.lartc.org)

* The Ultimate Traffic Conditioner
(http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.cookbook.ultimate-tc.html)

Em 04/01/06, Luiz Gonzaga da Mata<gonzaga@pbh.gov.br> escreveu:
> Em Qua, Janeiro 4, 2006 18:17, Fabiano Pires escreveu:
> > Eu fiz um tutorial explicando como instalar e utilizar o l7-filter.
> > Está aguardando aprovação no "Viva o Linux". Caso haja interesse,
> > posso enviá-lo via email para a Lista
> >
>
> Fabiano,
>
> Se puder enviar o tutorial para meu email, agradeço.
>
> Um abraço,
>
> Luiz Gonzaga da Mata.
>
>
>
>
>


--
Abraços,
Fabiano



Reply to: