作者:Rico Wu | 主題:DNS 防護實務
一、為什麼要建立 Sinkhole Zone?
在日常 DNS 維運中,我們經常會看到一些可疑查詢:
wpad.nuface.tw IN A
ns1.nuface.tw IN AAAA
blog.nuface.tw IN A
這些請求有些來自網際網路掃描,有些則是自動化偵測或 Bot 行為。
其中 wpad(Web Proxy Auto Discovery)甚至可能被用於安全攻擊(WPAD 攻擊)。
若我們希望:
- 將這些可疑子域「沉沒」至 0.0.0.0(避免外部惡意利用)
- 不必為每個子域建立獨立的 zone 檔
就可以透過「共用 Sinkhole Zone」的方式實作。
二、共用 Sinkhole Zone 設定範例
1️⃣ 建立共用區檔
檔名:
/etc/bind/zones/ext/db.sinkhole.common
內容:
$TTL 300
@ IN SOA ns1.nuface.tw. dns-admin.nuface.tw. (
2025090301 ; serial
3600 ; refresh
900 ; retry
1209600 ; expire
300 ) ; minimum
IN NS ns1.nuface.tw.
; === 黑洞指向 ===
@ IN A 0.0.0.0
; 視需求決定是否回應 AAAA
; @ IN AAAA ::
* IN A 0.0.0.0
; * IN AAAA ::
- TTL 300 秒:方便快速調整。
A = 0.0.0.0:讓查詢直接導向無效位址。AAAA可選:- 若想讓 IPv6 查詢直接得到 NODATA,不要寫 AAAA。
- 若希望明確黑洞 IPv6-only 客戶端,則可加上
AAAA ::。
2️⃣ 在 named.conf 中引用
多個 zone 可共用同一個檔案:
zone "wpad.nuface.tw" {
type master;
file "/etc/bind/zones/ext/db.sinkhole.common";
allow-transfer { none; };
allow-update { none; };
};
zone "bad.attacker.com" {
type master;
file "/etc/bind/zones/ext/db.sinkhole.common";
allow-transfer { none; };
allow-update { none; };
};
這樣不論你要沉沒幾個子域,都可共用一份檔案,維護最簡單。
三、DNSSEC 的關聯與注意事項
DNSSEC 採用「信任鏈」的驗證機制。
每一層的關係是:
. (root) → .tw → nuface.tw → wpad.nuface.tw
這條鏈由 DS record(Delegation Signer)串起。
✅ 若主域有 DNSSEC(如 nuface.tw)
你在 ISP / Registry 放的 DS,是讓 .tw 能驗證 nuface.tw 的簽章。
但當你把 wpad.nuface.tw 切成獨立 zone 後,只要:
不在 nuface.tw 的 zone file 裡加入 DS for wpad.nuface.tw
那麼:
nuface.tw的 DNSSEC 驗證仍然有效。wpad.nuface.tw會被視為「unsigned zone」。- 不會破壞整體 DNSSEC 信任鏈。
🛑 若誤加 DS 紀錄
那 DNS 解析器會期望 wpad.nuface.tw 提供對應簽章。
若沒有簽名檔,解析器就會判為「bogus」,導致查詢失敗。
⚙ 建議作法
- Sinkhole zone 不簽名
- Parent zone 只宣告 NS,不加 DS
四、IPv6 AAAA 回應策略說明
| 狀況 | 查詢結果 | 使用者體驗 | 建議 |
|---|---|---|---|
| 不寫 AAAA | NOERROR / NODATA | 直接 fallback 到 IPv4,連線最快 | ✅ 推薦 |
| AAAA = :: | IPv6 客戶端嘗試無效位址,快速失敗 | 明確黑洞 | 可選 |
| AAAA = ::1 | 連回自己本機,快速失敗 | 有時造成誤判 | 不建議 |
若你的目標只是「讓外部快速 fallback 到 IPv4」,只需回應 A=0.0.0.0。
五、建議的防護策略
- 建立共用 sinkhole 檔案
/etc/bind/zones/ext/db.sinkhole.common
- 新增可疑子域 zone 指向同檔案
zone "wpad.nuface.tw" { file "db.sinkhole.common"; };
- 啟用 Response Rate Limiting (RRL)
降低被 DNS Flood 攻擊的風險。 - 保持 DNSSEC 簽名只在主域 (nuface.tw)
子域黑洞不簽名、不上傳 DS。 - 監控 query.log
若有大量重複查詢,即時新增至 sinkhole zone。
六、結語
透過共用 Sinkhole Zone 的設計,我們可以:
- 快速封鎖惡意查詢(wpad / bad domain)
- 保持設定簡潔一致
- 不破壞主域名的 DNSSEC 簽名鏈
- 在 IPv6 與 IPv4 環境中均可安全回應
這是一種輕量、可擴充、符合安全原則的 DNS 防護手法。
當公司域名流量愈來愈多、暴露面愈大時,這樣的防護策略能讓 DNS 管理更主動、更穩健。
✍️ 延伸閱讀
- BIND9 Administrator Reference Manual – Response Rate Limiting (RRL)
- [RFC 4035 – DNSSEC Protocol Modifications]
- [Microsoft WPAD vulnerability reference (CVE-2016-3213)]