Bind 9 DNSSEC 没有返回 SERVFAIL(应该返回该值)

Bind 9 DNSSEC 没有返回 SERVFAIL(应该返回该值)

因此,我刚刚在 Almalinux 9.1 上安装了 bind 9.11.36,但它没有按预期验证 DNSSEC。查找www.dnssec-failed.org应该验证失败。结果如预期的那样缺少广告标志,但我没有收到 SERVFAIL,它给出了不应该给出的答案。

我的查询是挖掘www.dnssec-failed.org@127.0.0.1

我的日志显示...正在验证www.dnssec-failed.org/A:尚未找到有效签名 nslookup 和 dig 均给出了有效结果,但没有出现预期的 SERVFAIL。为什么???


   dig www.dnssec-failed.org @127.0.0.1
   
   ; <<>> DiG 9.16.23-RH <<>> www.dnssec-failed.org. @127.0.0.1 A
   ;; global options: +cmd
   ;; Got answer:
   ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50810
   ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
   
   ;; OPT PSEUDOSECTION:
   ; EDNS: version: 0, flags:; udp: 1232
   ; COOKIE: 0a21031e4e1f7243010000006424706502d5d67190cfe7eb (good)
   ;; QUESTION SECTION:
   ;www.dnssec-failed.org.         IN      A
   
   ;; ANSWER SECTION:
   www.dnssec-failed.org.  5489    IN      A       69.252.193.191
   www.dnssec-failed.org.  5489    IN      A       68.87.109.242
   
   ;; Query time: 0 msec
   ;; SERVER: 127.0.0.1#53(127.0.0.1)
   ;; WHEN: Wed Mar 29 10:07:49 PDT 2023
   ;; MSG SIZE  rcvd: 110
   
    > nslookup www.dnssec-failed.org
   Server:         127.0.0.1
   Address:        127.0.0.1#53
   
   Non-authoritative answer:
   Name:   www.dnssec-failed.org
   Address: 69.252.193.191
   Name:   www.dnssec-failed.org
   Address: 68.87.109.242

我的named.conf非常简单,


    options {
            listen-on port 53 { 127.0.0.1; 192.168.9.82; 10.1.2.35; 216.151.2.125; };
            directory       "/var/named";
            datasize        10G;
            max-cache-size  10G;
            dump-file       "/var/named/data/cache_dump.db";
            statistics-file "/var/named/data/named_stats.txt";
            memstatistics-file "/var/named/data/named_mem_stats.txt";
            secroots-file   "/var/named/data/named.secroots";
            recursing-file  "/var/named/data/named.recursing";
            allow-query     { localhost; 192.168.9.0/24; 10.1.2.0/24; 216.151.2.96/27; };
    
            recursion yes;
            dnssec-validation yes;
    
            managed-keys-directory "/var/named/dynamic";
            geoip-directory "/usr/share/GeoIP";
    
            pid-file "/run/named/named.pid";
            session-keyfile "/run/named/session.key";
    
            /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
            include "/etc/crypto-policies/back-ends/bind.config";
    };
    
    logging {
            channel default_debug {
                    file "data/named.run";
                    severity dynamic;
            };
            category lame-servers {null;};
    };
    
    include "/etc/named.rfc1912.zones";
    include "/etc/named.root.key";

我将非常感激任何有关下一步该去哪里的线索。感谢您的帮助。

答案1

您已dnssec-validation设置为yes。选项包括yesnoauto

当设置为 时yes,必须使用语句(或可能是其他两个已弃用的语句)手动配置 DNSSEC 信任锚trust-anchors。我在您的配置中没有看到这样的语句。

最新版本的 BIND 9 配置参考说:

如果设置为是,则启用 DNSSEC 验证,但必须使用trust-anchors语句(或managed-keystrusted-keys语句,均已弃用)手动配置信任锚。如果没有配置信任锚,则不会进行验证。

您可能希望改为设置dnssec-validationauto。这将允许 BIND 使用其内置的根 DNSSEC 信任锚,并根据需要自动更新它。如果您不想这样做,另一种方法是自己获取根信任锚来自 IANA,应用您认为足够的任何验证程序。

如果您想要添加私有 DNS 区域而不在其上实施 DNSSEC,您可以像这样声明它们:

validate-except { "home.arpa"; };

要使用home.arpa区域(根据RFC 8375(保证不与官方任何内容冲突),你可能还需要:

disable-empty-zone "home-arpa";

答案2

我将其改为自动,结果是一样的,但我确实找到了问题的答案,我会将其发布在这里。

问题出在文件 /etc/crypto-policies/back-ends/bind.config 中。我将该文件与正常工作的服务器上的相同文件进行了比较,发现有很大不同。我将其更改为与正常工作的服务器匹配,然后 BAM,它开始工作了。

信息可能太多了,但这里有两个文件。

有效的那个......

disable-algorithms "." {
RSAMD5;
DSA;
};
disable-ds-digests "." {
GOST;
};

失败的那个...

disable-algorithms "." {
RSAMD5;
RSASHA1;
NSEC3RSASHA1;
DSA;
};
disable-ds-digests "." {
SHA-1;
GOST;
};

我不确定,但我怀疑原因是禁用了 NSEC3RSASHA1

相关内容