开发者生态
evening
为什么 DMARC 的新“NP”标签可能因 DNSSEC 失败
2026-07-05
1 阅读
约4分钟阅读
matteocontrini
字号:
← 博客 最后更新时间:2026 年 7 月 5 日 为什么 DMARC 的新“np”标签可能因 DNSSEC 失败 Matteo 18 分钟。阅读最近更新的 DMARC 规范(发布为 RFC 9989),引入了新的 np 标签。其目的是指定当发件人域是发布 DMARC 记录的域不存在的子域时接收者应应用的策略。我们发现 RFC 9989 中包含的“不存在的域”的定义与另一个最近的规范 RFC 9824(称为“DNSSEC 中的紧凑拒绝存在”)冲突,导致 np 标记并不总是按预期工作。尽管 DNSSEC 的使用远未广泛普及,但该问题影响了所有使用 DNSSEC 以及主要 DNS 提供商(如 Cloudflare、NS1、AWS Route 53 和 Azure)的域。我们向负责 DMARC 的 IETF 工作组提出了这个问题:该问题得到了承认,但没有就解决方案达成一致。在本文中,我们将解释整个故事并尝试评估这种不兼容性的影响。新的 np 标签 2026 年 5 月,IETF 发布了 DMARC 规范的更新版本,由三个文档组成。 RFC 9989 引入了一个名为 np 的新 DMARC 记录标签,代表不存在的子域策略。在 DMARC 记录中,它看起来像这样:v=DMARC1; p=无; sp=检疫; np=拒绝; p 标记指定的策略适用于发布记录的域,sp 标记适用于策略域中不发布自己的 DMARC 记录的现有子域,而 np 标记适用于不存在的子域。当您想要“阻止”未使用的子域上的恶意电子邮件,同时对其他子域保持不太严格的策略时,设置不同的策略会很有帮助。 DNS 中不存在的子域 DMARC RFC 将不存在的域定义如下:出于 DMARC 目的,不存在的域与 RFC8020 中描述的术语含义一致。也就是说,如果收到的域名查询响应代码是 NXDOMAIN,则该域名和任何可能的子域都不存在。这是一个常见的定义,不足为奇。 DNS 服务器通常会返回 NXDOMAIN 响应代码,以表明所查询的域名及其所有子域都不存在,这意味着它们没有任何与其关联的 DNS 记录。这是一个例子:~ ❯ dig non-existent-subdomain.rai.it +noall +comments +answer ;;得到答案:;; ->>HEADER<<- 操作码:QUERY,状态:NXDOMAIN,id:17031 ;;标志:qr rd ra;查询:1,答案:0,权限:1,附加:1 ;;选择伪节:; EDNS:版本:0,标志:; udp: 1232 另一种情况是未找到所请求的特定资源记录类型,但存在查询域的其他记录类型。在这种情况下,DNS 名称存在,因此服务器无法返回 NXDOMAIN 。相反,它会使用 NOERROR 和空答案部分,也称为 NODATA 。 (之前对 DMARC 的实验性扩展 RFC 9091 指定不存在的域是指对 A、AAAA 和 MX 记录有 NXDOMAIN 或 NODATA 响应的域,明确提到这是比 RFC 8020 中的定义更广泛的定义。此定义在合并到 RFC 9989 中时发生了更改。)在上面的示例中,我们可以确定不存在的 subdomain.rai.it 名称及其所有名称子域不存在。另一方面,在下面的示例中,我们可以确定域 news.rai.it 没有 MX 记录,但它存在是因为它有其他记录类型: ~ ❯ dig news.rai.it MX +noall +comments +answer ;;得到答案:;; ->>HEADER<<- 操作码:QUERY,状态:NOERROR,id:37891 ;;标志:qr rd ra;查询:1,答案:0,权限:1,附加:1 ;;选择伪节:; EDNS:版本:0,标志:; udp: 1232 在 DNSSEC 世界中,事情变得有点复杂。 DNSSEC 简称 DNSSEC 是 DNS 的安全扩展,可让解析器验证 DNS 答案是否真实且未被篡改。它通过添加解析器可以验证的加密签名来实现这一点。在下面的示例中,我们明确要求 DNS 解析器返回 DNSSEC 相关数据。我们可以看到 DNS 响应在 ANSWER 部分包含一条附加记录,类型为 RRSIG 。 ~ ❯ dig dmarcwise.io +dnssec +noall +comments +answer ;;得到答案:;; ->>HEADER<<- 操作码:QUERY,状态:NOERROR,id:49227 ;;标志:qr rd ra;查询:1,答案:3,权限:0,附加:1 ;;选择伪节:; EDNS:版本:0,标志:do; UDP:1232;;答案部分:dmarcwise.io。 892 在 94.237.30.173 dmarcwise.io。 892 在 94.237.26.215 dmarcwise.io。 892 在 RRSIG A 13 2 900 20260801080000 20260704073000 20768 dmarcwise.io。 bPF4BFfnETKC4GGwrmi0xlOzvBaotX8DG5E8/rpmelxoXJ2eA8RJtUrN JVFjFVCq5ZP/Ul9XYgT86c8Vw5Y4Sw== RRSIG 记录包含解析器验证的签名。验证过程涉及查询区域 ( DNSKEY ) 和父区域 ( DS ) 中的其他记录,在 DNS 层次结构中向上移动,直到到达根区域。拒绝
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