+ Responder ao Tópico



  1. #1

    Padrão Tutorial Ré-compilando o Kernel do Fedoracore6 e aplicando o layer7 sem mistério

    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.
    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) e 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.
    Obs: o trecho acima foi retirado do site Viva o Linux - Porque nós amamos a liberdade!
    Recompilando o kernel no fedoracore6 para aplicação do layer7

    Antes de compilar o Kernel instale os pacotes abaixo, sem eles a compilação pode falhar, ja estou informando com o comando "yum install" para facilitar, são eles:

    # yum install hardlink
    # yum install kernel-devel
    # yum install kernel-doc
    # yum install glibc
    # yum install glibc-common
    # yum install glibc-headers
    # yum install glibc-devel
    # yum install cpp
    # yum install gcc
    # yum install libgcc
    # yum install ncurses-devel
    # yum install redhat-rpm-config
    # yum install rpm
    # yum install rpm-python

    Esses pacotes são essenciais para funcionar o comando MAKE, eu testei todos com Fedora6 e a compilação foi um sucesso.


    Primeiramente vamos baixar os pacotes necessários para a aplicação do layer7 e IPP2P

    kernel-2.6.18-1.2798.fc6.src.rpm - http://download.fedora.redhat.com/pu...98.fc6.src.rpm
    iptables-1.3.7 - http://www.netfilter.org/projects/ip...-1.3.7.tar.bz2
    netfilter-layer7-v2.7.tar.gz - SourceForge.net: Downloading ...
    l7-protocols-2006-12-12.tar.gz - SourceForge.net: Downloading ...

    Antes de começarmos qualquer procedimento e tomando por base que você acabou de fazer uma instalação do fedoracore6 vamos remover o iptables com o comando abaixo:

    # yum remove iptables

    Repare que estou utilizando um kernel do próprio fedora para que não haja maiores problemas., a versão abordada nesse tutorial esta como um pacote rpm então temos que retirar o pacotes linux-2.6.18., existem duas maneiras para a remoção se você estiver utilizando o ambiente gráfico basta apenas clicar com o contrário do mouse e pedir para extrair o pacote ., caso contrário execute o comando abaixo:

    # rpm -ivh kernel-2.6.18-1.2798.fc6.src.rpm

    Feito isso ele descompactara o pacote em /usr/src/kernels

    Descompactação dos pacotes
    Vamos começar a compilação, primeiramente vamos descompactar os pacotes:
    # tar -zxvf iptables-1.3.7.tar.bz2 /usr/src ( se não obtiver êxito utilize a opção # tar - zxvf iptables-1.3.7.tar.bz2 -C /usr/src )
    # tar -zxvf netfilter-layer7-v2.7.tar.gz /usr/src
    # tar -zxvf l7-protocols-2006-12-12.tar.gz /usr/src

    O pacote do kernel o linux-2.6.18 você pode mover /usr/src da forma que achar melhor ou mais fácil.

    Temos agora que criar dois links simbólicos um para o pacote do iptables e outro para o pacote do kernel

    # cd /usr/src
    # ln -s /usr/src/ iptables-1.3.7 /usr/src/iptables
    # ln -s /usr/src/linux-2.6.18 /usr/src/linux

    Ré-compilção para o novo kernel
    # cd /usr/src/linux
    # patch -p1 < /usr/src/ netfilter-layer7-v2.7/ kernel-2.6.18-layer7-2.7.patch
    # make menuconfig



    Segue as telas com o caminho para habilitação do módulo Layer7


    Marque a opção <M> Layer 7 match support (EXPERIMENTAL)
    [ * ] Layer 7 debugging output

    Depois salve as modificações e saia.
    Agora siga os comandos abaixo ., isso vai demorar bastante tempo e se até aqui você usou os pacotes indicados e seguiu a risca o tutorial não haverá problemas.

    # make dep
    # make clean
    # make bzImage
    # make modules
    # make modules_install
    # make install

    Depois disso reinicie a máquina.
    Instalação do iptables-1.3.7
    # cd /usr/src/iptables
    # patch -p1 < /usr/src/ netfilter-layer7-v2.7/ iptables-layer7-2.7.patch
    # chmod 755 extensions/ .layer7-test
    # make KERNELDIR=/usr/src/linux
    # make KERNELDIR=/usr/src/linux install

    Cópia dos protocolos do layer7
    Agora devemos copiar os arquivos dos protocolos do Layer7.
    Primeiro crie o diretório l7-protocols dentro de /etc
    # mkdir /etc/ l7-protocols
    # cp /usr/src/l7-protocols-2006-12-12/protocols /etc/l7-protocols

    Lembre-se de verificar a versão desse arquivos (l7-protocols-2006-12-12) , pois ele está sempre sendo atualizado., quando mais novo melhor.
    Para verificar que o layer7 foi perfeitamente instalado e aplicado ao iptables execute o comando abaixo., se retorna os que esta descrito é porque correu tudo ok.

    # iptables -m layer7 --help


    LAYER7 match v1.3.7 options:
    --l7dir <directory> : Look for patterns here instead of /etc/l7-protocols/
    (--l7dir must be specified before --l7proto if used!)
    --l7proto [!] <name> : Match the protocol defined in /etc/l7-protocols/name.pat

    Para levantar o módulo do layer7 e só usar o comando abaixo
    # modprobe ipt_layer7

    Agora crie as regras que acha necessário para fazer os bloqueios, no meu caso criei o script abaixo mas é somente uma pequena mostra do que o layer7 é capaz.
    #!/bin/sh
    #
    echo "================================================================"
    echo " Bloquear Softwares P2P
    echo "================================================================
    #
    iptables -I FORWARD -m layer7 --l7proto edonkey -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto edonkey -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto fasttrack -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto fasttrack -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto directconnect -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto directconnect -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto bittorrent -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto bittorrent -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto napster -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto napster -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto soulseek -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto soulseek -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto gnutella -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto gnutella -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto msnmessenger -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto msnmessenger -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto imesh -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto imesh -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto ares -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto ares -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto counterstrike-source -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto counterstrike-source -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto doom3 -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto doom3 -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto dayofdefeat-source -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto dayofdefeat-source -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto halflife2-deathmatch -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto halflife2-deathmatch -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto quake-halflife -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto quake-halflife -s any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto quake1 -d any/0 -j DROP
    iptables -I FORWARD -m layer7 --l7proto quake1 -s any/0 -j DROP

    #
    echo "================================================================"
    echo " FIM DOS BLOQUEIOS
    echo "================================================================
    Miniaturas de Anexos Miniaturas de Anexos Clique na imagem para uma versão maior

