术语表

SPF / DKIM / DMARC 是什么:保护自己域名免遭冒名邮件的三项 DNS 设置

SPF、DKIM、DMARC 是三项 DNS 设置,让收件方能够验证以你的域名发出的邮件是否“真实”。没有它们,冒用你名义的钓鱼邮件就无法被拦截。本文用图解说明三者各自的作用,并给出安全的配置步骤(DMARC 从 p=none 开始),通俗易懂。

发布于 2026-06-08 更新于 2026-10-06 3 分钟阅读
本页目录

钓鱼邮件可能会在你不知情的情况下以你域名的名义发出。能阻止这件事的,正是 SPF / DKIM / DMARC。本文通俗讲解三者的作用与安全的配置步骤。

三者的作用

设置作用(一句话)
SPF用 DNS 声明“允许发送本域名邮件的服务器就是这些”
DKIM给邮件加上电子签名,证明“传输途中未被篡改、来自正规发件源”
DMARC声明 SPF/DKIM 失败时如何处理的策略,并接收报告(把三者联系在一起的设置)

三者都是 DNS 中的文本(TXT)记录。以 example.com 为例,大致如下(值为示例)。

设置写在哪里示例值
SPFexample.comv=spf1 include:_spf.mail-service.example ~all
DKIMselector._domainkey.example.comv=DKIM1; k=rsa; p=(由发信服务签发的公钥)
DMARC_dmarc.example.comv=DMARC1; p=none; rua=mailto:dmarc@example.com

SPF 的 include: 请使用邮件发送服务指定的值。DKIM 的公钥同样由发信服务签发,不需要自己生成。

是如何被验证的(原理)

收件方(Gmail 等)会对收到的邮件检查 SPF 与 DKIM,再把结果对照 DMARC 的策略,决定“放行/隔离/拒绝”。

收到的邮件(以你的域名名义)
↓ 收件方验证
SPF:发件服务器是否已许可?
DKIM:签名是否正确?有无篡改?
↓ 将结果对照 DMARC 策略
DMARC:若失败则 放行 / 隔离(quarantine) / 拒绝(reject)
收件方确认 SPF/DKIM,并按 DMARC 策略做最终判断。三者缺一不可。

也就是说,仅有 SPF 和 DKIM 时往往是“做了判定却什么都不做”,只有配上 DMARC 的策略,“拦截冒充”的效力才会真正显现。

容易被忽视的一点:域名对齐

DMARC 判定的关键在于域名是否一致。只有当收件人在邮件软件中看到的发件人(From 头)的域名,与经 SPF 或 DKIM 验证的域名一致时,DMARC 才会通过。

SPF 检查的不是显示出来的发件人,而是投递时在幕后使用的信封发件人(envelope sender)的域名。因此,攻击者可以用自己的域名通过 SPF,同时只在 From 栏里写上你的域名。如果 SPF 通过但与 From 域名不一致,DKIM 也没有提供一致的域名,DMARC 就会判定该邮件失败。正是这种一致性检查,让 DMARC 能够阻止冒用 From 地址的冒充。

安全的配置步骤

1

SPF 只设一条且正确

把用于发信的正规服务器(自有、邮件投递服务等)无遗漏地全部许可。SPF 记录在一个域名上汇总为一条(多条容易失效)。

2

启用 DKIM 签名

在所使用的邮件发送平台上启用 DKIM,并把公钥登记到 DNS,使正规邮件带上签名。

3

DMARC 从 p=none 开始

不要一上来就拒绝。先用 p=none(仅监控)+接收报告,确认正规邮件是否会被误拦。

4

逐步加严

通过报告补齐正规投递的遗漏后,再从 p=quarantine → p=reject。最终实现“冒充一律拒绝”。

第 1 步中的「只设一条」来自规范。RFC 7208 规定,一个域名如果有多条 SPF 记录,结果就是 permerror(永久错误)。同一规范还把 include 等引起的 DNS 查询在整个评估过程中限制为 10 次,超出同样是 permerror。添加邮件服务时,请追加到现有的那一条记录中,而不是再新增一条。

常见错误

错误会发生什么解决方法
有两条 SPF 记录SPF 返回 permerror合并为一条
嵌套的 include 太多DNS 查询超过 10 次 → permerror删除不再使用的服务的 include
某个发信服务未启用 DKIM经该服务发出的邮件 DMARC 失败在该服务中启用 DKIM 并发布到 DNS
DMARC 一直停在 p=none冒充邮件继续被投递查看报告并提升到 reject
不发邮件的域名什么都没配置无法阻止冒用这个闲置域名的冒充发布 v=spf1 -all 和 DMARC p=reject

如何检查自己的域名

  1. 在 SPF / DKIM / DMARC 检查工具中输入你的域名,查看三条记录是否存在、有什么问题
  2. 如果想在命令行中直接查看,运行 dig +short TXT example.com(SPF)和 dig +short TXT _dmarc.example.com(DMARC)
  3. 从你的域名向 Gmail 地址发送一封邮件,在 Gmail 的「显示原始邮件」中确认 SPF、DKIM、DMARC 都是 PASS
  4. DMARC 报告(rua)开始送达后,每周检查一次是否有不认识的发件方

