所有文章

SPF、DKIM 和 DMARC 详解:谁能以你的名义发邮件

用你的地址发出的假发票是真实的风险。SPF、DKIM 和 DMARC 各自的作用,如何检查你的域名,以及如何安全地从 p=none 过渡到 quarantine。

Radek,ENSOMEDIA发布于 4 分钟阅读In EnglishPo polskuAuf DeutschEn españolEn françaisبالعربية

一位客户收到一封来自你公司邮箱地址的邮件。标志是对的,签名是对的,还附了一张发票。唯一不同的是银行账号。客户付了款,两周后你才发现,因为他问你,已经付过的款项为什么又收到了你的催款提醒。

在“发件人”一栏填上别人的地址,技术上毫无难度。电子邮件诞生的年代,没人想到有人会冒充别人。后来才加入了名字很短的 SPF、DKIM 和 DMARC,让邮件服务器能够核实一封邮件是否真的来自你。但只有有人在你的域名上把它们配置好,它们才起作用。

用大白话讲这三道防线

三者都是你域名 DNS 里的记录,也就是设置网站指向哪台服务器的同一个地方。不需要在任何人的电脑上安装任何东西。

SPF 是一份来宾名单。它声明:来自我这个域名的邮件,只能由这些服务器发送,其他的不行。名单里应该包括你的企业邮箱、开票软件、群发邮件工具,以及任何用你的地址发信的东西。一条记录大致像这样:v=spf1 include:_spf.google.com ~all。

DKIM 是一枚封印。你的邮件服务器给每封外发邮件签名,用来验证签名的密钥放在 DNS 里。收件方由此可以确认邮件来自你,并且途中没有被人改动。

DMARC 是给收件方的指令。它规定:对于声称来自你、却没通过检查的邮件,该怎么处理。它还检查 SPF 本身不检查的一件事:通过 SPF 或 DKIM 验证的域名,与客户在“发件人”栏里实际看到的地址是否一致。没有这一条,骗子可以用自己的域名通过 SPF,屏幕上却显示你的域名。DMARC 还可以要求收件服务器给你发送报告,让你知道有谁在以你的名义发邮件。这条记录放在 _dmarc.yourdomain.com。

还有第二个理由需要处理这件事。自 2024 年起 Gmail 和 Yahoo,自 2025 年起微软(针对 Outlook.com 邮箱),要求批量发件人具备有效的 SPF、DKIM 和至少基础的 DMARC 记录。所以记录缺失,也会影响你正常邮件的送达。

如何检查你的域名有没有这些记录

有两个简单的办法,都不需要访问你的域名设置。

第一个是免费的 DNS 查询工具,例如我们的 SPF、DKIM 和 DMARC 检查(英文)。输入你的域名,不带 www,也不带 https://。对于 DMARC,你会看到三种结果之一:

  • 没有记录,意味着没有任何保护,
  • 记录为 p=none,只监控,不拦截任何邮件,
  • 记录为 p=quarantine 或 p=reject,伪造的邮件会进垃圾箱或被拒收。

对于 SPF,主要看是否恰好只有一条记录。同一个域名上有两条独立的 SPF 记录是错误,可能导致收件服务器认为你的 SPF 无效。

第二个办法是用 Gmail。用你的企业邮箱给任意一个 Gmail 账号发一封邮件,打开它,点击回复按钮旁边的三个点,选择“显示原始邮件”。顶部会分别显示 SPF、DKIM 和 DMARC 三行,每行写着 PASS 或 FAIL。三项都通过是个好迹象。再用财务软件发出的发票,以及网站联系表单发出的邮件各测一次,因为它们走的是不同的路径。

从 p=none 到 quarantine,又不影响自己的邮件

最常见的错误是直接跳到 p=reject。结果发现,财务软件的发票、网店通知或群发邮件,一直都没有配置好 SPF 或 DKIM。从那一刻起,它们进了垃圾箱,或者根本送不到,而要查出原因得花很长时间。

更稳妥的顺序是这样:

  1. 把 DMARC 设为 p=none,并填一个接收报告的地址,例如 v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com。
  2. 收集几周的报告。它们是 XML 文件,最简单的办法是交给某个免费的 DMARC 报告阅读工具,转成可读的表格。
  3. 列出报告里显示的、以你的域名发邮件的所有服务。对于确实属于你的每一个,把 SPF 和 DKIM 配置好。
  4. 当报告里只剩下你不认识的来源时,改为 p=quarantine。伪造的邮件会开始进入垃圾箱。
  5. 再平静地观察几周后,可以改为 p=reject,收件服务器会直接拒收伪造邮件。

如果你拥有从不发邮件的域名,例如旧公司名或为保险起见买下的域名,直接给它们设置 v=spf1 -all 和 p=reject 的 DMARC 记录。你没有任何损失,骗子也无法用它们来代替你的主域名。

这些记录做不到什么

DMARC 保护的是你的确切域名。有人注册了相似的域名,例如 your-domain.com 或 yourdomain.co,并为它配置好完全有效的记录,DMARC 拦不住。如果有人接管了一个真实员工的邮箱,它也帮不上忙,因为假邮件是从你自己的服务器发出的,能通过所有检查。

所以除了 DNS 记录,还有两件简单的事有帮助。第一,公司每个邮箱都开启双重登录验证。第二,让客户知道一条规则:银行账号永远不会通过邮件变更,任何新账号的通知都要通过另一个渠道确认。你可以把这句话直接写在发票上或邮件签名里。

该问管理你域名的人什么

你的域名通常由主机商、你购买域名的公司或你的开发者管理。把下面这些问题发给他们:

  1. 哪些服务在以我们的域名发邮件,它们是否都在 SPF 记录里?
  2. 我们是不是恰好只有一条 SPF 记录,并且没有超过 10 次 DNS 查询的上限?
  3. 我们的企业邮箱、开票软件和群发邮件工具是否都开启了 DKIM?在 Microsoft 365 和 Google Workspace 中,通常需要手动开启。
  4. 我们有没有 DMARC,处于哪一级,谁在看报告?
  5. 什么时候可以安全地改为 p=quarantine?

好的回答不需要很长。关键是它指出了一个会不时查看报告的人,并给出进入下一级保护的日期。