web-dev-qa-db-ja.com

bind9のラージゾーンファイル:広告ブロック

bind9サーバーで小さな(20,000エントリ)ゾーンファイルを正常に使用していましたが、今日、データプロバイダーが更新を送信したため、 ゾーンファイル が300,000+エントリ(30Mb +)大きくなりました。

問題は、サーバーがこのゾーンファイルで起動しないことです。 named-checkconfはエラーを報告しません。利用可能なログメッセージがありません(または正しくログに記録できませんでした)。

bind9が大きな構成ファイルを処理できるかどうか知りたいのですが、できる場合はどうすれば修正できますか。いいえの場合、この問題の回避策があるかどうかを知りたいです。多分それはデータベースにエントリを保存することが可能ですか?

私が使用しようとしているゾーンファイルは here からダウンロードできます。

更新:

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のどこにあるのか誰か教えてもらえますか?

4
Kolyunya

私はあなたのゾーンファイルを見ました:それは現時点でそれがローカルBINDサーバーをマスターとして定義されている350k以上のドメインのリストのようです。ドメインの形式は次のとおりです。

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

メモリ要件に従って、ドメインテーブルがメモリに読み込まれるため、大まかな数値として約40MB〜80MBの空き容量RAMが必要になる場合があります。 (少なくとも200MBの方が快適だと思いますが)

サーバーがRAMで厳しく制限されていない限り、それは少しありそうにないように見えますが、発生する可能性があります。

また、いくつかのドメインの名前にアンダースコア( "_")があることに気づきました。 DNS RRにアンダースコアを付けると、いくつかのRFC(RFC952およびRFC1123)が壊れます。そのため、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

これらの2つの制限を引き上げた後、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
7
Rui F Ribeiro