将 BIND9 设置为 DNS 防火墙

将 BIND9 设置为 DNS 防火墙

由于 OpenDNS 现在需要专业版套餐才能启用过滤功能,但由于预算紧张,我们需要免费的 DNS 过滤。

看完之后此链接介绍如何使用 bind 阻止域名,我收集了 SquidGuard 黑名单,并将我需要的类别中的域串联成一个大列表。然后我将其提供给这个 python 脚本生成一个包含约 200 万个区域的文件。

named-checkconf 可以很好地解析它,但重新加载 named 需要将近 10 分钟,然后它无法解析任何内容,服务器速度会变得非常缓慢。删除 include 后,named 可以再次正常工作。

设置 BIND9 以有效地用作 DNS 防火墙的正确方法是什么?如果可以阻止任何解析为特定 IP 地址的域,那么整个问题就解决了。

我正在以非权威性的方式运行 bind,只是一个缓存服务器。

答案1

这对于当前的技术来说已经过时了。在 BIND 世界中,响应策略区域 (RPZ) 如今已成为 DNS 防火墙的代名词。

RPZ 区域是普通的 DNS 区域,但用于定义服务器的策略操作。区域“后缀”无关紧要,因为这不是真正的 DNS 域。它只是一个包含特殊格式指令列表的区域文件。

options {
          ...
          response-policy { zone "whatever.anytld";} };
};

记录的左侧定义匹配规则,其中记录类型和右侧定义要采取的操作。注意缺席以下示例左侧的尾随点。

$ORIGIN whatever.anytld.

; destination IP rewrite
baddomain1.example.com       A     198.51.100.1
*.baddomain1.example.com     A     198.51.100.1

; send them to an existing A record
baddomain2.example.com       CNAME mywebserver.example.org.
*.baddoman2.example.com      CNAME mywebserver.example.org.

; NXDOMAIN it
baddomain3.example.com       CNAME .
*.baddomain3.example.com     CNAME .

; reply with NODATA
baddomain4.example.com       CNAME *.
*.baddomain4.example.com     CNAME *.

等等。您可以利用这一点做很多事情,包括采取更严厉的措施,这些措施可能会影响无辜的共享托管网站:按名称阻止名称服务器、按 IP 阻止名称服务器、对返回记录的 IP 地址而不是名称执行操作等。

RPZ 可以做很多事情,但本文并非详尽的文档。推荐阅读内容包括适用于您的 BIND 版本的 BIND ARM 第 6 章(本答案底部),以及第九章在线 Zytrax 书籍。

根据我的个人经验,列出一些笔记,以节省您的时间:

  • 使用区域传输来移动您的 RPZ 区域IXFR。在主服务器上启用ixfr-from-differences以促进此操作。如果使用 BIND 9.9 或更高版本,请使用基于密钥的区域传输来防止基于 NOTIFY 的 DoS 尝试。
  • 仅允许管理 IP 查询 RPZ 区域。
  • 除非您运行的是 BIND 9.10,否则不要使用多个 RPZ 文件。在此版本之前,多个区域存在性能问题。
  • RPZ 不能用于阻止NS2014 年流行的基于记录的攻击,因为默认情况下 RPZ 旨在尝试权威查找,而不是将您的记录劫持“背叛”到上游名称服务器源。
    • qname-wait-recurse no已添加到 BIND 9.10 中,可能允许您使用 RPZ 来实现此目的。我一直想尝试一下。
    • 即使qname-wait-recurse no可行,仍然需要一种无需额外配置即可用于离线攻击域的记录类型。我已经与 Paul Vixie 讨论过这个问题,我们可能会在未来版本的 RPZ 格式规范中看到它。
  • NXDOMAIN并且操作将在回复部分NODATA泄露您的 RPZ 区域的名称。假设人们会知道它的名字。AUTHORITY

BIND ARM 第 6 章链接:

相关内容