Neste passo-a-passo, foi utilizada a distribuição Debian
Linux. Porém, os passos a serem seguidos em qualquer distribuição são similares. Para qualquer um que conhece o processo de compilação do kernel, o processo é trivial.
Existem alguns tutoriais que explicam a instalação de versões mais antigas do Layer 7 e/ou utilizando versões mais antigas do kernel e/ou do Iptables. Iremos mostrar neste tutorial a instalação da última versão do Layer 7, na última versão do kernel que suporta o Layer 7 (2.6.25) e nas versões mais recentes do Iptables (1.4.1.1 em diante).
Embora seja possível a utilização do Layer 7 em "user space", mostraremos aqui a instalação no kernel, uma vez que a rapidez no tratamento de pacotes é superior.
Então, vamos lá. São necessários privilégios de superusuário. Iremos realizar o processo no diretório /usr/src:
# cd /usr/src
Vamos agora baixar os fontes do kernel 2.6.25:
# wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.tar.bz2
Baixando os fontes do Iptables 1.4.1.1:
# wget -c ftp://ftp.netfilter.org/pub/iptables/iptables-1.4.1.1.tar.bz2
Baixando os fontes do Layer 7 compatíveis com as versões do kernel e do Iptables utilizadas:
# wget -c http://downloads.sourceforge.net/l7-filter/netfilter-layer7-v2.20.tar.gz?modtime=1219454763&big_mirror=0
Baixando as definições dos protocolos para o Layer 7:
# wget -c http://downloads.sourceforge.net/l7-filter/l7-protocols-2008-10-04.tar.gz?modtime=1223085729&big_mirror=0
Instalando algumas aplicações necessárias para desempacotar os fontes:
# apt-get install gzip
# apt-get install bzip2
Instalando a biblioteca necessária para abrirmos a tela de configuração do kernel:
# apt-get install libncurses5-dev
Instalando a ferramenta que ajuda a automatizar o processo de instalação do novo kernel do Debian:
# apt-get install kernel-package
Vamos agora desempacotar os fontes baixados:
# tar xjvf iptables-1.4.1.1.tar.bz2
# tar xzvf l7-protocols-2008-10-04.tar.gz
# tar xzvf netfilter-layer7-v2.20.tar.gz
# tar xjvf linux-2.6.25.tar.bz2
Vamos criar agora um link simbólico para o diretório com o código fonte do kernel baixado:
# ln -s /usr/src/linux-2.6.25 /usr/src/linux
Como já temos o .config do kernel que está rodando agora na máquina, vamos copiá-lo para o diretório com os fontes do kernel. Caso queira customizar o kernel para seu hardware "do zero", ou seja, sem usar o .config, sinta-se à vontade. Utilizei o .config aqui por uma questão de praticidade apenas e para garantir que vai funcionar. Copiando então:
# cp /boot/config-2.6.22-3-686 /usr/src/linux/.config
Vamos aplicar agora o patch do Layer 7 correspondente ã nossa versão do kernel:
# patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch
Agora, vamos à configuração do kernel:
# cd linux
# make menuconfig
As opções que devem ser habilitadas são as seguintes:
General Setup --> Prompt for development and/or incomplete code/drivers
Networking --> Networking support --> Networking options --> Network packet filtering framework (Netfilter)
Networking --> Networking support --> Networking options --> Network packet filtering framework (Netfilter) --> Core Netfilter Configuration --> Netfilter Xtables support (required for ip_tables)
Esta opção deve ser habilitada como módulo.
Networking --> Networking support --> Networking options --> Network packet filtering framework (Netfilter) --> Core Netfilter Configuration --> Netfilter connection tracking support
Networking --> Networking support --> Networking options --> Network packet filtering framework (Netfilter) --> Core Netfilter Configuration --> Connection tracking flow accounting
Networking --> Networking support --> Networking options --> Network packet filtering framework (Netfilter) --> Core Netfilter Configuration --> "layer7" match support
Esta opção é habilitada como módulo.
Nesta mesma tela, é conveniente marcar todas as opções como módulos, pois podem ser utilizadas posteriormente por você como módulos do Iptables.
Selecione a opção "Exit" até que apareça a mensagem: "Do you wish to save your new kernel configuration?". Aqui, selecione "Yes".
Agora, compilamos o kernel e geramos o pacote .deb. Dependendo da quantidade de opções habilitadas no kernel o processo pode demorar.
# make-kpkg -initrd kernel_image
Vamos então instalar o novo kernel. No caso, o pacote .deb gerado:
# cd /usr/src
# dpkg -i linux-image-2.6.25_2.6.25-10.00.Custom_i386.deb
Vamos copiar as extensões do Layer 7 para o Iptables:
# cd netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/
# cp libxt_layer7.c libxt_layer7.man /usr/src/iptables-1.4.1.1/extensions/
Compilamos então o Iptables com as extensões do Layer 7:
# cd /usr/src/iptables-1.4.1.1
# ./configure --with-ksource=/usr/src/linux
# make
# make install
Agora basta instalar as especificações dos protocolos para o Layer 7:
# cd /usr/src/l7-protocols-2008-10-04
# make install
Esta instalação apenas vai copiar as definições para o diretório /etc/l7-protocols. Caso queira copiar as especificações para outro diretório, não há problemas, desde que a cada comando iptables que utilize o Layer 7 seja especificado este diretório através da opção --l7dir, antes da opção --l7proto (que irá especificar o protocolo da camada de aplicação a ser filtrado).
Pronto, a instalação está concluída! Agora basta reiniciar a máquina e "bootar" o novo kernel.