
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 ANY
solicitaçõ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-recursion
minha LAN para que essas solicitações sejam rejeitadas. Nesses casos, o servidor responde apenas com seções authority
e additional
referentes 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.