bind: blackhole para consultas recursivas inválidas?

bind: blackhole para consultas recursivas inválidas?

Eu tenho um servidor de nomes acessível publicamente, poisé o servidor de nomes oficial para alguns domínios.

Atualmente o servidor está inundado com ANYsolicitações de tipo falso para isc.org, maduro.net e similares (isso é umataque DoS distribuído conhecido).

O servidor executa o BIND e configurou allow-recursionminha LAN para que essas solicitações sejam rejeitadas. Nesses casos, o servidor responde apenas com seções authoritye additionalreferentes aos servidores raiz.

Posso configurar o BIND para ignorar completamente essas solicitações, sem enviar nenhuma resposta?

Responder1

Diante do mesmo problema, optei por ignorar todas as solicitações recursivas. Todos os resolvedores enviam uma consulta não recursiva quando desejam usar meu servidor como um servidor autoritativo. Apenas clientes e invasores mal configurados, no meu caso, usam consultas recursivas.

Infelizmente não encontrei uma maneira de deixar o BIND fazer isso, mas caso o iptables seja bom o suficiente para você, usei

iptables -t raw -I PREROUTING -i eth0 -p udp --destination-port 53 \
    -m string --algo kmp --from 30 \
    --hex-string "|01000001000000000000|" -j DROP

Responder2

Eu tentaria:

zone "." {
  type redirect;
  allow-query "none";
}

As respostas que encaminham os clientes aos servidores raiz são controladas pela zona de "redirecionamento". Isso deve dizer para não responder a eles.

Isso é sugerido nos documentos do Bind9:http://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/Bv9ARM.ch06.html#id2592674

Você pode substituir "none"pela sua sub-rede local.

Se você já possui uma zone "."declaração, basta adicioná allow-query "none";-la.

Responder3

Você tentou bloquear a string isc.org ou bloquear a string hexadecimal?

Isso funcionou para mim:

iptables -A INPUT -p udp -m string --hex-string "|03697363036f726700|" --algo bm -j DROP

Responder4

A ideia básica é permitir que o bind classifique a resposta DNS como Recusada e use iptables para converter Refused em silenciosamente ignorado.

Recusado é a parte fácil na seção de opções do Named.conf:

allow-recursion { none;};

Ou, claro, suas ACLs favoritas para exceções locais...

Próxima mágica maluca do iptables, ajuste ou remova "-o eth0" conforme necessário. Este comando assume o cabeçalho da camada IPv4 padrão de 20 bytes antes do UDP.

iptables -A OUTPUT -o eth0 -p udp --sport 53 -m string --from 30 --to 32 --hex-string "|8105|" --algo bm -j DROP

Esta chave no campo flags da resposta DNS com os seguintes bits definidos

  • Resposta DNS
  • Consulta recursiva
  • Código de resposta recusado

Mensagem de log observada executando bind na depuração "erro ao enviar resposta: host inacessível" quando a regra corresponde para obter algum feedback para teste.

Devo admitir que tudo isso é um exercício um tanto inútil. Se não houver amplificação, um invasor poderá facilmente refletir o TCP SYN. Em última análise, o DNS está quebrado, simplesmente não há solução viável além do uso do TCP ou da implantação dos cookies DNS da Eastlake.

informação relacionada