Linux slogan
Visite também: BR-Linux.org · Dicas-L · NoticiasLinux · SoftwareLivre.org · UnderLinux · BestLinux
» Screenshot



» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha

» Wallpaper
Linux: Que bizarro
Por Airozi


Artigo

Adicionando suporte ao Layer7 no Debian Lenny
Linux user
gondim
22/10/2009
Hoje veremos como implementar uma extensão do Netfilter chamada Layer7. Com o Layer7 pode-se filtrar pacotes baseados na camada 7, que é a camada de aplicação do modelo OSI. Isso quer dizer que podemos filtrar pelo protocolo da aplicação e não somente pelas portas como fazemos tradicionalmente. O Layer7 tem muita aplicação quando desejamos bloquear programas P2P, como Kazaa por exemplo.
Por: Marcelo Gondim
[ Hits: 2070 ]
Conceito: 10.0   2 voto(s)2 voto(s)2 voto(s)2 voto(s)2 voto(s) + quero dar nota ao artigo

Adicionando suporte ao Layer7 no Debian Lenny

Este é um artigo explicando como colocar o suporte ao Layer7 no Debian Lenny e para isso precisaremos modificar tanto o pacote .deb do kernel quanto do iptables, porque ambos precisarão ter suporte à este. O Debian é uma distribuição GNU/Linux bem tradicionalista, muito estável, com excelente performance e com mais de 20.000 pacotes binários em seus repositórios oficiais.

Vamos precisar dos seguintes pacotes já pré-instalados para que não tenhamos erros na compilação dos pacotes:

# aptitude install fakeroot libncurses5-dev kernel-package dpkg-dev file gcc g++ libc6-dev make patch perl autoconf automake dh-make debhelper devscripts fakeroot gnupg g77 gpc xutils lintian quilt libtool libselinux1-dev linuxdoc-tools zlib1g-dev

Primeiramente vamos baixar o fonte do kernel, porque a partir dele vamos aplicar os patches que necessitamos e logo após geraremos novos pacotes .deb. Abaixo nós temos os comandos para baixarmos nosso fonte do kernel e logo após descompactarmos ele:

# cd /usr/src
# aptitude install linux-source-2.6.26
# tar -xvjpf linux-source-2.6.26.tar.bz2


Criaremos um link simbólico para facilitar nossa vida:

# ln -sf linux-source-2.6.26 linux

Agora baixaremos o Layer7 para aplicarmos no kernel e no iptables mais tarde. Para isso acessaremos http://sourceforge.net/projects/l7-filter/files/ e baixaremos o netfilter-layer7-v2.22.tar.gz em /usr/src. Logo em seguida descompactaremos nosso programa:

# cd /usr/src
# tar -xvzpf netfilter-layer7-v2.22.tar.gz


Agora que temos os arquivos necessários precisamos copiar o patch para o kernel e aplicá-lo. Como nosso kernel no Debian Lenny é o 2.6.26, então usaremos o patch para kernels de 2.6.25 à 2.6.28:

# cd netfilter-layer7-v2.22
# cp kernel-2.6.25-2.6.28-layer7-2.22.patch /usr/src/linux/
# cd /usr/src/linux
# patch -p1 < kernel-2.6.25-2.6.28-layer7-2.22.patch


Agora que aplicamos o patch no kernel, precisamos habilitá-lo antes de compilarmos nosso novo kernel:

# cp /boot/config-2.6.26-2-686 /usr/src/linux/.config
# make menuconfig


Siga o menu abaixo para habilitar o Layer7 no kernel:

Networking ---> Networking options ---> Network packet filtering framework (Netfilter) ---> Core Netfilter Configuration --->
<M>   "layer7" match support
[ ]     Layer 7 debugging output

Volte e saia salvando. Agora para gerarmos nosso novo kernel faremos os comandos abaixo:

# make-kpkg clean
# fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers


Bem, nesse momento seria interessante uma pipoca e um bom filme, pois esse procedimento levará bastante tempo. Se tudo correr bem no final teremos o pacote .deb do kernel e instalaremos como abaixo:

# cd /usr/src
# dpkg -i linux-image-2.6.26-custom_2.6.26-custom-10.00.Custom_i386.deb


Agora que instalamos nosso novo kernel, precisamos apontar ele no /boot/grub/menu.lst alterando o parâmetro "default 0" para o seu novo kernel. No meu caso aqui ficou "default 2". Tendo feito isso, reinicie seu sistema e certifique-se de entrar com seu novo kernel. Após o boot, para ter certeza execute:

# uname -a
Linux debian 2.6.26-custom #1 SMP Mon Oct 19 17:36:31 BRST 2009 i686 GNU/Linux

Lá está nosso kernel custom carregado. Agora partiremos para o iptables.

Copiaremos xt_layer7.h do kernel para o lugar correto onde será usado na hora da compilação do iptables:

# cp /usr/src/linux-source-2.6.26/include/linux/netfilter/xt_layer7.h /usr/include/linux/netfilter/

Agora vamos instalar nosso fonte do iptables. Antes certifique-se que os repositórios de fontes estão habilitados no /etc/apt/sources.list:

# cat /etc/apt/sources.list

deb http://ftp.br.debian.org/debian/ lenny main
deb-src http://ftp.br.debian.org/debian/ lenny main # repositório de fonte
deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main # repositório de fonte
deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

Para instalar o fonte do iptables façamos:

