为什么 DMARC 的新 "NP" 标签在 DNSSEC 中可能失败
最近更新的 DMARC 规范(RFC 9989)引入了新的 np 标签,其目的是指定在发送者域名为 DMARC 记录发布域的一个不存在的子域名时,接收者应适用的策略。我们发现,RFC 9989 中对“不存在的域”的定义与另一项最近的规范(RFC 9824,又称“DNSSEC 中的简约不存在声明”)存在冲突,导致 np 标签并不总是按预期工作。尽管 DNSSEC 的使用还远未普及,但此问题影响着所有使用 DNSSEC 的域名,尤其是在像 Cloudflare、NS1、AWS Route 53 和 Azure 等主要 DNS 提供商的服务下。我们向负责 DMARC 的 IETF 工作组提出了这个问题:他们承认了这个问题,但没有达成解决方案。在本文中,我们将解释整个故事,并尝试评估这种不兼容性的影响。 新 np 标签 2026 年 5 月,IETF 发布了 DMARC 规范的更新版本,包括三份文件。RFC 9989 引入了一个名为 np 的新 DMARC 记录标签,代表不存在的子域名政策。在 DMARC 记录中,它的格式如下:v=DMARC1; p=none; sp=quarantine; np=reject; p 标签指定的政策适用于发布记录的域名,sp 标签适用于不发布自身 DMARC 记录的政策域的现存子域名,而 np 标签适用于不存在的子域名。设置不同的策略有助于当你希望“阻止”未使用的子域名的恶意电子邮件,同时在其他子域名上保持较宽松的策略时。 DNS 中的不存在子域名 DMARC RFC 对不存在的域的定义如下:就 DMARC 目的而言,不存在的域名符合 RFC8020 中描述的术语含义。也就是说,如果收到的域名查询回复代码是 NXDOMAIN,则该域名及其所有子域名均不存在。这是一个常见的定义,没有什么令人惊讶的。DNS 服务器通常返回 NXDOMAIN 响应代码来表示查询的域名及其所有子域名不存在,这意味着它们没有任何关联的 DNS 记录。下面是一个例子: ~ ❯ dig non-existent-subdomain.rai.it +noall +comments +answer ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 17031 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 当请求的特定资源记录类型未找到,而查询的域名存在其他记录类型时,情况有所不同。在这种情况下,DNS 名称是存在的,因此服务器无法返回 NXDOMAIN。相反,它会使用 NOERROR 状态和空的答案部分(也称为 NODATA)。(之前对 DMARC 的一项实验性扩展 RFC 9091 指定不存在的域名为 A、AAAA 和 MX 记录的 NXDOMAIN 或 NODATA 响应,明确提到这是一个比 RFC 8020 中的定义更广泛的定义。此定义在纳入 RFC 9989 时已被修改。)在上述例子中,我们可以确定 non-existent-subdomain.rai.it 名称及其所有子域名不存在。另一方面,在以下示例中,我们可以确定域名 news.rai.it 没有 MX 记录,但它存在,因为它有其他记录类型: ~ ❯ dig news.rai.it MX +noall +comments +answer ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37891 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 在 DNSSEC 的世界中,事情变得有些复杂。 DNSSEC 简介 DNSSEC 是 DNS 的一种安全扩展,使解析器能够验证 DNS 答复的真实性,确保其未被篡改。它通过添加可供解析器验证的加密签名来实现这一点。在以下示例中,我们明确要求 DNS 解析器返回与 DNSSEC 相关的数据。我们可以看到,DNS 响应的 ANSWER 部分包含一个类型为 RRSIG 的额外记录。 ~ ❯ dig dmarcwise.io +dnssec +noall +comments +answer ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49227 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 1232 ;; ANSWER SECTION: dmarcwise.io. 892 IN A 94.237.30.173 dmarcwise.io. 892 IN A 94.237.26.215 dmarcwise.io. 892 IN RRSIG A 13 2 900 20260801080000 20260704073000 20768 dmarcwise.io. bPF4BFfnETKC4GGwrmi0xlOzvBaotX8DG5E8/rpmelxoXJ2eA8RJtUrN JVFjFVCq5ZP/Ul9XYgT86c8Vw5Y4Sw== RRSIG 记录包含解析器需验证的签名。验证过程涉及查询区域中的其他记录(DNSKEY),以及父区域(DS),向上移动至 DNS 层次结构的根区域。 DNSSEC 中的不存在声明 在标准 DNS 中,对不存在的域的查询生成的回复包含 e
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