Nome:	         Tela1.jpg
Visualizações:	123
Tamanho: 	26,8 KB
ID:      	785   Clique na imagem para uma versão maior

Nome:	         Tela2.jpg
Visualizações:	113
Tamanho: 	24,4 KB
ID:      	786  

    Clique na imagem para uma versão maior

Nome:	         Tela3.jpg
Visualizações:	118
Tamanho: 	37,5 KB
ID:      	787   Clique na imagem para uma versão maior

Nome:	         Tela4.jpg
Visualizações:	118
Tamanho: 	20,1 KB
ID:      	788  

    Clique na imagem para uma versão maior

Nome:	         Tela5.jpg
Visualizações:	106
Tamanho: 	34,3 KB
ID:      	789  

  2. #2

    Padrão

    Pessoal só para salientar que todo procedimento foi feito em cima do fedoracore6., o tuto ta em aberto., então quem tiver dicas ou sugestões é só postar visando as melhorias

  3. #3

    Padrão

    opa !!

    muito boa a dica para os colegas... só uma dica.. acho que voce pode reduziar as regras do iptables fazendo assim:

    Código :
     
    iptables -I FORWARD -m layer7 --l7proto edonkey -j DROP
    iptables -I FORWARD -m layer7 --l7proto fasttrack -j DROP
    iptables -I FORWARD -m layer7 --l7proto directconnect -j DROP
    iptables -I FORWARD -m layer7 --l7proto bittorrent -j DROP
    iptables -I FORWARD -m layer7 --l7proto napster  -j DROP
    iptables -I FORWARD -m layer7 --l7proto soulseek -j DROP
    iptables -I FORWARD -m layer7 --l7proto gnutella -j DROP
    iptables -I FORWARD -m layer7 --l7proto msnmessenger -j DROP
    iptables -I FORWARD -m layer7 --l7proto imesh -j DROP
    iptables -I FORWARD -m layer7 --l7proto ares -j DROP
    iptables -I FORWARD -m layer7 --l7proto counterstrike-source -j DROP
    iptables -I FORWARD -m layer7 --l7proto doom3 -j DROP
    iptables -I FORWARD -m layer7 --l7proto dayofdefeat-source -j DROP
    iptables -I FORWARD -m layer7 --l7proto halflife2-deathmatch -j DROP
    iptables -I FORWARD -m layer7 --l7proto quake-halflife -j DROP
    iptables -I FORWARD -m layer7 --l7proto quake1 -j DROP

    sem indicar source nem destination, ele vai bloquear o protocolo em si... independente do source e dest....

    lembrando que o layer7 da problemas com linux 64bits+SMP, não se se essa versao 1.3.7 foi corrigida, mas existe um post meu no bugtrack falando deste erro !!

    Até !!