BIND、RPZ 和转发优先级

BIND、RPZ 和转发优先级

我的目标是阻止绑定中的某些域,而无需先查找它们的地址(这是一个小型缓存绑定 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;

相关内容