Configurando um Firewall de A a Z. Parte 1

15/04/2008 às 16:34 | por Humberto Caetano |

Estamos começando uma série de artigos com a intenção de configurarmos um firewall por completo. Existe uma grande demanda para a instalação de firewall’s Linux em muitas empresas, e este conjunto de artigos pode ser utilizado como um manual de instalação e configuração.

Para este primeiro artigo vamos instalar, configurar a rede e compilar o Kernel do Linux de forma que o mesmo tenha suporte a L7Filter. Assim poderemos controlar o uso de software P2P em nossa rede.

Inicialmente vamos instalar um GNU Debian Linux 4.0. A escolha desta distribuição se deve ao fato da facilidade de instalação de muitos pacotes, tornando nossa vida mais fácil na questão de dependências de softwares.

Para a instalação você pode utilizar um PC qualquer que tenha a disposição, o ideal é que o mesmo tenha duas placas de rede. Caso não tenha um PC você poderá utilizar uma solução como o VirtualBox, que cria máquinas virtuais.

Instale o Debian padrão. No meu caso, fiz a instalação sem acesso a internet, e só depois configurei o apt. Durante o processo de instalação configure a rede para um endereço que você considere externo. Por exemplo:

Mesmo os dois endereços do nosso servidor sendo IP’s não válidos, em um ambiente de testes, poderemos utilizá-los.

Com o Debian instalado, vamos editar o arquivo de configuração do apt-get e adicionar os repositórios.

# vim /etc/apt/sources.list

deb http://security.debian.org/ etch/updates main contrib
deb-src http://security.debian.org/ etch/updates main contrib
deb http://ftp.us.debian.org/debian/ etch main contrib non-free

Agora rodamos o apt-get update, e então instalamos os pacotes básicos necessários. Para que esta parte funcione corretamente, é necessário que seu Debian tenha acesso a internet. Qualquer dúvida em relação a configuração de rede do Linux leia Configurando uma Rede em Linux.

# apt-get update
# apt-get install build-essential ssh bzip2 ncurses-dev initrd-tools

O ssh só está sendo instalado no caso de precisarmos acessar o servidor remotamente.

Agora que estamos encaminhados com os programas básicos, vamos baixar o Kernel do Linux, os patches de atualização do netfilter, as definições de protocolos e o iptables versão 1.4.

No site do kernel, http://www.kernel.org, faça o download da última versão do Kernel. No meu caso foi a 2.6.24.4. Em http://l7-filter.sourceforge.net/HOWTO-kernel, baixe o iptables, o netfilter-layer7 e a definição de protocolos que é o arquivo l7-protocols. Com todos os softwares em seu servidor vamos começar a configuração. Primeiro descompactamos.

# tar jxvf linux-2.6.24.4.tar.bz2
# tar zxvf netfilter-layer7-v2.17.tar.gz
# tar jxvf iptables-1.4.0.tar.bz2
# tar zxvf l7-protocols-2008-02-20.tar.gz

Agora vamos aplicar o patch do netfilter no Kernel do Linux.

# cd linux-2.6.24.4
# patch -p1 < ../netfilter-layer7-v2.17/kernel-2.6.22-2.6.24-layer7-2.17.patch

Neste momento podemos compilar o Kernel

# cp /boot/config-2.6.18-4-486 .config
# make menuconfig

Grande parte das configurações do seu Kernel já devem estar prontas, só precisamos que sejam alterados alguns pontos.

Em Networking -> Networking Options -> Network Packet Filtering Framework -> Core Netfilter Configuration, habilite o Netfilter Connection Tracking Support, e o Layer7 Match Support. Também é interessante ativar o suporte aos protocolos nesta mesma janela, o FTP por exemplo. Lembre-se, também de ativar o suporte IPv4 Connection Tracking Support em IP: Netfilter Configuration. Você já pode sair da configuração do Kernel e executar o make.

# make

Ao final do make eu gosto sempre de rodar esses dois comandos

# make modules
# make modules_install

São vestígios da época do Kernel 2.4, mas me deixam mais a vontade. Agora temos que preparar a inicialização do servidor. Vamos copiar os arquivos bzImage, que é o Kernel do Linux, o System.map, .config, e criar o initrd.

# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.24.4
# cp System.map /boot/System.map-2.6.24.4
# cp .config /boot/config-2.6.24.4
# mkinitrd -o /boot/initrd.img-2.6.24.4 2.6.24.4

Agora vamos colocar tudo no grub e reiniciar nosso servidor.

# vim /boot/grub/menu.lst

