我有一个可公开访问的名称服务器,因为它是几个域名的权威名称服务器。
目前服务器充斥着ANY
针对 isc.org、ripe.net 和类似网站的伪造请求(这是一个已知的分布式 DoS 攻击)。
服务器运行 BIND 并已allow-recursion
设置为我的 LAN,因此这些请求会被拒绝。在这种情况下,服务器只会使用authority
和additional
引用根服务器的部分进行响应。
我可以配置 BIND 以便它完全忽略这些请求而不发送任何响应吗?
答案1
面对同样的问题,我选择忽略所有递归请求。所有解析器在想要使用我的服务器作为权威服务器时都会发送非递归查询。只有配置错误的客户端和攻击者(就我而言)才会使用递归查询。
不幸的是,我还没有找到让 BIND 做到这一点的方法,但如果 iptables 对你来说足够好,我使用了
iptables -t raw -I PREROUTING -i eth0 -p udp --destination-port 53 \
-m string --algo kmp --from 30 \
--hex-string "|01000001000000000000|" -j DROP
答案2
我会尝试:
zone "." {
type redirect;
allow-query "none";
}
将客户端引导至根服务器的响应由“重定向”区域控制。这应该会告诉它不要回复这些内容。
Bind9 文档中暗示了这一点:http://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/Bv9ARM.ch06.html#id2592674
您可以用"none"
您的本地子网来替换。
如果您已经有zone "."
声明,只需添加即可allow-query "none";
。
答案3
您是否尝试过阻止字符串 isc.org 或阻止它的十六进制字符串?
这对我有用:
iptables -A INPUT -p udp -m 字符串 --十六进制字符串“|03697363036f726700|” --algo bm -j DROP
答案4
基本思想是让 bind 将 DNS 响应分类为 Refused,然后使用 iptables 将 Refused 转换为静默忽略。
拒绝是 named.conf 选项部分中比较简单的部分:
allow-recursion { none;};
或者当然您最喜欢的本地例外 ACL......
接下来是疯狂的 iptables 魔法,根据需要调整或删除“-o eth0”。此命令假定 UDP 之前的标准 20 字节 IPv4 层标头。
iptables -A OUTPUT -o eth0 -p udp --sport 53 -m string --from 30 --to 32 --hex-string "|8105|" --algo bm -j DROP
这决定了 DNS 响应的标志字段是否设置了以下位
- DNS 响应
- 递归查询
- 回复代码被拒绝
当规则匹配时,注意到在调试中运行绑定的日志消息“发送响应错误:主机不可达”,以便获得一些测试反馈。
必须承认,这一切都是毫无意义的。如果没有放大,攻击者可以很容易地反映 TCP SYN。最终 DNS 被破坏,除了使用 TCP 或部署 Eastlake 的 DNS cookie 之外没有其他可行的解决方案。