Bind9 具有多个 RPZ 文件和多个视图,导致内存和 CPU 过载

Bind9 具有多个 RPZ 文件和多个视图,导致内存和 CPU 过载

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 新手,所以我肯定是错的。

谢谢

相关内容