技术解析 · 附来源的解答

SPF(发件人策略框架)详解

发件人策略框架(Sender Policy Framework,SPF)是一种基于 DNS 的邮件身份验证机制,允许域名所有者指定哪些邮件服务器有权代表其域名发送邮件。它让收件邮件服务器能够核实发信 IP 地址是否列在该域名的 SPF 记录中,从而防止伪造。

SPF 的工作机制

收到邮件时,收件服务器会查询 SMTP MAIL FROM 地址中域名的 TXT 记录。SPF 记录包含一份获授权的 IP 地址或第三方服务列表。收件方将发起连接的 SMTP 服务器 IP 地址与该列表进行比对。如果 IP 在列表中,检查通过;否则,根据记录所用的限定符,结果为 fail 或 softfail。

对发件人的重要性

SPF 是抵御邮件伪造和网络钓鱼的主要防线。如果没有有效的 SPF 记录,收件服务器就无法核实声称来自您域名的邮件是否真实,这往往导致邮件被标记为垃圾邮件或被直接拒收。实施 SPF 是实现 DMARC 对齐的前提,而 DMARC 为邮件安全策略的报告和执行提供了更完善的框架。

常见运维错误

一个常见错误是超出 10 次 DNS 查询上限。使用过多 include 机制的 SPF 记录会触发 PermError,导致身份验证失败。另一个常见错误是同一域名下存在多条 SPF 记录,这是无效的,会直接判定为失败。发件人应将所有获授权的来源合并到同一条 TXT 记录中,以确保评估结果一致。

SPF 记录示例

一条典型的 SPF 记录如下:v=spf1 ip4:1.2.3.4 include:_spf.google.com ~all。在此示例中,v=spf1 标识版本,ip4:1.2.3.4 授权一台特定服务器,include:_spf.google.com 授权 Google Workspace,~all 表示其他任何来源均为 softfail。您可以使用 https://sendhq.cc/tools 上的 SendHQ 免费工具验证当前记录,确保语法正确。

评估限定符

记录以一个限定符结尾,告诉收件方如何处理未经授权的邮件。减号 -all 表示硬失败,建议拒收该邮件。波浪号 ~all 表示软失败,建议接收邮件但将其标记为可疑。问号 ?all 表示中性结果,不向收件服务器提供任何具体指示。

团队常问的问题

可以有多条 SPF 记录吗?

不可以。一个域名必须恰好只有一条 SPF 记录。多条记录会导致永久性错误,使身份验证失败。

DNS 查询上限是多少?

SPF 记录最多只能进行 10 次递归 DNS 查询。超过此上限会触发 PermError,使记录无效。

SPF 能防止所有伪造吗?

SPF 只验证 Return-Path 地址,而不验证用户看到的 From 头。要完整验证邮件头,还需要 DKIM 和 DMARC。

一手资料