
我的 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 來阻止欺騙請求。伺服器漏洞已於三個月前修復,但殭屍網路仍向伺服器發送欺騙請求。
因此,您可以使用這個簡單的補丁來不發送 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
如果查詢來自未經授權的網路/不支援的網域,則不會有「拒絕」回應。