将BIND9设置为DNS防火墙

随着OpenDNS现在需要一个在专业版打包过滤,预算紧张,我们需要免费的DNS过滤。

在阅读了关于如何使用绑定来阻止域名的链接之后,我将我需要的类别中的SquidGuard黑名单和连接的域名收集到一个大名单中。 然后我把它喂给这个python脚本生成一个包含大约200万个区域的文件。

named-checkconfparsing它就好了,但重新命名需要将近10分钟,那么它不会解决任何问题,并且服务器变慢。 删除包含名为再次正确工作的结果。

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

我正在运行绑定作为非权威,只是一个caching服务器。

现在的技术已经过时了。 在BIND世界里,响应策略区域(RPZ)是DNS防火墙的代名词。

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

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

logging的左侧定义了匹配规则,loggingtypes和右侧定义了要采取的操作。 请注意以下示例的左侧没有尾点。

 $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阻止名称服务器,对返回logging的IP地址执行操作而不是名称等。

RPZ会做很多事情,这并不意味着作为详尽的文档。 推荐读物包括BIND ARM的第6章(本答案的底部),以及Zytrax在线书籍的第9章 。

悬崖笔记从我的个人经验中拯救你的时间:

  • 使用区域传输来移动您的RPZ区域与IXFR 。 在主控上启用ixfr-from-differences ,以促进这一点。 如果使用BIND 9.9或更高版本来防止基于NOTIFY的DoS尝试,请使用基于密钥的区域传输。
  • 只允许pipe理IP查询RPZ区域。
  • 除非您运行BIND 9.10,否则不要使用多个RPZ文件。 在该版本之前,多个区域都存在性能问题。
  • RPZ不能用于阻止在2014年普及的基于NSlogging的攻击,因为默认情况下,RPZ旨在尝试权威查找,而不是“背叛”你的logging劫持到上游域名服务器源。
    • 在BIND 9.10中添加了qname-wait-recurse no ,并且可能允许您为此使用RPZ。 我一直想要实验。
    • 即使qname-wait-recurse no工作,仍然需要一个loggingtypes,可以用来离线攻击域,而无需额外的configuration。 我已经和Paul Vixie谈过此事了,我们可能会在RPZ格式规范的未来版本中看到它。
  • NXDOMAINNODATA操作将在答复的AUTHORITY部分中背叛您的RPZ区域的名称。 假设人们会学习它的名字。

BIND ARM第6章链接:

  • BIND 9.10
  • BIND 9.9
  • BIND 9.8 (注意:9/2014 BIND 9.8达到EOL)