FreeBSD: Como configurar um firewall usando IPFW

firewall usando IPFW

Q. Eu sou novo no FreeBSD e estou tentando configurar um firewall usando IPFW, mas estou gastando mais tempo pra compreender em comparação ao Linux. Você poderia prover um breve exemplo de como configurar o IPFW e algumas regras pra um Apache Web Server em FreeBSD?

A. Ipfirewall (IPFW) é o filtro de pacotes FreeBSD IP e traffic accounting facility

Neste tutorial eu vou ensinar como configurar um firewall usando IPFW. Ele é incluído como módulo de carregamento opcional nos pacotes de base do FreeBSD. O sistema irá dinamicamente carregar o modulo de Kernel se a opção do rc.conf for utilizada.

statement firewall_enable="YES"

Compilando Kernel FreeBSD para o IPFW

Este passo é opcional. Você não precisa compilar IPFW no kernel do FreeBSD, a menos que você queira ativar a função NAT. No entanto, algumas versões antigas podem não ter o IPFW compilado. Aqui está um guia rápido para compilar o kernel com IPFW.

Verifique se o suporte IPFW não foi compilado no kernel:

Nota: Todos os comandos aqui são realizados como root.

ipfw list

Se você receber um erro semelhante ao seguinte, agora você deve compilar o código-fonte do kernel.

ipfw: getsockopt(IP_FW_GET): Protocol not available

Outra opção é o arquivo de configuração padrão do kernel encontrado em /usr/src/sys/i386/conf, aberto o arquivo, procure a opção IPFIREWALL:

grep IPFIREWALL /usr/src/sys/i386/conf

Construindo e Instalando um Kernel personalizado com IPFW

Copie o arquivo padrão do Kernel:

cd /usr/src/sys/i386/conf
cp GENERIC IPFWKERNEL

Adicione suporte ao IPFW:

vim IPFWKERNEL

Anexe as seguintes diretrizes:

options IPFIREWALL # required for IPFW
options IPFIREWALL_VERBOSE # optional; logging
options IPFIREWALL_VERBOSE_LIMIT=10 # optional; don't get too many log entries
options IPDIVERT # needed for natd

Salve e feche o arquivo. Vamos agora construir um Kernel com os seguintes comandos:

cd /usr/src
make buildkernel KERNCONF=IPFWKERNEL

Instale o novo Kernel:

make installkernel KERNCONF=IPFWKERNEL

Agora, reinicie o sistema:

reboot

Etapa #1: Ativando o IPFW

Abra o arquivo /etc/rc.conf:

vim /etc/rc.conf

Anexe as seguintes informações:

firewall_enable="YES"
firewall_script="/usr/local/etc/ipfw.rules"

Salve e feche o arquivo.

Etapa #2: Escrevendo um Script de regras para o Firewall

Você precisa colocar as regras de firewall em um script chamado /usr/local/etc/ipfw.rule:

vim /usr/local/etc/ipfw.rules

Anexe as seguintes informações:

IPF="ipfw -q add"
ipfw -q -f flush

#loopback 
$IPF 10 allow all from any to any via lo0
$IPF 20 deny all from any to 127.0.0.0/8
$IPF 30 deny all from 127.0.0.0/8 to any
$IPF 40 deny tcp from any to any frag

# statefull
$IPF 50 check-state
$IPF 60 allow tcp from any to any established
$IPF 70 allow all from any to any out keep-state
$IPF 80 allow icmp from any to any

# open port ftp (20,21), ssh (22), mail (25)
# http (80), dns (53) etc
$IPF 110 allow tcp from any to any 21 in
$IPF 120 allow tcp from any to any 21 out
$IPF 130 allow tcp from any to any 22 in
$IPF 140 allow tcp from any to any 22 out
$IPF 150 allow tcp from any to any 25 in
$IPF 160 allow tcp from any to any 25 out
$IPF 170 allow udp from any to any 53 in
$IPF 175 allow tcp from any to any 53 in
$IPF 180 allow udp from any to any 53 out
$IPF 185 allow tcp from any to any 53 out
$IPF 200 allow tcp from any to any 80 in
$IPF 210 allow tcp from any to any 80 out

# deny and log everything 
$IPF 500 deny log all from any to any

Salve e feche o arquivo.

Etapa #3: Iniciando o firewall

Você pode reniciar o sistema ou aplicar estas configurações via linha de comando:

sh /usr/local/etc/ipfw.rules

Tarefa: lista todas as regras em sequência

Escreva o seguinte comando:

ipfw list

Algumas recomendações

Para você que está engrenando no mundo BSD vai perceber que não há muito conteúdo disponível em nossa língua. Estarei junto ao portal SempreUpdate trazendo sempre que possível tutoriais e artigos de configurações, história, compilação etc do mundo BSD.

Caso ainda queira ir mais a fundo nas configurações do IPFW sugiro que leia:

Espero que este tutorial possa ter lhe ajudado de alguma forma! Não deixe de compartilhar sugestões, dúvidas e correções nos comentários!