![Bind9 具有多个 RPZ 文件和多个视图,导致内存和 CPU 过载](https://linux22.com/image/791749/Bind9%20%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%20RPZ%20%E6%96%87%E4%BB%B6%E5%92%8C%E5%A4%9A%E4%B8%AA%E8%A7%86%E5%9B%BE%EF%BC%8C%E5%AF%BC%E8%87%B4%E5%86%85%E5%AD%98%E5%92%8C%20CPU%20%E8%BF%87%E8%BD%BD.png)
我 BIND 9.18.18-0ubuntu0.22.04.1-Ubuntu (Extended Support Version) <id:>
正在"22.04.3 LTS (Jammy Jellyfish)"
我的用例如下。我需要实现某种 DNS 防火墙,其中不同的请求客户端会命中不同的阻止列表。为了实现这一点,我使用了响应策略区域和视图。我的设置如下。
我的named.conf.options文件(包含在主named.conf中)包含以下内容
options {
directory "/var/cache/bind";
check-names master warn;
response-policy {
zone "rpz.porn.local";
zone "rpz.malware.local";
zone "rpz.drugs.local";
然后在文件中引用它们,named.conf
如下所示
include "/etc/bind/client_specific_blocklist.d/*.conf";
该目录内的 conf 文件示例为:
view "10.9.0.1" {
match-clients { 10.9.0.1; };
recursion yes;
zone "rpz.porn.local" {
type master;
file "/etc/bind/categories_rpz.d/rpz.porn.local";
allow-query { 10.9.0.0/16; };
//allow-transfer { localhost; };
};
zone "rpz.malware.local" {
type master;
file "/etc/bind/db.127";
allow-query { 10.9.0.0/16; };
//allow-transfer { localhost; };
};
zone "rpz.crypto.local" {
type master;
file "/etc/bind/db.127";
allow-query { 10.9.0.0/16; };
//allow-transfer { localhost; };
};
这个想法是,客户端 10.9.0.1 不应该能够解析任何恶意软件或色情域名,但它们应该能够解析其余类别。这在named.conf.default-zones
zone "rpz.porn.local" {
type master;
file "/etc/bind/db.127";
allow-query { 10.9.0.0/16; };
//allow-transfer {10.9.0.0/16; };
};
zone "rpz.piracy.local" {
type master;
file "/etc/bind/db.127";
allow-query { 10.9.0.0/16; };
//allow-transfer {10.9.0.0/16; };
};
我的想法是 - 当我想返回实际域时,我引用 db.127 文件,该文件仅包含 localhost 的 RR。这样,Bind9 会使用递归并将查询转发到我在选项中设置的上游服务器。当我想替换响应(即阻止域)时,我会引用 rpz 文件。这一直有效 - 只是客户端数量在增加,因此浏览量也在增加。
当我获得 80 个左右的视图时,我的系统会耗尽所有 4vCPU 和 8 GB 的 RAM - 一切都从这里开始变糟,OOM 触发崩溃和系统完全锁定。这发生在我的服务器启动后大约一分钟。我想知道这是 Bind9 和我的资源的硬性限制,还是我的知识限制 - 在这种情况下,我希望得到有关如何最好地实现选择性客户端 IP 的 DNS 防火墙的建议。我知道我可以将多个 IP 分组到一个视图中并将它们扔进去match-clients
- 但是即使我这样做,我的用例也会有大约 100 个视图。任何帮助都将不胜感激。据我所知,我认为每个视图都被视为一个单独的命名空间,并且所有 RPZ 文件都按视图加载到内存中。我是 bind9 新手,所以我肯定是错的。
谢谢