绑定 DNS 速率限制和每秒响应数和窗口的值

绑定 DNS 速率限制和每秒响应数和窗口的值

在我的 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事情就更复杂了。它是配额可以存入的秒数。乘以windowresponses-per-second可得出任何配额可以为正的最大值,或者更基本的术语是突发容量。

举一个概括性的例子:

您是 的非递归权威名称服务器example.net.。假设过去 10 秒内没有看到任何 DNS 流量,问题中的配置全局适用。以下事件按顺序发生:

  1. 主机 198.51.100.1 发送 100 个查询IN NS example.net.。其中 25 个将被允许,其余 75 个将被忽略。
  2. 主机 198.51.100.1 发送 100 个查询IN A nonexistent.example.net.。其中 25 个将被允许,其余 75 个将被忽略。
  3. 主机 198.51.100.1 发送 1 个查询,IN MX nonexistent-domain.example.net. 由于已达到不存在的域的限制,它将被忽略。
  4. 主机 198.51.100.1 发送 1 个查询IN A example.net.。这是允许的。
  5. 主机 192.0.2.1 到 192.0.2.50 各自发送一个查询IN NS example.net.。其中 25 个得到回复,其余 25 个被忽略;198.51.100.0/24 的配额不适用于这些主机,但它们共享 192.0.2.0/24 的配额。
  6. 一秒钟过去了
  7. 主机 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 个数据包。从我的角度来看,这些值完全阻止了攻击。

相关内容