阻止 BIND DNS 記憶體上配置錯誤的 DNS 條目
我正在執行一個帶有自己的 BIND DNS 記憶體的網路爬蟲。我們的程式碼使用我們的 DNS 記憶體解析並使用 Python 的請求庫發出 GET 請求。
問題是許多 FQDN 配置錯誤,它們指向 RFC1918 IP 地址或環回 IP,例如
127.0.0.1
或10.0.0.0/8
. 結果,我們的爬蟲試圖連接這些 IP,並以來自我們數據中心的掃描報告結束。我們對爬蟲進行了更改,現在它首先為 FQDN 解析 ip,如果 IP 在私有/環回/保留範圍內,則跳過它。
在用 tcpdump 嗅探後,我發現仍有流量流向私有 IP 地址。我想它們是由於 HTTP 重定向而發生的,因為我們檢查了原始的 FQDN,但我們不檢查重定向的主機,因為這部分發生在 Python 的請求庫中。
BIND 是否有任何選項可以阻止解析私有、環回或保留的 IP 地址?我可以將其設置為返回某種“未解決”錯誤嗎?
**編輯:**我試圖將 BIND 記憶體轉儲到文件並檢查它,現在我確定它是由於 HTTP 重定向而發生的,但更改程式碼並不容易,我正在尋找配置 BIND 之類的快捷方式,否則我將在防火牆上阻止它們.
使用 BIND,您可以使用響應策略區 (RPZ)功能來阻止解析引用某些地址的地址記錄 (
A
/ )。AAAA
具體而言,RPZ-IP類型的條目是相關的:
RPZ-IP
IP 觸發器是響應的 ANSWER 部分中 A 或 AAAA 記錄中的 IP 地址。除了作為rpz-ip的子域之外,它們被編碼為客戶端 IP 觸發器。
作為範例案例,手冊使用了這個:
; IP policy records that rewrite all responses containing A records in 127/8 ; except 127.0.0.1 8.0.0.0.127.rpz-ip CNAME . 32.1.0.0.127.rpz-ip CNAME rpz-passthru.
關於配置內容的總體構想在手冊中總結為:
例如,您可以使用此選項語句
response-policy { zone "badlist"; };
和這個區域聲明
zone "badlist" {type master; file "master/badlist"; allow-query {none;}; };
使用此區域文件
$TTL 1H @ SOA LOCALHOST. named-mgr.example.com (1 1h 15m 30d 2h) NS LOCALHOST. ; [snip] ; IP policy records that rewrite all responses containing A records in 127/8 ; except 127.0.0.1 8.0.0.0.127.rpz-ip CNAME . 32.1.0.0.127.rpz-ip CNAME rpz-passthru. ; [snip]
請閱讀詳細資訊以了解整體設置以及 RPZ 區域內相當具體的語義!(它具有正常的區域語法,但您可以看到一些特殊名稱具有非常特定的含義。)