Bloqueia entradas DNS mal configuradas no Cache DNS do BIND

3

Estou executando um rastreador da web com seu próprio cache DNS do BIND. Nosso código resolve usando nosso cache de DNS e faz o pedido GET com a biblioteca de pedidos do Python.

O problema é que muitos FQDNs são configurados incorretamente e apontam para endereços IP RFC1918 ou IPs de loopback como 127.0.0.1 ou 10.0.0.0/8 . Como resultado, nosso rastreador estava tentando conectar esses IPs e terminou com um relatório de verificação do nosso datacenter.

Fizemos alterações no rastreador e agora ele resolve ip para FQDN no início e o ignora se o IP estiver em intervalos private / loopback / reserved.

Após farejar com o tcpdump, descobri que ainda há tráfego para endereços IP privados. Suponho que eles ocorram devido a redirecionamentos HTTP, porque verificamos o FQDN original, mas não verificamos hosts redirecionados, pois essa parte ocorre na biblioteca de solicitações do Python.

Existe alguma opção para o BIND bloquear a resolução de endereços IP privados, de loopback ou reservados? Posso configurá-lo para retornar algum tipo de erro "não resolvido"?

Editar: Eu tentei despejar o cache do BIND no arquivo e verifiquei, agora tenho certeza que isso acontece por causa dos redirecionamentos HTTP, mas não é fácil alterar o código e estou procurando um atalho como configurar o BIND ou vou bloqueá-los no firewall.

    
por she hates me 30.12.2015 / 02:37

2 respostas

2

Com o BIND, você pode usar a zona de política de resposta (RPZ ) funcionalidade para bloquear a resolução de registros de endereços ( A / AAAA ) referentes a determinados endereços.

Especificamente, o tipo de entrada RPZ-IP é relevante:

RPZ-IP

IP triggers are IP addresses in an A or AAAA record in the ANSWER section of a response. They are encoded like client-IP triggers except as subdomains of rpz-ip.

Como exemplo, o manual usa isso:

; IP policy records that rewrite all responses containing A records in 127/8
;       except 127.0.0.1
8.0.0.0.127.rpz-ip      CNAME   .
32.1.0.0.127.rpz-ip     CNAME   rpz-passthru.

A ideia geral sobre o que a configuração é resumida no manual como:

For example, you might use this option statement

response-policy { zone "badlist"; };

and this zone statement

zone "badlist" {type master; file "master/badlist"; allow-query {none;}; };

with this zone file

$TTL 1H 
@                       SOA LOCALHOST. named-mgr.example.com    (1 1h 15m 30d 2h)
                        NS  LOCALHOST.
; [snip]

; IP policy records that rewrite all responses containing A records in 127/8
;       except 127.0.0.1
8.0.0.0.127.rpz-ip      CNAME   .
32.1.0.0.127.rpz-ip     CNAME   rpz-passthru.

; [snip]


Leia os detalhes para entender a configuração geral, bem como a semântica bastante específica dentro de uma zona RPZ! (Tem a sintaxe da zona normal, mas como você pode ver, alguns nomes especiais têm um significado muito específico.)

    
por 30.12.2015 / 08:03
0

I suppose they occur because of HTTP redirects because we check the original FQDN but we don't check redirected hosts as this part occurs within Python's requests library.

Espero que você tenha esvaziado o cache DNS do BIND depois de alterar seu código. Seguindo em frente ...

O assassino está dizendo "eu supus". Você precisa ter certeza. Primeiro, verifique se há algum endereço IP privado no seu cache BIND com rndc dumpdb . Olhe através desse arquivo para infratores.

Se houver: lave seu cache. Veja se eles voltam. Não estou convencido de que os endereços IP privados estariam em seu cache como resultado de redirecionamentos HTTP. Seria muito incomum para um site publicamente acessível ter muitas instâncias de um redirecionamento HTTP que traz um visitante a um nome de host que resolve um endereço IP RFC 1918. Endereços IP privados em zonas públicas ... shudder .

Se não houver: Em seguida, o tráfego para endereços IP privados entrará no aplicativo em outro lugar. Talvez um cache de aplicativos de algum tipo. Algo na memória que você não está ciente. Talvez um processo totalmente diferente e talvez não seja sua aplicação, afinal.

Is there any option for BIND to block the resolving of private, loopback or reserved IP addresses? Can I set it to return some kind of a "not resolved" error?

Não. BIND resolve, e assim em seu cenário você tem uma condição de corrida teórica onde: Você não quer o endereço IP, mas para descobrir se é um endereço IP que você não quer, você precisa obtê-lo. O que você quer é algo de um DNS RPZ reverso, que não existe.

Estou errado. Sim, você provavelmente será capaz de usar o RPZ-IP como o ilustre Håkan Lindqvist aponta. Confira: link também upvote sua resposta .

Nesse caso, você precisa puxar a lógica para o aplicativo e verificar cada nome de host com mais cuidado contra o cache local e impedir que o rastreador vá para os endereços da RFC 1918.

Vamos detalhar o que você diz um pouco mais de perto:

...we don't check redirected hosts...

Portanto, verifique os hosts redirecionados e o problema será resolvido sem qualquer engenharia excessiva. =)

    
por 30.12.2015 / 02:53