ping6.net
Segurança

Configuração de Firewall IPv6: Regras Essenciais

Configure seu firewall para IPv6 sem quebrar a conectividade. Regras essenciais de ICMPv6, exemplos Linux e erros comuns a evitar.

ping6.net14 de dezembro de 202410 min read
IPv6firewallsegurançaiptablesnftablesICMPv6

Firewalls IPv4 permitem bloquear ICMP sem consequências graves. IPv6 não funciona assim. Bloqueie as mensagens ICMPv6 erradas e você quebrará a descoberta de MTU de caminho, descoberta de vizinhos e conectividade básica. Seu firewall causará silenciosamente falhas de conexão que levam horas para depurar.

TL;DR - Resumo rápido

Pontos-chave:

  • ICMPv6 é essencial: Diferente do ICMP IPv4, bloquear ICMPv6 quebra operações básicas de rede
  • Permitir tipos específicos: Tipos 1-3 (erros), 128-129 (ping), 133-136 (NDP) são necessários
  • Nunca bloquear Tipo 2: Mensagens Packet Too Big são críticas para Path MTU Discovery
  • Usar hop limit 255 para NDP: Previne falsificação off-link de descoberta de vizinhos
  • Aplicar a todas as famílias de protocolo: Não esqueça de configurar tanto iptables quanto ip6tables

Ir para: Tipos Essenciais de ICMPv6 | Exemplos Linux | Erros Comuns


Por Que Firewalls IPv6 São Diferentes#

No IPv4, ICMP lida com diagnósticos como ping e traceroute. Você pode bloqueá-lo completamente e a maioria das coisas ainda funciona. ARP roda na camada 2, DHCP usa UDP e roteadores usam protocolos dedicados.

IPv6 mesclou essas funções no ICMPv6. Resolução de endereço, descoberta de roteador e detecção de endereço duplicado dependem de tipos específicos de ICMPv6. Bloqueie-os e hosts não conseguem encontrar seu gateway padrão, vizinhos não conseguem se comunicar no mesmo link e conexões travam quando incompatibilidades de MTU ocorrem.

Os projetistas do protocolo fizeram essa escolha deliberadamente. ICMPv6 é parte da especificação IPv6, não um complemento de diagnóstico.

Tipos Essenciais de ICMPv6#

Seu firewall deve permitir estes tipos ICMPv6 para funcionalidade básica:

TipoNomeFinalidadeBloquear Isso?
1Destination UnreachablePorta/protocolo está fechadoNão - quebra TCP
2Packet Too BigDescoberta de MTU de caminhoNUNCA - quebra conexões
3Time ExceededLimite de saltos alcançadoNão - quebra traceroute
128Echo RequestRequisição de pingOpcional (mas por quê?)
129Echo ReplyResposta de pingOpcional (mas por quê?)
133Router SolicitationEncontrar gateway padrãoNUNCA - quebra conectividade
134Router AdvertisementAnúncios de gatewayNUNCA - quebra conectividade
135Neighbor SolicitationResolução de endereço (equivalente ARP)NUNCA - quebra tudo
136Neighbor AdvertisementRespostas de resolução de endereçoNUNCA - quebra tudo

Bloquear tipos ICMPv6 2, 133, 134, 135 ou 136 quebrará a conectividade IPv6 de formas sutis e difíceis de depurar. Não faça isso.

Tipo 2 (Packet Too Big) merece atenção especial. IPv6 não tem fragmentação em roteadores intermediários. Quando um pacote excede o MTU do caminho, o roteador o descarta e envia de volta uma mensagem Packet Too Big. Bloqueie isso e conexões travam após o SYN/ACK inicial. Você gastará horas depurando por que HTTPS funciona mas transferências grandes falham.

Exemplos de ip6tables do Linux#

Firewall Mínimo de Host#

Para uma máquina cliente ou servidor que não roteia tráfego:

# Limpar regras existentes
ip6tables -F
ip6tables -X
 
# Políticas padrão
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT
 
# Permitir loopback
ip6tables -A INPUT -i lo -j ACCEPT
 
