Data: 21/01/2009
Autor: Humberto Galiza - galiza at pop-ba.rnp.br


Resumo

Este guia tem como objetivo construir um simples firewall com suporte nativo a IPv6. Para tal, serão utilizados o Debian GNU/Linux como sistema operacional e o IP6tables com filtro de pacotes. Para o melhor entendimento, é necessário um conhecimento prévio básico sobre esse novo protocolo. Assim, é recomendado ler [1] antes de continuar.

Introdução

É muito importante a utilização de firewall's quando em se tratando de IPv6, especialmente se tivermos em uma rede local (LAN) com endereços IPv6 válidos. Isto se deve ao fato de, ao contrário do IPv4, onde os hosts da nossa rede interna estavam protegidos através da utilização de endereços IP privados (RFC 1918), no IPv6 geralmente os endereços válidos são utilizados e qualquer um que tenha conectividade IPv6 pode alcançar todos os hosts da nossa rede interna que tenham IPv6 habilitado.

No Linux, o suporte nativo a firewalls IPv6 vem desde o kernel 2.4.+. Em versões anteriores, somente podemos efetuar filtros do tipo IPv6-in-Ipv4 pelo protocolo 41. Desde o Kernel 2.6.20, a conectividade IPv6 está totalmente funciona (sem problemas com os NATs IPv4 como em versões anteriores).

Mais informações podem ser encontradas:

Requisitos

Uma vez que estamos utilizando Debian GNU/Linux com referência, basta fazer:
# aptitude install iptables
para instalar o filtro de pacotes IP6tables.

Caso esteja utilizando outra distro, poderá usar o gerenciador de pacotes da mesma, ou então compilar a partir do código fonte, que pode ser baixado em: Netfilter project

Agora, depois de instalado o pacote, iremos carregar o módulo do IP6tables:
# modprobe ip6_tables 

Verifique a carga do módulo:
# lsmod | grep ip6_tables
ip6_tables             14340  3 ip6table_mangle,ip6t_LOG,ip6table_filter

Feito isso, vamos testar nossa instalação. Abra um terminal do linux e digite:
# ip6tables -L

Configuração

O uso de Ip6tables é semelhante ao do Iptables (para IPv4). Seguem abaixo alguns exemplos de utilização:

# ip6tables --table filter --append INPUT  -j DROP 
# ip6tables -A INPUT -i eth0 -p icmpv6 -j ACCEPT 
# ip6tables -A OUTPUT -o eth0 -p icmpv6 -j ACCEPT 

Para saber mais sobre os tipos de códigos ICMP6, veja [3].

Agora, construiremos um firewall básico utilizando IP6tables:
#!/bin/bash
IPT6="/sbin/ip6tables"
PUBIF="eth1"
echo "Iniciando o firewall com suporte a IPv6..."
$IPT6 -F
$IPT6 -X
$IPT6 -t mangle -F
$IPT6 -t mangle -X
 
#acesso ilimitado a loopback
$IPT6 -A INPUT -i lo -j ACCEPT
$IPT6 -A OUTPUT -o lo -j ACCEPT
 
# Politica padrao e DROP
$IPT6 -P INPUT DROP
$IPT6 -P OUTPUT DROP
$IPT6 -P FORWARD DROP

# Permite todas as conexoes estabilizadas da rede interna para a Internet, 
# mas nao o contrario.
$IPT6 -A OUTPUT -o $PUBIF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT6 -A INPUT -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT

 
# Liberando ping
$IPT6 -A INPUT -i $PUBIF -p ipv6-icmp -j ACCEPT
$IPT6 -A OUTPUT -o $PUBIF -p ipv6-icmp -j ACCEPT
 
############# Regras personalizadas - adicione abaixo ############
### abrir porta 80 para IPv6
#$IPT6 -A INPUT -i $PUBIF -p tcp --destination-port 80 -j ACCEPT
### abrir porta 22 para IPv6 
#$IPT6 -A INPUT -i $PUBIF -p tcp --destination-port 22 -j ACCEPT
### abrir porta 25 para IPv6
#$IPT6 -A INPUT -i $PUBIF -p tcp --destination-port 25 -j ACCEPT
############ End custome rules ################
 

# logar todos os outros pacotes que nao satisfacam as regras acima
$IPT6 -A INPUT -i $PUBIF -j LOG
$IPT6 -A INPUT -i $PUBIF -j DROP

Conclusão

É importante salientar que o IPv6 não inclui em sua implementação características de redes privadas IPv4, como por exemplo o NAT (Network Address Translation), pois o IPv6 em sua essência dá direito a um número muito grande de endereços possíveis. Entretanto cabe comentar que o prefixo FC00::/7 é utilizado para identifcar endereços locais de unicast IPv6.

Certamente, a maior inovação trazida pelo IPv6 é a possibilidade de cada usuário ter seu próprio endereço IP sem barreiras artificiais até a Internet, tal como ocorria com o NAT, melhorando principalmente os aspectos de mobilidade e segurança.

Referências