title Debian GNU/Linux, kernel 2.6.24.4
root (hd0,0)
kernel /boot/vmlinuz-2.6.24.4 root=/dev/hdb1 ro
initrd /boot/initrd.img-2.6.24.4
savedefault

Lembre-se de manter seu Kernel anterior. Caso você precise dele, ele ainda estará lá! Agora reinicie o servidor e vamos as configurações finais. Se as configurações estiverem corretas, você já deve estar no Kernel novo, com o patch do netfilter. Agora vamos compilar o iptables e finalizar o processo. O KERNEL_DIR é o diretório onde você compilou o Kernel do Linux. Normalmente eu coloco esse diretório em /usr/src/linux, mas depende de cada um.

# cd iptables-1.4.0
# patch -p1 < ../netfilter-layer7-v2.17/iptables-1.4-for-kernel-2.6.20forward-layer7-2.17.patch
# chmod +x extensions/.layer7-test
# make KERNEL_DIR=/root/linux-2.6.24.4
# make install

Para verificar como ficou a instalação utilize:

# iptables -V
iptables v1.4.0

Só nos falta copiar o diretório de definições de protocolos para o /etc.

# cp -r l7-protocols-2008-02-20 /etc/l7-protocols

A titulo de teste podemos executar o seguinte comando:

# iptables -A FORWARD -m layer7 –l7proto msnmessenger -s 192.168.254.0/24 -j DROP

Terminamos por hoje. No próximo capítulo vamos liberar o acesso dos usuários para Internet, e criar nosso firewall básico.

Índice de Configurando um Firewall de A a Z

  1. Configurando um Firewall de A a Z. Parte 1
  2. Configurando um Firewall de A a Z. Parte 2
  3. Configurando um Firewall de A a Z. Parte 3
  4. Configurando um Firewall de A a Z. Parte 5

  1. 8 Responses to “Configurando um Firewall de A a Z. Parte 1”

  2. By Junior on Apr 16, 2008 | Reply

    Muito explicadinho o seu passo a passo, continue o trabalho que eu voltarei para ler as outras partes.

    É bom ter um passo a passo para não esquecer de nenhuma etapa na hora de fazer as config.

  3. By Elton Dhiego on Apr 16, 2008 | Reply

    muito bom … vou esperar as outras partes para que eu possa testar!!!

    Parabéns!!

  4. By Rafael Goulart on Apr 17, 2008 | Reply

    Uma sugestão: para não ter que repetir este procedimento de compilação em cada nova máquina, uma sugestão é utilizar o checkinstall para criar um pacote DEB com o novo kernel.

    Evidentemente que se o kernel for atualizado é preciso repetir o processo…

  5. By Dailson Fernandes on Apr 17, 2008 | Reply

    Parabéns Humbertão!!

    Tá show!

  6. By adilson on Apr 22, 2008 | Reply

    Sou novato no linux e, cheguei aqui pesquisando no google

    Não entendi a seguinte parte : Em Networking -> Networking Options -> Network Packet Filtering Framework -> Core Netfilter Configuration, habilite o Netfilter Connection Tracking Support, e o Layer7 Match Support. Também é interessante ativar o suporte aos protocolos nesta mesma janela, o FTP por exemplo. Lembre-se, também de ativar o suporte IPv4 Connection Tracking Support em IP: Netfilter Configuration. Você já pode sair da configuração do Kernel e executar o make.

    Poderia me explicar melhor?

  7. By Humberto Caetano on Apr 23, 2008 | Reply

    Bom Adilson, a idéia do post é que você já tenha algum conhecimento em compilação de Kernel. Estas opções aparecem nos menus do make menuconfig.

    Posso preparar um post específico para compilação de kernel, mas no momento estou bastante ocupado!

    Epero ter ajudado.

  8. By mauricio taveira on Jul 17, 2008 | Reply

    Olá, olha tenho acompanhado seus artigos…

    Só que neste tive um problema em relação ao iptables ele da erro em alguns módulos e na table nat é como se ela não estivesse instalada. Teria como descrever a parte de compilação mais detalhada pra ver se eu não estou esquecendo de nada.

    Grato e parabens esse tutorial ta muito bom…

  9. By Humberto Caetano on Jul 17, 2008 | Reply

    Oi, durante o make menuconfig, verifique se você habilitou os módulos corretos em Networking -> Networking Options .

    Normamente a tabela nat já vem por padrão no sistema. Você pode executar também um make oldconfig para recuperar os dados da sua configuração atual.

    Boa sorte.

Post a Comment