Como automatizamos bloqueios judiciais (Anatel/Justiça) no Unbound DNS para ISPs usando Node.js (Módulo AnaBlock)
Introdução
Qualquer pessoa que trabalhe na operação de um Provedor de Internet (ISP) ou gerencie servidores DNS recursivos no Brasil sabe o pesadelo regulatório que é cumprir as ordens judiciais de bloqueio. Sejam sites de apostas clandestinas (BETS), IPTV pirata, plataformas sob segredo de justiça (como ordens do STF, Gaeco/MPSP, TJSP) ou ordens diretas da Anatel, o volume de bloqueios cresceu exponencialmente.
Executar esses bloqueios manualmente nas caixas de roteamento (como MikroTik) ou editando arquivos de configuração de servidores DNS é ineficiente, lento e arriscado (um caractere inválido e o recursivo cai, deixando o ISP fora do ar).
Neste artigo, vou explicar a arquitetura e a engenharia por trás do módulo AnaBlock integrado ao Unbound Sentinel. Ele conecta o servidor Unbound DNS recursivo diretamente à API do AnaBlock (a plataforma que unifica e consolida os bloqueios judiciais para provedores autorizados pela Anatel), aplicando as regras de domínios, URLs e IPs maliciosos de forma assíncrona, segura e automatizada.
O Fluxo de Integração
O módulo funciona como um Control Plane escrito em Node.js rodando acoplado ao Unbound DNS. A sincronização automática ocorre a cada 4 horas no background:
[Cron de Sincronização - 4h]
│
▼
[syncAnaBlock]
│
▼
[Chamadas HTTP Paralelas]
├──> API AnaBlock ──> Domínios .conf
├──> API AnaBlock ──> URLs Maliciosas
├──> API AnaBlock ──> Faixas IPv4
└──> API AnaBlock ──> Faixas IPv6
│
▼
[Parser e Sanitização Node.js]
│
▼
[Geração de anablock.conf]
│
▼
[Verificação: unbound-checkconf]
├───> OK ───> [systemctl reload unbound]
└───> Erro ──> [Abortar & Preservar Anterior]
Detalhes de Implementação: Tratamento do Feed
Devido ao sigilo de justiça envolvido em diversas ordens judiciais de telecomunicações, o acesso às APIs do AnaBlock é restrito a empresas com licença e CNPJ ativo na Anatel. O módulo Sentinel conecta-se nas APIs de dados para baixar quatro conjuntos de regras:
Contatos anablock
👉 https://anablock.net.br/
DNS Domains: Domínios completos que devem ser bloqueados.
URLs: Links específicos contendo o caminho completo.
IPv4 / IPv6: Endereços e prefixos CIDR de servidores de destino ilegais.
- Normalização de URLs para o Escopo de DNS
Como o DNS opera na camada de nomes de host (resolvendo nomes de domínios) e as ordens judiciais muitas vezes bloqueiam URLs completas, o módulo Node.js realiza o tratamento dinâmico em tempo de compilação:
javascript
const lines = urlsRaw.value.split('\n').map(l => l.trim()).filter(l => l);
for (const line of lines) {
try {
const url = new URL(line.startsWith('http') ? line : 'http://' + line);
if (url.hostname) {
finalConfig += local-zone: "${url.hostname}" always_nxdomain\n;
}
} catch (e) {}
}
Isso extrai o hostname raiz de forma segura e o injeta como uma zona local no Unbound configurada como always_nxdomain. Toda requisição DNS de cliente direcionada a este site é interceptada instantaneamente e retorna NXDOMAIN (domínio inexistente) a partir da memória RAM, em menos de 1ms, sem onerar os links de trânsito ou tráfego externo do provedor.
- Bloqueio IP Reverso no DNS (private-address)
Algumas plataformas judiciais burlam o bloqueio de domínio criando dezenas de aliases de host ou subdomínios novos diariamente. Para combater isso de forma estrutural, a API do AnaBlock fornece as faixas de IPs dos hosts maliciosos ou servidores de pirataria.
Nós convertemos essa lista de IPs/CIDRs usando a diretiva private-address do Unbound DNS:
unbound
private-address: 198.51.100.0/22
private-address: 2a0b:f4c0::/32
Se qualquer consulta de DNS resolver para um endereço IP que pertença a esses blocos bloqueados, o Unbound descarta a resposta DNS na hora. O cliente de rede nunca obtém o IP de destino, tornando impossível o estabelecimento de conexões TCP/UDP com o servidor de destino, anulando a eficácia de novas rotas ou domínios alternativos da plataforma ilegal.
Robustez da Operação (Zero-Downtime)
Derrubar o DNS de um ISP por causa de uma sintaxe inválida em um feed judicial seria imperdoável. A robustez do módulo é garantida por duas camadas:
Validação de Sintaxe Remota: O arquivo compilado é salvo em /etc/unbound/local.d/anablock.conf e é verificado localmente usando o utilitário nativo unbound-checkconf. Se houver qualquer falha, o reload do serviço não é disparado, logando o incidente e preservando as regras estáveis anteriores.
Reload Dinâmico (SIGHUP): Disparamos um systemctl reload unbound para reler a configuração sem pausar o processo do servidor DNS e sem esvaziar o cache recursivo já acumulado na RAM, o que evita picos de latência na rede.
Conclusão
Com o módulo AnaBlock, automatizamos a conformidade regulatória de bloqueios judiciais e da Anatel de maneira robusta, garantindo que o provedor esteja legalmente resguardado a cada 4 horas de forma invisível.
Você pode fazer o download da imagem ISO Appliance e acessar a documentação técnica oficial diretamente no site do projeto:
Como vocês fazem hoje para gerenciar e automatizar as ordens de bloqueios da Anatel e do Judiciário nos seus provedores e servidores corporativos? Automatizam via API própria, usam regras BGP/Blackhole, ou inserem scripts de sincronização via SSH em roteadores de borda? Vamos debater nos comentários!