SPF 记录是什么,如何配置
SPF 是防邮件伪造的 DNS 认证机制,通过 TXT 记录声明哪些服务器有权以你的域名发信。本文讲清 SPF 语法机制、配置步骤与验证方法。
直接回答:SPF(Sender Policy Framework)是一条发布在域名 DNS 中的 TXT 记录,列出被授权代表该域名发送邮件的服务器。 配置方法是在 DNS 服务商处添加形如 v=spf1 include:_spf.example.com ~all 的 TXT 记录。收信端据此验证 SMTP MAIL FROM(信封发件人)或 HELO/EHLO 身份的来源 IP,不直接验证读者看到的 From 头,最终收拒由接收方策略决定。
SPF 记录语法速览
v=spf1 ip4:203.0.113.10 include:_spf.google.com ~all
| 片段 | 含义 |
|---|---|
v=spf1 |
版本声明,必须是开头 |
ip4:203.0.113.10 |
授权该 IPv4 地址(可用 /24 等网段) |
ip6: |
授权 IPv6 地址 |
a |
按连接地址族匹配域名 A/AAAA 结果 |
mx |
授权域名 MX 记录指向的服务器 |
include:域名 |
引入另一域名的 SPF 策略(第三方邮件服务商常用) |
~all |
返回 Softfail,接收方按本地策略处理 |
-all |
返回 Fail,是否拒收取决于接收方策略 |
?all |
返回 Neutral,不作来源授权断言(与 None 不同结果) |
一条 SPF 记录里可组合多个机制,空格分隔。
配置步骤
1. 盘点发信来源
列出所有以你的域名发信的服务:自有邮件服务器 IP、企业邮箱(Google Workspace、Microsoft 365、腾讯企业邮等)、营销邮件平台、应用服务器(工单/告警通知)。漏掉任何一个都会导致其邮件被判伪造。
2. 检查现有记录
dig TXT example.com | grep spf
一个域名只能有一条 SPF TXT 记录;已有记录则修改合并,不能新增第二条。
3. 编写并添加 TXT 记录
下面仅为语法示例。include 值必须来自实际邮件服务商当前文档,不能把示例服务商加入不使用其服务的域名。
到 DNS 服务商控制台添加:
- 类型:TXT
- 主机记录:@(根域名)或对应子域名
- 值:
v=spf1 mx include:spf.mxhichina.com ~all(按你的实际来源写)
4. 验证
dig TXT example.com
或用在线 SPF 校验工具检查语法、DNS 查询次数与覆盖范围。发测试邮件到 Gmail,查看接收方生成的 Authentication-Results/Received-SPF;一次 Pass 只验证此次来源与身份,不代表所有路径已覆盖。
关键限制:10 次 DNS 查询上限
SPF 规范要求一次校验中 include、a、mx、redirect 等机制触发的 需要 DNS 查询的机制/修饰符求值项累计不得超过 10 个,这不是简单统计实际 UDP/TCP DNS 包数;超限返回 PermError。嵌套 include 也要计入。来源多时要:
- 优先用
ip4:/ip6:直接列地址(不占查询次数) - 合并同一服务商的 include
- 谨慎评估扁平化:手工固定服务商动态 IP 会过期,应优先采用服务商支持的方案并维护变更
与其他邮件认证机制的关系
SPF 只解决"来源服务器是否合法",完整的反伪造体系还有:
- DKIM:对邮件内容签名,证明内容未被篡改
- DMARC:在 SPF/DKIM 基础上定义处置策略并回收报告,结合可见 From 域对齐和报告逐步评估 quarantine/reject,不能不盘点转发与合法来源就收紧
三者配齐才能有效保护域名信誉。
常见问题(FAQ)
Q:~all 和 -all 怎么选?
A:刚配置时用 ~all(软拒绝)观察一段时间,确认所有合法发信来源都被覆盖后再收紧到 -all。一开始就 -all 容易误伤自己漏配的服务。
Q:配了 SPF 为什么邮件还是进垃圾箱?
A:SPF 只是因素之一。检查 DKIM 签名、DMARC 策略、发信 IP 信誉、反向解析(PTR 记录)是否齐全;营销类邮件还与内容、投诉率有关。
Q:子域名的邮件需要单独配 SPF 吗?
A:需要。SPF 不继承——mail.example.com 发信就要在 mail.example.com 上配 TXT 记录;不从某子域发信也应显式配置 v=spf1 -all 防止被滥用。
参考资料
本文依据官方资料核对,未进行现场运行测试;代码与配置示例需结合实际版本、权限和环境验证。