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

Kol*_*nya 4 dns configuration bind

我成功地在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'
Run Code Online (Sandbox Code Playgroud)

我不太确定如何解释或使用这些信息......有什么想法吗?此外,我无法找到bind9日志所在的位置:/var/log/没有bind9条目。谁能告诉我它们在 Debian Jessie 上的位置?

Rui*_*iro 7

我已经看到你的区域文件:它似乎是一个包含 35 万多个域的列表,目前,它被定义为本地 BIND 服务器作为主服务器。域具有以下格式:

zone "xxxx.com" { type master; notify no; file "null.zone.file"; };
Run Code Online (Sandbox Code Playgroud)

根据内存要求,我想大概说一下,当域表加载到内存中时,您可能需要大约 40MB-80MB 的可用 RAM。(尽管至少我会觉得 200MB 更舒服)

除非服务器在 RAM 中受到严重限制,否则这似乎不太可能,但它可能会发生。

我还注意到几个域的名称中有下划线(“_”)。在 DNS RR 中使用下划线会破坏一些 RFC(RFC 952 和 RFC 1123),您需要将指令添加到 BIND 选项部分:

check-names master ignore;
Run Code Online (Sandbox Code Playgroud)

至于用于将域列入黑名单的格式和方法。从版本 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
Run Code Online (Sandbox Code Playgroud)

要在不重新启动的情况下应用新文件限制,您需要运行:

sudo sysctl -p
Run Code Online (Sandbox Code Playgroud)

对于每个进程的文件限制,编辑/etc/security/limits.conf

* - nofile 400000
Run Code Online (Sandbox Code Playgroud)

要应用每个进程的文件限制,请注销并登录,或运行:

sudo ulimit -n 400000
Run Code Online (Sandbox Code Playgroud)

提高这两个限制后,您需要重新启动 BIND:

sudo service bind9 restart
Run Code Online (Sandbox Code Playgroud)

要将文件转换为 RPZ 格式,请运行:

cat bind | tr -d \"  | awk ' { print $2" CNAME ." } ' > /etc/bind/rpz.db
Run Code Online (Sandbox Code Playgroud)

该脚本会将条目转换为以下格式:

zeus.developershed.com CNAME .
zeusclicks.com CNAME .
zintext.com CNAME .
Run Code Online (Sandbox Code Playgroud)

在named的选项部分添加:

response-policy { zone "rpz"; };
Run Code Online (Sandbox Code Playgroud)

创建 RPZ 区域的声明:

zone "rpz" {
  type master;
  file "/etc/bind/rpz.db";
};
Run Code Online (Sandbox Code Playgroud)

添加到/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.
Run Code Online (Sandbox Code Playgroud)

取消配置您的 DNS 文件并重新启动 BIND 服务器。显然,RPZ 文件可以使用通配符进行优化并缩短很多,但是即使没有这种优化,现在您也不需要那么多打开的文件。

至于查询BIND/DNS日志,它们是和系统一起用/var/log/syslog标签登录的named。您可以使用以下命令:

sudo grep named /var/log/syslog
Run Code Online (Sandbox Code Playgroud)