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' 응답이 없습니다.

관련 정보