web-dev-qa-db-ja.com

BIND、RPZ、および転送の優先順位

私の目的は、最初にアドレスを検索せずにバインドで特定のドメインをブロックすることです(これは小さなキャッシュバインドDNSサーバーです)。

現在、私の構成ではbadhost.comへのリクエストを転送してIPアドレスを取得し(wiresharkで確認できます)、その応答をNXDOMAINで上書きします。

bind.log:

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.zone

$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

rpz.blacklist.db

badhost.com CNAME .

何千ものエントリがあるので、ゾーンごとに同じファイル(0.0.0.0または127.0.0.1)を指すゾーンは必要ありません。

5
Jon T

これはqname-wait-recurseで実現できます。この機能の使用に関する BIND 9.10 ARM のドキュメントは次のとおりです。

QNAMEまたはClient-IPトリガーにDNSレコードは必要ありません。名前またはIPアドレス自体で十分なので、原則としてクエリ名を再帰的に解決する必要はありません。ただし、要求された名前を解決しないと、応答ポリシーの書き換えが使用されていること、および名前がポリシーゾーンにリストされていることが、リストされた名前のサーバーのオペレーターに漏洩する可能性があります。その情報漏えいを防ぐために、デフォルトでは、要求に必要な再帰は、ポリシートリガーが考慮される前に行われます。リストされたドメインはしばしば権限のあるサーバーが遅いため、このデフォルトの動作はかなりの時間を費やす可能性があります。 qname-wait-recurse noオプションは、再帰によってエラー以外の応答を変更できない場合のデフォルトの動作をオーバーライドします。このオプションは、IP、NSIP、およびNSDNAMEトリガーを含む他のゾーンの後にリストされているポリシーゾーンのQNAMEまたはクライアントIPトリガーには影響しません。これらは、A、AAAA、およびNS応答は解決中にRRSIGレコードが見つかったかどうかに依存するため、break-dnssec yesが使用されていない限り、DNSSEC要求(DO = 1)にも影響しません。このオプションを使用すると、エラー応答が発生する可能性があります。権限のあるサーバーで問題を発見するための再帰は行われていないため、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;
3
Andrew B