几乎每个 DNS 区域都会遇到的记录
TXT 记录详解:SPF、DKIM 与 DMARC
TXT 记录存放附加在域名上的任意文本。这听起来微不足道,但整个邮件信任体系正是通过它发布的,此外,您会做的大多数域名所有权验证也都依靠它。
核心问题在于,诞生于 1982 年的 SMTP 允许任何服务器声称以任何域名的身份发信,协议本身没有任何机制来阻止。SPF、DKIM 和 DMARC 是后来为解决这个问题而加上的三层机制,而且三者都存放在 TXT 记录中。
核心要点
MX 记录决定邮件送往何处。这三条 TXT 记录则决定别人是否相信自称来自您的邮件。没有它们,正常的邮件也会落入垃圾箱。
SPF:哪些服务器可以以您的名义发信
SPF(Sender Policy Framework,发件人策略框架)发布一份获准为您的域名发送邮件的服务器列表。接收服务器会把连接进来的 IP 与该列表进行比对。
example.com. 3600 IN TXT "v=spf1 include:_spf.google.com ip4:93.184.216.34 ~all"| 部分 | 含义 |
|---|---|
v=spf1 | 版本标记,必须放在最前面。 |
include:_spf.google.com | 同时信任 Google SPF 记录中的所有内容。 |
ip4:93.184.216.34 | 信任这个特定地址。 |
~all | 软失败:其他任何来源都可疑,但不会被拒收。 |
-all | 硬失败:拒收任何未列出的来源。更严格。 |
DKIM:加密签名
DKIM(DomainKeys Identified Mail)使用私钥对每封外发邮件签名。您在 DNS 中发布与之匹配的公钥,接收方据此验证签名。
selector1._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEB..."selector1 部分由您的邮件服务商选定,并包含在每封已签名的邮件中,让接收方知道要获取哪把密钥。使用选择器意味着您可以轮换密钥,或同时使用多家服务商而不冲突。
DKIM 相对于 SPF 的优势在于,签名涵盖邮件本身,所以转发后依然有效。它的弱点在于,对于完全没有签名就到达的邮件,它什么都说明不了,而这正是 DMARC 弥补的空白。
DMARC:前两者失败时该怎么办
DMARC(Domain-based Message Authentication, Reporting and Conformance)把另外两者联系起来:它要求 SPF 或 DKIM 不仅要通过,还要与可见的 From 地址对齐,并告诉接收方在失败时该怎么处理。
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:reports@example.com; pct=100"| 标签 | 含义 |
|---|---|
p=none | 仅监控,不采取任何措施。这是起点。 |
p=quarantine | 把未通过的邮件送入垃圾箱。 |
p=reject | 直接拒收未通过的邮件。最终目标。 |
rua= | 发送汇总报告的地址。 |
pct= | 将策略应用于这一比例的邮件,适合逐步推行。 |
安全地部署这三者
顺序很重要。直接上 p=reject,是让您自己的发票邮件无法送达的经典做法。
盘点所有以您的名义发信的系统
当然有您的邮件服务商,但还有开票工具、CRM、营销平台、工单系统,以及您应用的事务性邮件。这里遗漏的任何一项,之后都会出问题。
发布带软失败的 SPF
把第一步中的每个发件方都包含进来,并以
~all结尾。软失败会把未列出的发件方标记为可疑,而不会在您核实列表期间毁掉邮件。启用 DKIM 签名
在每个服务商处开启,并发布它们提供的选择器记录。发送一封测试邮件,确认签名验证通过。
DMARC 从 p=none 开始
仅监控。收集两到四周的汇总报告,它们会暴露您忘记的发件方。
逐步收紧
一旦报告显示只有合法来源通过,就转到
p=quarantine,可以先配合pct=25,等到干净之后再转到p=reject。
TXT 记录不只用于邮件
同一种记录类型还承载着几十种服务的域名所有权验证,Google Search Console、Microsoft 365、Facebook 等都会要求您把一个令牌发布为 TXT 记录,然后再去检查它。
example.com. IN TXT "google-site-verification=rXsLp2..."
example.com. IN TXT "MS=ms12345678"这些记录可以和平共存。一个域名可以拥有许多条 TXT 记录;唯一的规则是,以 v=spf1 开头的必须有且只有一条。
用查询工具查看任意域名,可以同时看到它的所有 TXT 记录,这是发现重复 SPF 记录或从未移除的验证令牌的快捷方法。
需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。
本主题的免费工具
常见问题
相关阅读
一封邮件如何找到您的邮件服务器
发件人
you@gmail.com
MX 查询
谁来收邮件?
邮件服务器
优先级 10 优先
收件箱
已送达
优先级数值最小者优先;数值较大的作为备用
什么是 MX 记录?邮件路由详解
决定邮件最终落在何处的那条记录:优先级数字如何运作、null MX 是什么意思,以及悄悄丢失邮件的那些错误。
反向 DNS 是反过来查询
IP 地址
93.184.216.34
起点
PTR 查询
in-addr.arpa,是对方的区域,不是您的
主机名
答案
反向区域归 IP 地址段的所有者所有,而非域名所有者
什么是反向 DNS?PTR 记录详解
这是一种反向运行的查询:为什么由您的托管服务商来控制它,以及缺少它为何会悄悄把您的邮件送进垃圾箱。
几乎每个 DNS 区域都会遇到的记录
DNS 记录类型详解:完整参考
每一种值得了解的记录类型:它的作用、长什么样,以及人们常犯的错误,全部浓缩在一页参考中。