Bind9 的大区域文件:广告拦截

Bind9 的大区域文件:广告拦截

我成功地在服务器上使用了一个小型(20,000 个条目)区域文件bind9,但今天我的数据提供商发送了一个更新,导致区域文件成为 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 上的位置吗?

答案1

我看过你的区域文件:它似乎是一个包含超过 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

相关内容