在我的 DNS 服务器的 named.conf 中我看到
rate-limit {
responses-per-second 5;
window 5;
};
这到底意味着什么?这会导致 DNS 客户端出现问题吗?这个配置是否太严格了?
答案1
它限制单个 DNS 客户端在一秒钟内可以获得的相同响应数。该window 5
选项允许突发 5*5 个响应。
“相同响应”和“单个 DNS 客户端”在这里是不太明显的术语,请阅读以下内容以了解更多信息:http://web.archive.org/web/20140209100744/http://ss.vix.su/~vjs/rl-arm.html。
一般来说,限制速率是件好事 - 将来万一发生 DOS 攻击时可能会有所帮助。大多数情况下,默认设置应该没问题。
答案2
你应该读BIND 9.9 管理员参考手册。
基本上,responses-per-second
每秒可以发送到一个单一目的地的相同回复的数量。定义很棘手。
单一目的地是堵塞ipv4-prefix-length
网络地址的数量,在或中配置的大小(ipv6-prefix-length
视情况而定)。因此,如果ipv4-prefix-length
是 24,并且192.0.2.1
和都192.0.2.2
在查询 DNS 服务器,它们将共享此配额,并且只能在它们之间发送一定数量的查询。
相同答复是对特定 RRtype 的查询的答复,该查询针对特定的存在名称,或针对不存在的名称。以下查询都是不同的:
IN A example.net.
IN A www.example.net.
IN AAAA example.net.
IN A nonexistent.domain.example.net.
但是,以下所有查询都是相同的(假设nonexistent.domain.example.net.
等符合其名称):
IN A nonexistent.domain.example.net.
IN A nonexistent.domain2.example.net.
IN SOA other.nonexistent.domain.example.net.
window
事情就更复杂了。它是配额可以存入的秒数。乘以window
和responses-per-second
可得出任何配额可以为正的最大值,或者更基本的术语是突发容量。
举一个概括性的例子:
您是 的非递归权威名称服务器example.net.
。假设过去 10 秒内没有看到任何 DNS 流量,问题中的配置全局适用。以下事件按顺序发生:
- 主机 198.51.100.1 发送 100 个查询
IN NS example.net.
。其中 25 个将被允许,其余 75 个将被忽略。 - 主机 198.51.100.1 发送 100 个查询
IN A nonexistent.example.net.
。其中 25 个将被允许,其余 75 个将被忽略。 - 主机 198.51.100.1 发送 1 个查询,
IN MX nonexistent-domain.example.net.
由于已达到不存在的域的限制,它将被忽略。 - 主机 198.51.100.1 发送 1 个查询
IN A example.net.
。这是允许的。 - 主机 192.0.2.1 到 192.0.2.50 各自发送一个查询
IN NS example.net.
。其中 25 个得到回复,其余 25 个被忽略;198.51.100.0/24 的配额不适用于这些主机,但它们共享 192.0.2.0/24 的配额。 - 一秒钟过去了
- 主机 192.0.2.26 到 192.0.2.50 重复它们的查询
IN NS example.net.
。其中 5 个得到回复,剩余的 20 个被忽略,因为配额每秒只补充 5 个查询。
答案3
iptables -A INPUT -p udp --dport 53 -m recent --set --name dnslimit
iptables -A INPUT -p udp --dport 53 -m recent --update --seconds 60 --hitcount 11 --name dnslimit -j DROP
IPtables 也可以正常工作。如果发现攻击,则完全阻止流量进入服务。
答案4
我在遭受放大攻击的运行 bind 9 服务器上有一个非常接近的配置(无窗口 5 值)。我已完成 DNS 数据包捕获,服务器正确回答了合法查询,但没有响应攻击查询。这是在约 30 分钟内捕获的 5000 个数据包。从我的角度来看,这些值完全阻止了攻击。