BIND9に非権限クエリをドロップさせる

BIND9に非権限クエリをドロップさせる

私の ISP は、権限のないクエリに応答しない限り、DNS サーバーの実行を許可しています。これは、一切応答しないことを意味します。私は、権限のないクエリを拒否するように次のように構成しました。

> tweakers.net
Server:     my.server.net
Address:    my.ip#53

** server can't find tweakers.net: REFUSED

しかし、どうやらそれだけでは十分ではないようです。単純に応答をまったく送信しないようにする必要があります。それは可能でしょうか?

これは私の現在のオプション ファイルです。

options {
    directory "/var/cache/bind";

    recursion yes;

    allow-recursion { internal; };

    allow-transfer { *secondary dns ip*; };

    dnssec-enable yes;
    dnssec-validation yes;

    auth-nxdomain no;    # conform to RFC1035

    filter-aaaa-on-v4 yes;

};

私の内部ACL

acl internal {
    192.168.40.0/24;
    127.0.0.1;
    10.0.3.1/24;
    };

おそらく私がグーグルで検索しているものが適切ではないのでしょうが、そのようなオプションは見つかりません。

答え1

再帰を無効にする必要があります。

これにより、権限のないゾーンに対するクエリへの応答が停止されます。

ただし、SERVFAIL で応答します。

答え2

ここで iptables の解決策を見つけました。同様の質問が Serverfault に投稿されています。 https://serverfault.com/questions/438515/bind-blackhole-for-invalid-recursive-queries

Bind でこれを行う方法はありません。ただし、iptables ファイアウォール ルールを使用して、すべての再帰クエリへの応答をブロックすることはできます。

答え3

あなたと同じように、私も自分のサーバーが DDOS に巻き込まれるのを嫌っています。たとえそれが 30 バイトの小さなパケットで応答したとしてもです。また、何らかの理由で、iptables を使用して偽装されたリクエストをブロックすることができません。サーバーの脆弱性は 3 か月前に修正されましたが、ボットネットは依然として偽装されたリクエストをサーバーに送信しています。

したがって、結果として、この簡単なパッチを使用して、REFUSED 応答を送信しないようにすることができます (リクエストはドロップされます)。

--- bind9-9.9.5.dfsg/bin/named/query.c.orig        Thu Aug  6 21:56:57 2020
+++ bind9-9.9.5.dfsg/bin/named/query.c     Thu Aug  6 22:08:15 2020
@@ -1038,7 +1038,7 @@
                                         sizeof(msg));
                        ns_client_log(client, DNS_LOGCATEGORY_SECURITY,
                                      NS_LOGMODULE_QUERY, ISC_LOG_INFO,
-                                     "%s denied", msg);
+                                     "%s dropped", msg);
                }
                /*
                 * We've now evaluated the view's query ACL, and
@@ -5809,8 +5809,9 @@
                        } else
                                inc_stats(client, dns_nsstatscounter_authrej);
                        if (!PARTIALANSWER(client))
-                               QUERY_ERROR(DNS_R_REFUSED);
-               } else
+               //              QUERY_ERROR(DNS_R_REFUSED);
+                               QUERY_ERROR(DNS_R_DROP);
+               } else
                        QUERY_ERROR(DNS_R_SERVFAIL);
                goto cleanup;
        }
# diff -u query.c.orig query.c

... 結果として、次のような優れたログが得られます。

Aug  6 21:39:29 topor named[2652]: client 78.180.51.241#43072 (.): query (cache) './ANY/IN' dropped
Aug  6 21:40:00 topor last message repeated 485 times

また、クエリが許可されていないネットワークまたはサポートされていないドメインから送信された場合、「REFUSED」応答は返されません。

関連情報