Alguns métodos mais seguros para usar IPv6 público

Algumas pessoas precisam usar IPv6 público para acesso remoto, diferente de VPNs como tailscale/zerotier que precisam de tunelamento de rede para estabelecer conexão direta, o acesso remoto via IPv6 é direto, a maioria das redes celulares de smartphones geralmente possui IPv6, tornando o acesso remoto muito conveniente.

Eu já compartilhei um artigo antes [家庭宽带使用常见 DDns 子域名可能会使电信宽带服务降级], descrevendo uma armadilha que as operadoras criam ao usar IPv6, resumindo, o domínio pode ser varrido, expor seu domínio equivale a expor o IPv6, portanto pode ser varrido, quando serviços são encontrados e há muitas conexões de entrada, o serviço de banda larga é degradado.

Naquele artigo só mencionei varredura de domínio, não mencionei varredura de espaço de rede, esse tipo de varredura ignora qualquer informação exposta e varre diretamente o pool de IPs, essa situação é mais difícil de prevenir.

A varredura de espaço de rede geralmente inclui vários aspectos:

  • Detecção de atividade IP: usar protocolos como ARP, ICMP, TCP para identificar hosts online.
  • Detecção de portas/serviços: usar varredura de portas para filtrar portas abertas dos hosts online e obter informações de serviço, versão e sistema operacional do host alvo.
  • Detecção de sistema operacional: analisar pacotes de resposta para inferir o tipo e versão do sistema operacional do host alvo.
  • Coleta de tráfego: monitorar tráfego de rede para descobrir comportamentos anormais ou padrões de ataque.
  • Resolução de alias: para roteadores com múltiplos endereços IP, estabelecer mapeamento entre endereços IP e roteadores.
  • Detecção DNS: usar resolução reversa de endereços IP para estabelecer correspondência entre endereços IP e domínios.

Aqui compartilho alguns métodos para evitar ser varrido por varredura de espaço de rede:

  1. Servidor DNS interno não retorna registros AAAA
  2. Serviços internos só permitem acesso por domínio, não permitem acesso direto por IP
  3. Use o serviço DNS privado AdGuardPrivate

Servidor DNS interno não retorna registros AAAA

Ao navegar na internet, ao visitar vários sites, esse acesso natural pode expor o IPv6 de origem, o servidor remoto pode obter o IPv6 de origem, se o lado do usuário não tiver firewall ativado, esse IPv6 pode ser colocado no pool de varredura de espaço de rede.

Os endereços IPv6 com prefixo /56 também podem ser colocados no pool de varredura, apenas varrendo os 16 bits inferiores, o escopo de varredura pode ser drasticamente reduzido.

Minha experiência usando IPv6 por muitos anos, ao navegar na internet, o IPv6 não tem diferença significativa em relação ao IPv4. Portanto, podemos sacrificar o IPv6 externo, usando apenas para acesso remoto.

Configuração de não retornar método de resolução IPv6

No servidor DNS interno, configure para não retornar registros AAAA.

O serviço DNS interno geralmente usa AdGuardHome, configuração de referência:

Configurar desativar IPv6

Após a configuração, os dispositivos internos ao acessar a internet só usarão IPv4, não usarão mais IPv6.

Serviços internos só permitem acesso por domínio

Pode ser que serviços internos expostos possam ser acessados baseados em porta, isso é muito fácil de ser varrido.

É melhor ao criar serviços, não fazer configurações de escuta em 0.0.0.0 e ::, quem tem experiência pode perceber, quase todas as instruções de inicialização de serviço por padrão só escutam em 127.0.0.1 e ::1, isso porque escutar em IP público tem risco.

Configuração de proxy reverso só permitindo domínio

Exemplo nginx

O ponto chave é configurar server_name como domínio, não configurar como _ ou IP.

server {
    listen 80;
    server_name yourdomain.com; # Substitua yourdomain.com pelo seu domínio real

    # Retornar 403 Forbidden para usuários que tentam acessar por endereço IP
    if ($host != 'yourdomain.com') {
        return 403;
    }

    location / {
        # Aqui é o diretório raiz do seu site e outras configurações
        root /path/to/your/web/root;
        index index.html index.htm;
    }

    # Outras configurações...
}

Exemplo IIS

O ponto chave é configurar host name como domínio, não deixar vazio.

Exemplo IIS

Uso de serviço DNS privado

Em um serviço DNS só para uso próprio, adicione resolução personalizada, usando um domínio falso resolvido para o serviço interno.

Função de reescrita DNS

Fazer isso tem várias vantagens claras.

  1. Primeiro, domínios podem ser construídos livremente, não é necessário comprar domínio, economizando custos de domínio. Se esse domínio falso for varrido, então atacantes precisam solicitar seu serviço DNS para obter o resultado de resolução correto.
  2. É necessário expor simultaneamente o endereço do seu serviço DNS privado e o domínio virtual, então varredores precisam modificar a lógica de resolução de domínio, solicitar resolução de domínio ao servidor DNS privado exposto, e então preencher o domínio virtual na construção de cabeçalhos de solicitação, para começar a varredura.
sequenceDiagram
  participant Scanner as Varredor de Rede
  participant DNS as Servidor DNS Privado
  participant Service as Serviço Interno

  Scanner->>DNS: 1. Descobrir endereço do servidor DNS privado
  Scanner->>DNS: 2. Solicitar resolução de domínio virtual
  DNS-->>Scanner: 3. Retornar IP do serviço interno
  Scanner->>Service: 4. Construir Headers usando domínio virtual
  Note right of Service: Se não houver domínio virtual correto nos Headers<br/>então negar acesso
  alt Headers corretos
    Service-->>Scanner: 5a. Retornar resposta do serviço
  else Headers incorretos
    Service-->>Scanner: 5b. Retornar erro 403
  end

Só quando varredores completam todos os passos acima é possível varrer o serviço interno, isso aumenta muito a dificuldade de varredura.

No AdGuardPrivate é possível criar serviço DNS privado, usando a função de resolução personalizada para adicionar domínio falso, claro que também pode usar a da dnspod.cn.

Essas duas empresas que fornecem serviços têm grande diferença, o AdGuardPrivate é modificado do AdGuardHome nativo, funcionalmente muito mais do que o dnspod, todos avaliem por conta própria.

Resumo

  1. Servidor DNS interno não retorna registros AAAA
    • Condições prévias
      • Tem IPv6 público
      • Tem servidor DNS interno
    • Configuração
      • Não retornar registros AAAA
  2. Serviços internos só permitem acesso por domínio, não permitem acesso direto por IP
    • Condições prévias
      • Tem seu próprio domínio
      • O provedor de domínio oferece DDNS
      • Tem serviço de proxy reverso interno
    • Configuração
      • Configurar tarefa DDNS
      • Só permitir acesso por domínio
  3. Uso de serviço DNS privado
    • Condições prévias
      • Tem serviço DNS privado
      • O serviço DNS privado oferece resolução personalizada
      • O serviço DNS privado oferece DDNS
    • Configuração
      • Configurar tarefa DDNS
      • Adicionar resolução personalizada, domínio falso resolvido para serviço interno

Por fim,

  • O mais simples e seguro para acesso remoto direto é o sucesso de tunelamento interno com tailscale/zerotier, mas às vezes pode não conseguir tunelamento devido a várias razões de rede.
  • Não conecte Wi-Fi desconhecido aleatoriamente, pode vazar todas as informações de uma vez. Consegui um cartão de grande tráfego, temporariamente confio nas operadoras, quem precisar de cartão de grande tráfego barato me contacte (não), eu também preciso.