在阅读了this link on how to block domains with bind之后,我将SquidGuard黑名单和我需要的类别中的连接域收集到一个大清单中.然后我将它送到this python script,生成一个包含大约200万个区域的文件.
named-checkconf解析它很好,但重命名命名需要大约10分钟,然后它不会解决任何问题,服务器会慢下来爬行.删除包含结果在命名工作再次正常.
什么是设置BIND9以有效地作为DNS防火墙工作的正确方法?
如果还可以阻止解析为解决整个问题的特定IP地址的任何域.
我正在运行bind作为非权威,只是一个缓存服务器.
解决方法
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 ARM的第6章(本答案的底部),适用于您的BIND版本,以及Chapter 9版的在线Zytrax书籍.
Cliff从我的个人经历中注意到为您节省时间:
>使用区域传输将您的RPZ区域移动到IXFR.在主服务器上启用ixfr-from-difference以实现此目的.如果使用BIND 9.9或更高版本来防止基于NOTIFY的DoS尝试,请使用基于密钥的区域传输.
>只允许管理IP查询RPZ区域.
>除非您正在运行BIND 9.10,否则不要使用多个RPZ文件.在该版本之前,多个区域存在性能问题.
> RPZ不能用于阻止2014年普及的基于NS记录的攻击,因为默认情况下RPZ旨在尝试权威查找而不是“背叛”您的记录劫持到上游名称服务器源.
>在BIND 9.10中添加了qname-wait-recurse no,可能允许您将RPZ用于此目的.我一直想要实验它.
>即使qname-wait-recurse不起作用,仍然需要一种可用于离线攻击域而无需额外配置的记录类型.我已经和Paul Vixie谈过这个问题,我们可能会在RPZ格式规范的未来版本中看到它.
> NXDOMAIN和NODATA操作将在回复的AUTHORITY部分中背叛您的RPZ区域的名称.假设人们将学习它的名字.
BIND ARM第6章链接: