我的目标是阻止绑定中的某些域,而无需先查找它们的地址(这是一个小型缓存绑定 DNS 服务器)。
目前,我的配置将转发对 badhost.com 的请求并获取 IP 地址(我可以在 wireshark 中看到这一点),然后它将用 NXDOMAIN 覆盖该响应。
绑定日志:
client 192.168.1.1#46107 (badhost.com): rpz QNAME NXDOMAIN rewrite badhost.com via badhost.com.rpz
但获取 IP 地址毫无意义,而且会延迟查询。我只想让它快速返回被阻止域的 NXDOMAIN,而不进行转发。
配置:
options {
response-policy { zone "rpz" policy nxdomain; };
cleaning-interval 360;
forward only;
forwarders { x.x.x.x; y.y.y.y; };
allow-recursion { any; };
allow-query { any; };
allow-query-cache { any; };
}
zone "rpz" {
type master;
file "/etc/bind/rpz.zone";
};
zone "0.0.127.in-addr.arpa" {
type master;
notify no;
file "pz/127.0.0";
};
zone "1.168.192.in-addr.arpa" {
type master;
notify no;
file "pz/192.168.1";
};
zone "lan" {
type master;
notify no;
file "pz/lan";
};
rpz.区域
$TTL 604800
@ IN SOA ns1.example.local. info.example.local. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS local.
$INCLUDE rpz.blacklist.db
黑名单数据库
badhost.com CNAME .
将会有数千个条目,所以我不希望每个条目都指向同一个文件(0.0.0.0 或 127.0.0.1)。
答案1
这可以通过 来实现qname-wait-recurse
。以下是BIND 9.10 ARM关于此功能的使用:
QNAME 或客户端 IP 触发器不需要 DNS 记录。名称或 IP 地址本身就足够了,因此原则上不需要递归解析查询名称。但是,不解析请求的名称可能会泄露以下事实:正在使用响应策略重写,并且该名称已在策略区域中列出,而这些信息会被泄露给列出名称的服务器运营商。为了防止该信息泄露,默认情况下,在考虑任何策略触发器之前,会完成请求所需的任何递归。由于列出的域通常具有较慢的权威服务器,因此这种默认行为可能会花费大量时间。qname-wait-recurse 否当递归无法更改非错误响应时,选项会覆盖默认行为。该选项不会影响在包含 IP、NSIP 和 NSDNAME 触发器的其他区域之后列出的策略区域中的 QNAME 或客户端 IP 触发器,因为这些触发器可能依赖于在递归解析期间找到的 A、AAAA 和 NS 记录。除非使用 break-dnssec yes,否则它也不会影响 DNSSEC 请求 (DO=1),因为响应取决于在解析期间是否找到 RRSIG 记录。使用此选项可能会导致错误响应(例如 SERVFAIL)看起来被重写,因为没有进行递归来发现权威服务器上的问题。
启用此功能的语法有点晦涩。它不能放在全局options {};
块中,而需要出现在定义中的尾随分号之前response-policy {};
。
[ response-policy {
zone zone_name
[ policy (given | disabled | passthru | drop |
nxdomain | nodata | cname domain) ]
[ recursive-only yes_or_no ]
[ max-policy-ttl number ]
; [...]
} [ recursive-only yes_or_no ]
[ max-policy-ttl number ]
[ break-dnssec yes_or_no ]
[ min-ns-dots number ]
[ qname-wait-recurse yes_or_no ]
[ automatic-interface-scan yes_or_no ]
; ]
前:
response-policy { zone "rpz"; };
后:
response-policy { zone "rpz"; } qname-wait-recurse no;