Configuration

bind9 的大區域文件:廣告攔截

  • February 24, 2018

我成功地在bind9伺服器上使用了一個小的(20,000 個條目)區域文件,但今天我的數據提供者發送了一個更新,導致區域文件變成了 300,000+ 個條目(30Mb+)。

問題是伺服器不會以這個區域文件啟動。named-checkconf不會報告任何錯誤。沒有可用的日誌消息(或者我無法正確記錄它們)。

我想知道是否bind9能夠處理大型配置文件,如果可以,我該如何解決。如果沒有,我想知道這個問題是否有任何解決方法。也許可以將條目儲存在數據庫中?

我嘗試使用的區域文件可以從這裡下載。

更新:

service bind9 status顯示了一些可能相關的資訊:

adjusted limit on open files from 4096 to 1048576
found 1 CPU, using 1 worker thread
using 1 UDP listener per interface
using up to 4096 sockets
loading configuration from '/etc/bind/named.conf'

我不太確定如何解釋或使用這些資訊……有什麼想法嗎?我也無法找到bind9日誌所在的位置:/var/log/沒有bind9條目。誰能告訴我他們在 Debian Jessie 上的位置?

我看過你的區域文件:它似乎是一個超過 350k 域的列表,目前,它被定義為本地 BIND 伺服器作為主伺服器。域具有以下格式:

zone "xxxx.com" { type master; notify no; file "null.zone.file"; };

根據記憶體要求,我會說作為一個大概的數字,您可能需要大約 40MB-80MB 的可用 RAM,因為域表已載入到記憶體中。(儘管至少 200MB 讓我感覺更舒服)

除非伺服器在 RAM 中受到嚴重限制,否則這似乎有點不可能,但它可能會發生。

我還注意到幾個域的名稱中有下劃線(“_”)。在 DNS RR 中使用下劃線會破壞幾個 RFC(RFC 952 和 RFC 1123),您需要將指令添加到 BIND 選項部分:

check-names master ignore;

至於用於將域列入黑名單的格式和方法。從 9.8 版開始,BIND 支持專門為將域列入黑名單而創建的所謂的響應策略區 (RPZ)。

現在有幾個(商業)黑名單提供商遵循這種格式。(我自己在工作和家裡都使用 RPZ)。

使用 RPZ 應該更有意義,也意味著更輕的負載,因此,如果您支付服務費用,我建議您聯繫您的供應商以了解如何使用它。RPZ 格式在某種程度上還支持萬用字元,這意味著黑名單文件要小得多。

另一種方法是使用腳本處理文件以將其更改為 RPZ 格式。

我將在此處留下有關 RPZ 和官方 RPZ 提供商的相關連結:

https://dnsrpz.info

以及如何配置 RPZ 的教程:

http://www.zytrax.com/books/dns/ch9/rpz.html

您可能已經註意到,在目前配置下,您還會有很多打開的文件;因此我建議再次使用 RPZ。

為了在大型電子郵件、DNS 或 HTTP 伺服器中處理更多打開的文件,通常必須提高限制。

情況並不像以前使用舊核心那樣糟糕,但我仍然建議提高限制。

編輯和修改/添加打開文件的全域限制/etc/sysctl.conf指令:fs.file-max

fs.file-max=500000

要在不重新啟動的情況下應用新文件限制,您需要執行:

sudo sysctl -p

對於每個程序的文件限制,請編輯/etc/security/limits.conf

* - nofile 400000

要應用每個程序的文件限制,請註銷和登錄,或執行:

sudo ulimit -n 400000

提高這兩個限制後,需要重啟 BIND:

sudo service bind9 restart

要將文件轉換為 RPZ 格式,請執行:

cat bind | tr -d \"  | awk ' { print $2" CNAME ." } ' > /etc/bind/rpz.db

該腳本會將條目轉換為以下格式:

zeus.developershed.com CNAME .
zeusclicks.com CNAME .
zintext.com CNAME .

在命名的選項部分添加:

response-policy { zone "rpz"; };

創建 RPZ 區域的聲明:

zone "rpz" {
 type master;
 file "/etc/bind/rpz.db";
};

添加到/etc/bind/rpz.db文件頂部:

$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                         2         ; Serial
                    604800         ; Refresh
                     86400         ; Retry
                   2419200         ; Expire
                    604800 )       ; Negative Cache TTL

@       IN      NS      your_dns_fqdn.

取消配置您的 DNS 文件並重新啟動您的 BIND 伺服器。顯然,RPZ 文件可以使用萬用字元進行優化並縮短得多,但是即使沒有這種優化,現在您也不需要那麼多打開的文件。

至於查詢 BIND/DNS 日誌,它們與系統登錄一起使用/var/log/syslog標籤named。您可以使用以下命令:

sudo grep named /var/log/syslog

引用自:https://unix.stackexchange.com/questions/253841