# cd /usr/src
# apt-get source iptables


Agora vamos copiar os arquivos necessários para que layer7 seja incorporado ao nosso iptables:

# cp /usr/src/netfilter-layer7-v2.22/for_older_iptables/iptables-1.4.1.1-for-kernel-2.6.20forward/* /usr/src/iptables-1.4.2/extensions

Bem, só precisamos gerar nosso novo pacote iptables e para isso façamos os procedimentos abaixo:

# cd /usr/src/iptables-1.4.2
# dpkg-buildpackage -rfakeroot


No final do comando acima teremos nosso pacote .deb do iptables e para instalá-lo façamos:

# cd /usr/src
# dpkg -i iptables_1.4.2-6_i386.deb


Isso vai nos gerar um problema, porque quando fizermos um "aptitude dist-upgrade", por exemplo, o sistema vai querer atualizar o iptables com a versão oficial. Para que isso não ocorra criaremos, se não existir, o arquivo /etc/apt/preferences e colocaremos nele as seguintes linhas:

Package: iptables
Pin: version 1.4.2
Pin-Priority: 1001

Para usarmos nosso novo sistema de filtragem Layer7 também precisaremos dos protocolos que iremos utilizar, que podem ser baixados do seguinte site:
São os arquivos .pat e devem ser colocados em /etc/l7-protocols/. Esse diretório não vai existir, logo precisamos criá-lo:

# mkdir /etc/l7-protocols/

Agora vamos fazer um teste prático. Baixaremos o .pat do ssh:

# cd /etc/l7-protocols
# wget -c
http://l7-filter.sourceforge.net/layer7-protocols/protocols/ssh.pat

Vamos carregar nosso módulo:

# modprobe xt_layer7

E agora a nossa regra para bloquear o protocolo "ssh", mas o "telnet" na porta 22 funcionará. Estamos bloqueando o protocolo independente da sua porta.

Em nosso servidor fiz a regra abaixo que diz para bloquear qualquer ssh da estação 192.168.10.253 para ele:

# iptables -I INPUT -s 192.168.10.253 -m layer7 --l7proto ssh -j DROP

Da estação 192.168.10.253 fiz primeiro um telnet na porta 22 para mostrar que a regra permite o acesso:

# telnet 192.168.10.175 22
Trying 192.168.10.175...
Connected to 192.168.10.175.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.1p1 Debian-5

Como podem ver a conexão fechou com o serviço ssh. Agora farei o ssh para o servidor:

# ssh 192.168.10.175
......

Não conecta porque o protocolo ssh está bloqueado. Funcionou perfeitamente!

Bem, espero ter ajudado. :)

Marcelo Gondim <gondim @ linuxinfo.com.br>



Páginas do artigo
   1. Adicionando suporte ao Layer7 no Debian Lenny

Outros artigos deste autor

Leitura recomendada

Comentários
[1] Comentário enviado por silent-man em 22/10/2009 - 08:32h:

Bom artigo, apesar de existir vários com esse assunto para debian e derivados.

Só tenho uma pergunta:

Por que não usar uma versão mais recente do kernel?

OBS: não é crítica nenhuma. O Artigo está Bom!

[2] Comentário enviado por gondim em 22/10/2009 - 08:54h:

Olá silent-man,

Poderia ser feito com um kernel mais recente sim. :) O objetivo do artigo era tipo usar tudo do próprio Debian de forma que facilitasse e ainda pudesse ser gerado os pacotes com o suporte ao Layer7. Tirando a demora da compilação do kernel, seguindo os passos rapidamente coloquei o suporte no Debian pois precisei fazer isso recentemente em um cliente. :)
Recentemente fiz o mesmo para o CentOS 5.3. :D

[3] Comentário enviado por bino28 em 22/10/2009 - 11:36h:

Parabéns Gondim. Mais um excelente tutorial.

[]'s

[4] Comentário enviado por removido em 22/10/2009 - 13:51h:

Parabéns Pelo artigo.


Pena que o Layer7 nao consegue bloquear o msn da versão 7 para cima.


Mesmo Utilizando os plugins msnmessenger msn-filtertransfer.




[5] Comentário enviado por grandmaster em 23/10/2009 - 09:37h:

Otimo artigo.

Essa do MSN é a briga do gato e do rato :D

---
Renato de Castro Henriques
CobiT Foundation 4.1 Certified ID: 90391725
http://www.renato.henriques.nom.br


[6] Comentário enviado por andrefreire em 25/10/2009 - 13:04h:

Boa tarde !

Para douglashx : Tenho Layer 7 aqui instalado e nenhuma versão de MSN consegue passar ! Reveja suas configurações !

[7] Comentário enviado por Marcus-RJ em 26/10/2009 - 14:22h:

"O objetivo do artigo era tipo usar tudo do próprio Debian de forma que facilitasse e ainda pudesse ser gerado os pacotes com o suporte ao Layer7"

Era exatamente o que eu estava procurando e pude encontrar aqui. Nao pude encontrar um artigo desse tipo nem mesmo em ingles. Parabens mesmo, e valeu pela ajuda!

Tentei habilitar o suporte ipp2p, mas a combinacao de iptables + kernel do debian lenny acabou me cansando. mas eh possivel fazer usando o repositorio unstable.

Otimo tutorial, extremamente relevante!


Contribuir com comentário
  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Copyleft 2002-2009 Viva o Linux.com.br

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.