web-dev-qa-db-ja.com

再帰が無効になっている権限のあるサーバーのBIND権限セクションを抑制します

BIND 9.11.3で、ネットワークにないホストに対して再帰を無効にして、信頼できるサーバーを実行しています。ネットワーク外のホストからサーバーの権限下にないドメインを照会すると、応答がなく、権限セクションにルートサーバーのリストが表示されます。なぜこれが発生するのか理解しており、権限セクションを完全に無効にすることは可能かどうか疑問に思っています。 minimal-responsesに似たオプションがあり、再帰が利用できない場合に権限データを返しませんか?

掘り出し物の例:

; <<>> Dig 9.11.3-1ubuntu1.1-Ubuntu <<>> @NS google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6847
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 5ed7760df1d65f05baba487c5b75a318b3065456b81ca133 (good)
;; QUESTION SECTION:
;google.com.                        IN      A

;; AUTHORITY SECTION:
.                   518400  IN      NS      D.ROOT-SERVERS.NET.
.                   518400  IN      NS      F.ROOT-SERVERS.NET.
.                   518400  IN      NS      B.ROOT-SERVERS.NET.
.                   518400  IN      NS      L.ROOT-SERVERS.NET.
.                   518400  IN      NS      I.ROOT-SERVERS.NET.
.                   518400  IN      NS      A.ROOT-SERVERS.NET.
.                   518400  IN      NS      E.ROOT-SERVERS.NET.
.                   518400  IN      NS      C.ROOT-SERVERS.NET.
.                   518400  IN      NS      M.ROOT-SERVERS.NET.
.                   518400  IN      NS      H.ROOT-SERVERS.NET.
.                   518400  IN      NS      K.ROOT-SERVERS.NET.
.                   518400  IN      NS      G.ROOT-SERVERS.NET.
.                   518400  IN      NS      J.ROOT-SERVERS.NET.

;; Query time: 36 msec

私のオプションは次のようになります:

options {
        listen-on { any; };
        directory "/var/cache/bind";
        allow-recursion { acls; };

        rate-limit {
                responses-per-second 10;
                exempt-clients { acls; };
                window 5;
        };

        allow-query-cache { any; };
        allow-query { any; };
        allow-update { none; };
        dnssec-enable no;
        dnssec-validation no;
        minimal-responses yes;
        forwarders {
                208.67.222.222;
                208.67.220.220;
        };
};
5
asmth00

私はいくつかの簡単なテストを行いましたが、あなたの問題は次の行に関連していると思います:

    allow-query-cache { any; };

構成では、パブリックへの再帰は許可されていませんが、キャッシュアクセスは許可されています。通常、リモートクライアントは、再帰が有効になっていない場合、REFUSEDのrcodeを受け取りますが、キャッシュへのアクセスが明示的に許可されているため、クライアントは、を含まないキャッシュから可能な最も具体的な回答を受け取ります。その応答。

私のDNS専門家は、明示的な必要がないすべての状況で、権限のあるサーバーで再帰とキャッシュを無効にすることをお勧めします。この機能を保持する必要があると確信している場合は、両方に同じACLを適用するのが最善です。 (またはデフォルトでallow-query-cacheの値に設定されているため、単にallow-recursionを完全に削除します)

8
Andrew B

BIND9の通常の動作について説明することは考慮しませんが(デフォルトの構成では確かにそのように動作しません)、原因は理解できていると確信しています。

権限のあるサーバーでも再帰が有効になっていますが(必ずしも良い考えではありません)、ロックダウンされています(より良い)。ただし、特に(cached結果)へのアクセスを全員に許可しています。

allow-query-cache { any; };を削除すると、(予想どおり)REFUSEDと応答するはずです。

7