我可以阻止 BIND 发送错误查询的响应代码吗?

我可以阻止 BIND 发送错误查询的响应代码吗?

我正在运行一个权威绑定 DNS 服务器。我遵循所有推荐的做法,并且我的服务器是仅权威的(非递归的),并且启用了速率限制。

BIND 使用 REFUSE 代码响应对非授权区域的查询。速率限制正在发挥作用,阻止我的服务器参与任何大规模 UDP 放大攻击,但是,我更愿意消除对我没有授权的区域的任何和所有响应。

有这个配置选项吗?

答案1

虽然没有响应您在问题中描述的确切场景(在潜在的放大攻击中欺骗查询,或者探测您的服务器是否可用于这种攻击)是可以的,因为没有解析器实际上在等待您的响应,但问题是没有响应查询会导致真正的问题,并且您提出的解决方案比您最初描述的确切场景更广泛(考虑到某些您实际上没有的区域可能会被委托给您的名称服务器,无论是意外还是故意)。

对于权威域名服务器来说,不响应查询通常不是一种好的做法。原因包括:

  • 解析器服务器会跟踪它们正在处理的权威服务器的响应能力/可靠性,以提高自己的响应能力。这是逐个服务器进行的,而不是逐个查询进行的。也就是说,如果您最终没有响应来自合法来源的查询(可能被误导),则可能会损害您名称服务器的当前感知可靠性。可能会欺骗解析器,使其认为您的名称服务器完全瘫痪(暂时瘫痪,但可能会反复瘫痪)
  • 如果不响应也可能最终影响“好的”查询(例如,可能基于高查询率?),这可能会导致乍一看可能并不明显的其他问题,例如,对于您所服务的任何未签名区域,成功进行缓存中毒攻击的风险增加(特别是如果攻击者可以诱使您的查询可靠地下降)

相反,您通常希望限制响应的大小,以便实际上不提供攻击者所寻求的放大(听起来您已经在这样做了):

  • 与任何区域都不匹配的查询(如您的示例所示)应该得到一个空的REFUSED响应(在过去,通常会发送根的完整引用响应)
  • 实施速率限制时,您可能希望发送空的截断(TC设置)响应,而不是不响应,如果实际合法的解析器服务器最终受到速率限制,它们会收到响应,并且被标记为截断只会触发它们通过 TCP 重新发送查询
  • 查询ANY类型本身的实际用途就很有限,有时为了避免产生大量响应,还会进一步受到限制。(比如minimal-any在 BIND 中)
  • (当然,绝对不允许互联网上出现递归)

至于不使用 BIND 进行响应,允许不响应的功能是响应速率限制 (RRL),它有一个slip配置参数来控制当有人达到速率限制时截断与丢弃的比率。但是,请注意,丢弃主要与解析器服务器有关,而不是与权威服务器有关(根据之前的解释)。这也在BIND 手册的 RRL 部分

(注意:删除来自权威服务器的响应可能会降低第三方成功伪造对递归解析器的响应的难度。防止伪造响应的最佳安全措施是让权威运营商使用 DNSSEC 签署其区域,并让解析器运营商验证响应。当这不是一个选项时,更关心响应完整性而不是洪水缓解的运营商可以考虑将 slip 设置为 1,导致所有速率限制的响应被截断而不是被丢弃。这会降低速率限制对反射攻击的有效性。)

如果你处于一种非常紧急的情况,需要采取不同的权衡,slip那么你可以考虑上面提到的旋钮,或者使用一些具有不同速率限制旋钮的工具,例如dnsdist
但是,如果这只是背景噪音的正常水平,您试图解决它可能会导致新的问题而收效甚微。

相关内容