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