
我有一個可公開訪問的名稱伺服器,因為它是幾個網域的權威名稱伺服器。
目前,伺服器充斥著ANY
對 isc.org、ripe.net 和類似網站的偽造類型請求(這是一個已知的分散式 DoS 攻擊)。
伺服器運行 BIND 並設定allow-recursion
為我的 LAN,以便拒絕這些請求。在這種情況下,伺服器僅回應引用根伺服器的authority
和部分。additional
我可以配置 BIND 使其完全忽略這些請求,而不發送回應嗎?
答案1
面對同樣的問題,我選擇忽略所有遞迴請求。當所有解析器想要使用我的伺服器作為權威伺服器時,它們都會發送非遞歸查詢。在我自己的例子中,只有配置錯誤的客戶端和攻擊者才會使用遞歸查詢。
不幸的是,我還沒有找到一種方法讓 BIND 做到這一點,但如果 iptables 對你來說足夠好,我使用了
iptables -t raw -I PREROUTING -i eth0 -p udp --destination-port 53 \
-m string --algo kmp --from 30 \
--hex-string "|01000001000000000000|" -j DROP
答案2
我會嘗試:
zone "." {
type redirect;
allow-query "none";
}
將客戶端引向根伺服器的回應由「重新導向」區域控制。這應該告訴它不要回覆這些。
Bind9 文檔中暗示了這一點:http://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/Bv9ARM.ch06.html#id2592674
您可以替換"none"
為您的本地子網路。
如果您已有zone "."
聲明,只需添加即可allow-query "none";
。
答案3
您是否嘗試過阻止字串 isc.org 或阻止其十六進位字串?
這對我有用:
iptables -A 輸入 -p udp -m 字串 --hex 字串“|03697363036f726700|” --algo bm -j 刪除
答案4
基本概念是讓bind將DNS回應分類為Refused,然後使用iptables將Refused轉換為靜默忽略。
Refused 是named.conf 選項部分中最簡單的部分:
allow-recursion { none;};
或者當然是您最喜歡的本地例外 ACL...
接下來瘋狂的 iptables 魔法,根據需要調整或刪除“-o eth0”。此指令假定標準 20 位元組 IPv4 層標頭位於 UDP 之前。
iptables -A OUTPUT -o eth0 -p udp --sport 53 -m string --from 30 --to 32 --hex-string "|8105|" --algo bm -j DROP
此鍵位於 DNS 回應的標誌欄位上,並設定了以下位
- DNS 回應
- 遞迴查詢
- 回覆碼被拒絕
當規則匹配時,注意到在偵錯中運行綁定的日誌訊息「錯誤發送回應:主機無法存取」以獲取一些測試回饋。
必須承認這完全是一種毫無意義的練習。如果沒有放大,攻擊者也可以輕鬆反射 TCP SYN。最終 DNS 被破壞,除了使用 TCP 或部署 Eastlake 的 DNS cookie 之外,沒有其他可行的解決方案。