# Permitir conexões estabelecidas
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# Permitir ICMPv6 essencial
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 1 -j ACCEPT   # Destination Unreachable
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 2 -j ACCEPT   # Packet Too Big
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 3 -j ACCEPT   # Time Exceeded
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -j ACCEPT # Echo Request
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 129 -j ACCEPT # Echo Reply
 
# Permitir descoberta de vizinhos (deve ser link-local com limite de saltos 255)
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 133 -m hl --hl-eq 255 -j ACCEPT # Router Solicitation
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 134 -m hl --hl-eq 255 -j ACCEPT # Router Advertisement
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 135 -m hl --hl-eq 255 -j ACCEPT # Neighbor Solicitation
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 136 -m hl --hl-eq 255 -j ACCEPT # Neighbor Advertisement
 
# Permitir DHCPv6 (se necessário)
ip6tables -A INPUT -p udp --dport 546 -j ACCEPT
 
# Registrar pacotes descartados (opcional)
ip6tables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "ip6tables-dropped: "

A verificação de limite de saltos (--hl-eq 255) previne pacotes de descoberta de vizinhos falsificados de fontes fora do link. Descoberta de vizinhos legítima sempre usa limite de saltos 255.

Firewall de Servidor#

Adicione seus serviços após as regras ICMPv6:

# SSH
ip6tables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
ip6tables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
 
# HTTP/HTTPS
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
 
# DNS (se executando servidor DNS)
ip6tables -A INPUT -p udp --dport 53 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 53 -j ACCEPT

A regra SSH usa recent para implementar limitação de taxa básica. Após 4 tentativas de conexão em 60 segundos do mesmo endereço, tentativas adicionais são descartadas.

Regras de Encaminhamento de Roteador#

Para roteadores ou sistemas que encaminham tráfego:

ip6tables -P FORWARD DROP
 
# Permitir conexões estabelecidas
ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# Permitir encaminhamento ICMPv6 (crítico para PMTUD)
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 1 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 2 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 3 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 128 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 129 -j ACCEPT
 
# Permitir rede interna acessar internet
ip6tables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Não encaminhe mensagens de descoberta de vizinhos (133-136). Essas são apenas link-local.

Exemplos de nftables do Linux#

Distribuições modernas usam nftables em vez de iptables. A sintaxe é mais limpa:

# Criar tabela
nft add table ip6 filter
 
# Criar cadeias
nft add chain ip6 filter input { type filter hook input priority 0\; policy drop\; }
nft add chain ip6 filter forward { type filter hook forward priority 0\; policy drop\; }
nft add chain ip6 filter output { type filter hook output priority 0\; policy accept\; }
 
# Loopback
nft add rule ip6 filter input iif lo accept
 
# Conexões estabelecidas
nft add rule ip6 filter input ct state established,related accept
 
# ICMPv6
nft add rule ip6 filter input icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, echo-request, echo-reply } accept
 
# Descoberta de vizinhos com verificação de limite de saltos
nft add rule ip6 filter input icmpv6 type { nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } ip6 hoplimit 255 accept
 
# SSH com limitação de taxa
nft add rule ip6 filter input tcp dport 22 ct state new limit rate 4/minute accept
 
# HTTP/HTTPS
nft add rule ip6 filter input tcp dport { 80, 443 } accept

A notação de conjunto ({ 80, 443 }) cria uma regra em vez de duas, tornando o conjunto de regras mais eficiente.

Firewall do Windows#

O Firewall do Windows habilita ICMPv6 IPv6 por padrão para a maioria dos tipos essenciais, mas você deve verificar:

# Mostrar regras ICMPv6 atuais
Get-NetFirewallRule -DisplayName "*ICMPv6*" | Format-Table DisplayName, Enabled, Direction
 
# Habilitar todo ICMPv6 de entrada (se desabilitado)
Enable-NetFirewallRule -DisplayName "Core Networking - Destination Unreachable (ICMPv6-In)"
Enable-NetFirewallRule -DisplayName "Core Networking - Packet Too Big (ICMPv6-In)"
Enable-NetFirewallRule -DisplayName "Core Networking - Neighbor Discovery Solicitation (ICMPv6-In)"
Enable-NetFirewallRule -DisplayName "Core Networking - Neighbor Discovery Advertisement (ICMPv6-In)"
Enable-NetFirewallRule -DisplayName "Core Networking - Router Advertisement (ICMPv6-In)"
 
