SPF背景
Internet中发送邮件所使用的简单邮件传输协议(SMTP)本身存在一个安全问题,即发起 SMTP 连接的一方可以任意设置自己的地址信息。垃圾邮件发送者们常常利用这一点,伪造邮件发送方的地址,使得邮件接收方无法判定邮件中发送者地址的真实性。
但是SMTP协议在Internet中已经被广泛使用,对该协议做重大的改动或者彻底替换是不可行的,因此一些用于辅助 SMTP 进行源地址认证的策略被相继提出。其中发送者策略框架(Sender Policy Framework,下称SPF)以其简单、灵活、可扩展的特性得到了广泛应用。
SPF介绍
SPF 利用 DNS 的传输机制,通过在 DNS 信息中增加 SPF 记录,来帮助邮件接收者识别邮件发送方域名的真伪。SPF 的工作过程包括两个部分:
1) DNS 中发布 SPF 记录;
一个域名的管理者(AMMDs,ADministrative Management Domains)在所管辖的 DNS 中发布 SPF 记录,用于指明本域中发出邮件的地址信息,即邮件地址中由本域名结尾的邮件应该所处的 IP 地址范围
2) 邮件接收方做 SPF 记录的识别。
邮件接收方通过 SPF 记录来识别邮件地址的真实性,所有 From 地址以某域名结尾但交互对方 IP 地址并不是处在 SPF 所指范围内的邮件均可以认为是伪造的。
邮件服务器在接收邮件过程中,进行 DNS 中的 SPF 记录查询,并判断当前交互的对方 IP 地址是否满足 SPF 记录的要求,如果不满足可以在邮件内容到达前就拒绝接收。
SPF设置
在 DNS 中发布 SPF 记录是有效应用 SPF 的前提条件。SPF 利用 DNS 记录中的 TXT 记录来承载信息。如果有一条 DNS 的 TXT 记录以“v=spf1”开头,则表明这是一条 SPF 记录,其版本号为 1。之后以空格作为间隔分别列出对应域名的 IP 地址范围。
以下三个例子为例:
常规SPF设置
v=spf1 ip4:192.168.0.1 ip4:xxx.xxx.xx.xx –all
coremail企业邮箱SPF解析值如下
v=spf1 include: spf.icoremail.net –all
自建客户使用coremail的中继服务设置如下
v=spf1 ip4:192.168.0.1 include: spf.icoremail.net –all
SPF指令详解
标记
说明和允许的值
v
SPF 版本。此标记是必填标记,且必须是记录中的第一个标记。此标记必须为:v=spf1
ip4
以 IPv4 地址或地址范围的形式授权邮件服务器。该值必须为标准格式的 IPv4 地址或地址范围,例如:ip4:192.168.0.1或ip4:192.0.2.0/24
ip6
以 IPv6 地址或地址范围的形式授权邮件服务器。该值必须为标准格式的 IPv6 地址或地址范围,例如:ip6:3FFE:0000:0000:0001:0200:F8FF:FE75:50DF或ip6:2001:db8:1234::/48
a
以域名的形式授权邮件服务器,例如:a:testmail.com
mx
以网域 MX 记录的形式授权一个或多个邮件服务器,例如:mx:mail.testmail.com如果您的 SPF 记录中不存在该机制,则默认值为使用 SPF 记录的网域的 MX 记录。
include
根据网域授权第三方电子邮件发件人,例如:include:servers.mail.net
all
指定所有的传入邮件与该机制匹配。我们建议您始终在 SPF 记录中包括该机制。该机制必须为 SPF 记录中的最后一个机制。SPF 记录中任何排在 all 机制之后的机制将被忽略。我应该用 ~all 还是 -all?如果 SPF 记录包含 ~all(软拒绝符),则邮件接收服务器通常会接受未纳入 SPF 记录的发件人发送的邮件,但会将这些邮件标记为可疑邮件。如果 SPF 记录包含 -all(失败限定符),则邮件接收服务器可能会拒绝未纳入 SPF 记录的发件人发送的邮件。
TIPS:
使用发件人策略框架 (SPF) 可以防范他人仿冒您的网域,同时也防止收信系统将您的外发邮件标记为垃圾邮件甚至拒收您的邮件。
近期许多用户反馈投递至国外的邮件被退信,其中反馈最多的则是投递给gmail邮件系统退信。原因是从2022年11月起,gmail限制向 Google Gmail 帐户发送电子邮件的新发件人必须设置 SPF 或 DKIM。所以许多域名管理员无设置SPF记录或错误设置SPF记录导致域下用户投递邮件被拒。