2017-02-18

Segurança da LAN doméstica com IPv6

Sua LAN está protegida, mas não é o NAT que faz isso.

Estou usando IPv6 em casa e no home office há alguns meses, e você provavelmente também pode usar já.

É curioso como a gente se sente seguro atrás do NAT do modem. Eu certamente me sentia mais tranquilo usando IPv4 com NAT feito pelo modem, sabendo que o NAT impedia que minhas máquinas dentro da LAN recebessem uma requisição de conexão vinda da Internet. Afinal, na Internet ninguém sabe o que há por trás do IP público que está no meu modem.

De onde vem o medo pelo fim do NAT que o IPv6 traz?

O medo vem do fato de que qualquer máquina na Internet (v6) pode mandar pacotes diretamente para o meu computador atrás do modem, pois ele é globalmente acessível no endereço xxxx:yyyy:zzzz:aaaa:bbbb:cccc:dddd:eeee. Isto é, todo host IPv6 é globalmente endereçável.

Mas lembre-se: globalmente endereçável ≠ globalmente acessível.

A sensação de segurança decorrente do NAT é falsa: [IPv6 Security Myth #3 – No IPv6 NAT Means Less Security]

Resumo do link acima: ao usar IPv4, quem dá segurança à sua LAN é o firewall SPI (stateful packet inspection) do modem, não o NAT.

Como seu modem oferece segurança à sua LAN

Veja a figura abaixo.

Quando seu computador na sua LAN doméstica se comunica com um host na Internet, ele manda o pacote ao modem, esse pacote é registrado pelo modem (quem mandou o pacote, de qual porta veio, pra qual porta vai, e pra qual IP (v4 ou v6) o pacote vai), e o modem encaminha o pacote ao IP (v4 ou v6) de destino.

O pacote de resposta vem da Internet e chega ao modem, que por sua vez verifica se o IP e a porta de origem do pacote de resposta casam com aquele pacote que saiu há pouco. Caso não casem, o modem bloqueia o pacote. Aí está a sua segurança. Este é o stateful packet inspection que o modem faz.

Veja como fica o firewall IPv6 do modem com Stateful Packet Inspection. Note que simplesmente retiramos a etapa de tradução do endereço de destino no retorno do pacote. Mas a segurança continua lá.

Exemplo da tela de configuração do meu modem Technicolor TD5336:

modem settings image
O modem já vem configurado para boquear todo e qualquer acesso à LAN vindo da WAN (isto é, da Internet).

Veja que prático, o modem já vem com a regra configurada: todo pacote pode sair da LAN para a Internet (WAN, no linguajar do modem), mas nenhum novo pacote pode vir da Internet para a LAN. Resolvido! \o/

Mais ou menos. Já ouviu falar da importância dos pacotes ICMP para o IPv6?

Modem fechado demais

No IPv6, os pacotes ICMP (chamados de ICMPv6) têm um papel central, mais do que no IPv4. Como no IPv6 a comunicação se dá diretamente entre seu laptop e o host na Internet, sem um NAT para intermediar, é o seu laptop que precisa receber os pacotes ICMP em caso de problemas nessa comunicação.

Veja aqui uma bela lista de todos os tipos de pacotes ICMPv6.

O mais importante e que normalmente vem desativado nos modems é o Packet too big, que os roteadores utilizam para informar que um pacote é maior que o MTU. [Mais detalhes]
Além, claro, dos tipos Echo request e Echo reply (ping e pong, respectivamente).

Um site que testa o sucesso dos pacotes ICMPv6 na sua conexão é este:

Abra seu modem

O primeiro passo nos meus dois modems após ativação da conexão IPv6 foi pedir ao firewall para permitir a entrada de todos os tipos de pacotes ICMPv6. Aqui está como ficou o filtro de IP no modem Technicolor TD5336:

A regra acima é bem simples: permitir todo pacote ICMPv6 vindo da WAN para a LAN.

É neste mesmo item de configuração que você pode abrir a comunicação com suas máquinas na LAN. Por exemplo, eu adicionei mais uma regra para permitir a comunicação com a porta TCP/22:

Note que basta não definir os IPs de origem e destino para que a porta TCP/22 seja permitida para toda a LAN.

Ainda não acredito que meu NFS/SMB/rsync/HTTP/DNS/FTP não está vazando para a Internet

Eu entendo. É difícil acreditar mesmo. Também custei a acreditar. Mas há uma forma fácil de testar: Eu uso o serviço de shell remoto devio.us há vários anos e ele foi minha principal ferramenta para testar a conectividade entre minha pacata LAN e a tempestuosa Internet.

Exemplo de teste:

  1. Abrir no modem uma determinada porta. Por exemplo, a porta TCP/9000
  2. Se não houver algum serviço escutando nessa porta, ponha o netcat para escutar: nc -l 9000
  3. ssh usuário@devio.us
  4. usuário@devio.us $ nc -vz meu:ip:v6:do:laptop 9000
  5. O resultado que indica sucesso é nc for Connection to meu:ip:v6:do:laptop 9000 port [tcp/*] succeeded!
  6. Agora experimente abrir no laptop mas não no modem alguma outra porta, por exemplo, a TCP/9001:
    nc -l 9001
  7. Entre no shell remoto e tente se conectar a essa porta:
    usuário@devio.us nc -vz meu:ip:v6:do:laptop 9001
  8. O resultado que indica sucesso agora é Connection timed out, pois o modem não está permitindo essa conexão.

E com isso nós provamos que o modem está protegendo sua LAN, mesmo quando você usa IPV6 e o seu laptop tem uma porta aberta. Se você não abrir a porta no firewall do modem, ninguém no mundo conseguirá se conectar a essa porta no seu laptop.

Próximos posts

Sabia que é possível conectar duas redes IPv4 através da Internet usando uma VPN IPv6? Os próximos posts vão mostrar como fazer isso usando OpenVPN. É assim que eu conecto minha rede de casa à do meu home office remoto.

E também:

  • Desempenho do IPv6 versus IPv4
  • Uma solução para associar de maneira estável o IPv6 dos hosts da sua LAN a um hostname (isso é complicado porque o provedor muda o prefixo IPv6 de tempos em tempos
  • Insira aqui uma sugestão de tema: _______________ :-)

Um abraço e até a próxima!