O projeto Layer7 é um patch que permite ao Netfilter tratar a camada de aplicação. No meu caso, instalei especificamente para controlar MSN e transferência de arquivos pelo MSN. Porém ele trata muitos outros protocolos. Para conhecê-los, basta acessar o link:
Existem diversos tutoriais na internet que tratam sobre esta instalação de Layer7 com Iptables, porém devido a atualização de versões, entre outros fatores, sempre é bom fazer uma revisão atualizando os dados e melhorando em alguns pontos. Este artigo tem por objetivo esta revisão. Toda e qualquer sugestão de melhoria é bem vinda.
Procedimentos de instalação
Caso queira baixar todos os pacotes necessários antes de iniciar, seguem os links diretos para download:
1. Instalar pacotes necessários (caso falte alguma dependência, basta instalar ou se preferir faça a instalação dos pacotes abaixo usando o aptitude):
# apt-get install libncurses5-dev kernel-package gcc
2. Criar diretório para armazenar pacotes:
# mkdir /opt/layer7
# cd /opt/layer7
3. Baixar e descompactar o pacote do projeto Layer7 (utilizei a versão 2.21):
# wget -c http://downloads.sourceforge.net/project/l7-filter/l7-filter%20kernel%20version/2.21/netfilter-layer7-v2.21.tar.gz?use_mirror=ufpr&ts=1278937632
# tar zxvf netfilter-layer7-v2.21.tar.gz
4. Baixar e descompactar o fonte do Kernel (utilizei a versão 2.6.25.2):
# cd /root/
# wget -c ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.2.tar.bz2
# cd /usr/src
# tar jxvf /root/linux-2.6.25.2.tar.bz2
5. Aplicar o patch do Layer7 no novo kernel:
# cd /usr/src/linux-2.6.25.2
# patch -p1 < /opt/layer7/netfilter-layer7.v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch
6. Aproveitar configuração do kernel atual:
Caso queira usar as configurações do kernel atual no novo kernel, utilize os comandos abaixo. Provavelmente será necessário responder várias perguntas referentes a novos itens inclusos no novo kernel e que não existiam no atual. Para estas perguntas, caso não saiba as respostas, pressione então de fora a fora, pois depois você poderá rever as opções na próxima etapa).
# cp /boot/config-2.6[pressione o tab] /.config
# make oldconfig
7. Configurar o novo kernel:
# make menuconfig
Acesse os submenus como segue:
Networking
Networking options
Network packet filtering framework (netfilter)
Core Netfilter Configuration
Marque os módulos referentes ao Layer 7 (na dúvida marque todos os módulos). Volte 1 nível e entre no submenu:
IP: Netfilter Configuration
Marque o módulo "IPv4 connection tracking support (required for NAT)".
Marque o módulo "Full NAT" e demais sub-itens desse módulo.
Obs.: Em caso de instalar sem utilizar a configuração de kernel anterior, convém dar uma passada em todo o submenu de Networking afim de verificar se opções referentes a bridge, nat e afins estejam selecionadas.
Terminado, salve e saia.
8. Compilar o novo kernel e criar um pacote .deb do mesmo:
# make-kpkg -initrd kernel_image
Obs.: Caso esteja fazendo a atualização de um servidor remoto, por questões de segurança convém deixar este processamento em segundo plano.
# make-kpkg -initrd kernel_image &
Saia para tomar um merecido café, pois esta etapa demora um tempo considerável.
Obs.: A instalação manual também pode ser realizada, mas como se trata de Debian, não precisamos ficar "reiventando a roda", vamos gerar o pacote e deixar o dpkg fazer o resto. Mas caso queira fazer manualmente também funciona.
9. Instalar o novo kernel:
# dpkg -i ../linux-image-2.6.25[pressione TAB]
.deb
10. Reiniciar a máquina com o novo kernel:
# shutdown -r now
Obs.: Caso aconteça algum erro, dê boot com o kernel antigo e então remova este novo kernel para fazer melhorias.
# apt-get remove --purge linux-image-2.6.25.2
(para ver o nome correto do pacote faça: dpkg -l | grep linux-image)
11. Baixar o Iptables (utilizei a versão 1.4.0, pois as posteriores não obtive sucesso):
# cd /opt/layer7
# wget -c http://www.netfilter.org/projects/iptables/files/iptables-1.4.0.tar.bz2
12. Descompactar o fonte e aplicar o patch:
# cd /opt/layer7
# tar jxvf iptables-1.4.0.tar.bz2
# cd iptables-1.4.0
# patch -p1 < /opt/layer7/netfilter-layer7-v2.1/iptables-1.4-for-kernel-2.6.20forward-layer7-2.21.patch
# chmod 755 extension/.layer7-test
13. Remover o Iptables antigo e instalar a nova versão:
# aptitude purge iptables
# make KERNEL_DIR=/usr/src/linux-2.6.25 BINDIR=/sbin LIBDIR=/lib
# make install KERNEL_DIR=/usr/src/linux-2.6.25 BINDIR=/sbin LIBDIR=/lib
Verificar se tudo correu bem:
# iptables -n -L
# iptables -n -L -t nat
# ls -l /lib/iptables/*layer7*
14. Baixar e instalar os pacotes de protocolos do Layer7:
# cd /opt/layer7
# wget -c http://downloads.sourceforge.net/project/l7-filter/Protocol%20definitions/2009-05-28/l7-protocols-2009-05-28.tar.gz?use_mirror=ufpr&ts=1278938145
# tar zxvf l7-protocols-2009-05-28.tar.gz
# cd l7-protocols-2009-05-28
# make install
# ls /etc/l7-protocols/protocols
Dicas importantes a respeito do Layer7
Dica 1: Caso você já tenha o Layer7 funcionando e necessite apenas atualizar os protocolos suportados, basta fazer apenas o item 14, observando é claro o nome do novo arquivo de protocolos. O que acontece é apenas copiar os novos pacotes de protocolos em cima dos antigos. Então convém fazer um backup dos arquivos dos protocolos antigos.
Dica 2: Nem sempre todos os pacotes mais recentes envolvidos funcionam plenamente em conjunto, então observe as versões de kernel, iptables e layer7 compatíveis antes fazer as compilações.