# Permitir servidor SSH em IPv6
New-NetFirewallRule -DisplayName "SSH (IPv6)" -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow -Profile Any -RemoteAddress Any

Para servidores web:

New-NetFirewallRule -DisplayName "HTTP (IPv6)" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "HTTPS (IPv6)" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow

Grupos de Segurança em Nuvem#

AWS#

Grupos de segurança têm estado e permitem tráfego de retorno estabelecido automaticamente. Adicione regras explícitas para:

  • ICMPv6: Use "All ICMPv6" ou selecione tipos específicos
  • Serviços: Adicione suas portas TCP/UDP

Azure#

Network Security Groups (NSGs) lidam com IPv6. Regras padrão permitem tráfego de saída e estabelecido. Adicione regras de entrada para serviços.

GCP#

Regras de firewall suportam IPv6. Crie regras separadas com --source-ranges=::/0 para IPv6. Regras padrão não incluem ICMPv6, então adicione explicitamente.

Todos os três provedores exigem que você habilite IPv6 na VPC/rede primeiro. IPv6 não é habilitado por padrão.

Erros Comuns#

Bloquear Todo ICMPv6#

O erro mais comum de firewall IPv6. Administradores portam regras IPv4 que bloqueiam todo ICMP e se perguntam por que IPv6 não funciona. Se você lembrar apenas uma coisa deste artigo: nunca bloqueie todo ICMPv6.

Sem Regras de Firewall IPv6#

Alguns administradores configuram iptables cuidadosamente, mas ignoram ip6tables completamente. IPv6 fica então completamente aberto. Ambas as famílias de protocolos precisam de regras de firewall.

Esquecer Filtragem de Saída#

A maioria dos exemplos mostra apenas regras de ingresso. Se você implementar filtragem de saída estrita (deveria), permita tipos ICMPv6 de saída 133, 135 e 128. Bloquear solicitações de vizinhos de saída impede o host de resolver vizinhos.

Limite de Saltos Errado na Descoberta de Vizinhos#

Aceitar pacotes de descoberta de vizinhos sem verificar o limite de saltos (255) permite que atacantes enviem anúncios de roteador ou vizinho falsificados de qualquer lugar na internet. Sempre verifique o limite de saltos.

Permitir Demais#

Habilitar "todo ICMPv6" é mais seguro que bloquear tudo, mas ainda é excessivo. Você não precisa permitir mensagens de Multicast Listener Discovery da internet, por exemplo. Use tipos específicos.

Testando Seu Firewall#

Após configurar regras, verifique conectividade básica:

# Testar ping (requer tipos ICMPv6 128/129)
ping6 -c 3 2001:4860:4860::8888
 
# Testar descoberta de MTU de caminho (requer tipo ICMPv6 2)
# Enviar pacote grande, verificar se não trava
curl -6 -v https://ipv6.google.com/
 
# Verificar descoberta de vizinhos (requer tipos 135/136)
ip -6 neigh show
 
# Verificar rotas (requer tipos 133/134)
ip -6 route show

De outro host, teste se portas não autorizadas estão realmente bloqueadas:

# Deve expirar ou retornar "Connection refused"
telnet -6 seu:endereço::servidor 23
 
# Deve funcionar (se SSH for permitido)
ssh -6 seu:endereço::servidor

Use scanners online como IPv6 Port Scanner (ipv6-tools.com) ou test-ipv6.com para verificar seu firewall de redes externas.

Artigos Relacionados#

  • Segurança IPv6 — Entenda considerações mais amplas de segurança para redes IPv6
  • Habilitar IPv6 — Aprenda como configurar IPv6 em seus dispositivos antes de configurar regras de firewall

Firewalls IPv6 requerem entender o que ICMPv6 faz. O protocolo não é opcional ou apenas para diagnósticos. Permita os tipos essenciais, verifique se a descoberta de vizinhos funciona e teste a descoberta de MTU de caminho com tráfego real. Acerte isso e seu firewall IPv6 será tanto seguro quanto funcional.