对于已验证所有权的网站,网站安全诊断会把这些与 Web 端的设置一起检查。

真实案例:来自「自己地址」的冒充邮件

「收到了一封从自己的地址发给自己的威胁邮件」,是日本 IPA(信息处理推进机构)等机构提醒过的典型情况。这类邮件大多并不是账号被盗,只是发件人栏被改写了。由于发件人栏可以随意填写,对于尚未把 DMARC 提升到 reject 的域名,这类邮件可能会进入收件箱。如何判断以及如何应对,见以下文章:

规范更新(2026 年 5 月)

DMARC 于 2026 年 5 月修订为 RFC 9989,取代了之前的 RFC 7489。p=none、p=quarantine、p=reject 三种策略没有变化。变化之处在于:删除了 pct 标签(应用比例),改用表示测试模式的 t 标签;并新增了 np 标签,用于指定对不存在的子域名的策略。现有记录不会马上失效,但新写记录时不要再使用 pct。

本站视角:你守护的也是“你的用户”

SPF/DKIM/DMARC 不只是为了让自己的邮件能送达,更是一套保护“你的用户”免遭冒用你域名的钓鱼的机制。钓鱼说到底就是窃取认证凭据或密钥的手段。

现实中,许多域名只停留在 SPF/DKIM,并未把 DMARC 提升到强制(reject)。不要停在 p=none,要查看报告、逐步把策略一路加严到 reject,才能真正见效。

出处(一手资料)

  • IETF RFC 7208, "Sender Policy Framework (SPF)" — datatracker.ietf.org(每个域名一条记录;DNS 查询最多 10 次)
  • IETF RFC 6376, "DomainKeys Identified Mail (DKIM) Signatures" — datatracker.ietf.org
  • IETF RFC 9989, "Domain-Based Message Authentication, Reporting, and Conformance (DMARC)" (May 2026; obsoletes RFC 7489) — datatracker.ietf.org
  • Google, "Email sender guidelines" — support.google.com(2024 年 2 月 1 日起的要求;每天发送 5,000 封以上发件方的要求)

接下来阅读

分类编号

CWE 对导致漏洞的弱点类型进行分类,MITRE ATT&CK 对攻击者的技术进行分类。两者均由 MITRE 维护,广泛用于标注漏洞信息和检测规则。

© 2026 The MITRE Corporation. This work is reproduced and distributed with the permission of The MITRE Corporation. MITRE ATT&CK and ATT&CK are registered trademarks of The MITRE Corporation. The MITRE Corporation (MITRE) hereby grants you a non-exclusive, royalty-free license to use ATT&CK® for research, development, and commercial purposes. Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ATT&CK Terms of Use

FAQ

QSPF / DKIM / DMARC 是为了什么?
A

为了让收件方(Gmail 等)能够验证以你的域名发出的邮件是否“真实”。没有它们,第三方就能冒用你名义发送冒充邮件(钓鱼),且无法被拦截,域名的信誉也会受损。

Q三者有什么区别?
A

SPF 声明“允许发送本域名邮件的服务器”,DKIM 是“证明未被篡改的电子签名”,DMARC 则是“当 SPF/DKIM 失败时如何处理的策略+接收报告”。DMARC 综合 SPF/DKIM 的结果,使其能够被强制执行。

Q配置时要注意什么?
A

先把正规投递(邮件投递服务等)无遗漏地全部许可后,再加严。尤其是 DMARC,如果一上来就设为拒绝(p=reject),可能连正规邮件也被拦截,因此应先用 p=none(仅监控)查看报告,再按 p=quarantine→p=reject 逐步提升。

QDMARC 的 p=none 是什么意思?
A

它要求收件方对认证失败的邮件不做特殊处理。它不能阻止冒充,但你会收到报告(rua),从中能看到谁在以你的域名名义发信。确认所有正规发件方之后,再提升到 p=quarantine(放入垃圾邮件箱),然后是 p=reject(拒收)。

QSPF 中的「-all」和「~all」有什么区别?
A

两者都写在 SPF 记录末尾,表示如何对待未列出的服务器发来的邮件。-all 表示「未被授权」(fail),~all 表示「可能未被授权」(softfail)。配置了 DMARC 时,最终如何处理由 DMARC 策略决定,所以在确认所有正规发件方之前,先用 ~all 也没有问题。

QSPF 的「DNS 查询 10 次上限」是什么?
A

SPF 规范(RFC 7208)把 include、a、mx、ptr、exists 以及 redirect 修饰符引起的 DNS 查询,在整个评估过程中限制为 10 次。超出后结果为 permerror(永久错误),SPF 视为失败。用 include 列出多个邮件服务时很容易触及上限,请删除已不再使用的服务的 include。

QGmail 要求配置 SPF、DKIM 和 DMARC 吗?
A

自 2024 年 2 月 1 日起,Google 要求所有向个人 Gmail 账号发信的发件方配置 SPF 或 DKIM。每天发送 5,000 封以上的发件方,必须同时配置 SPF 和 DKIM、DMARC(p=none 策略也可以),并使 From 域名与 SPF 或 DKIM 的域名一致(对齐)。