Shopify 建议在 DNS 中配置 SPF 记录,那么 SPF 是什么意思,有什么作用?本文将简单介绍 SPF 的技术原理,阅读本文大约需要 5 分钟。
SPF (Sender Policy Framework) 发件人策略框架可以防止别人冒充你发出邮件。例如收到一封来自 IP 为 149.72.125.57
发送的邮件,它的发件人显示为 support@learnzh.com
。我们如何确认邮件是否真的来自 support@learnzh.com
?
SPF 的原理很简单,就是在 DNS 中添加一条 TXT 记录,明确设置发出邮件的 IP 地址。例如我们可以添加一条 DNS 记录:
v=spf1 include:shops.shopify.com ~all
这条记录分为以下几个部分:
v=spf1
表示这是一条 SPF 记录,协议版本为 spf1include:shops.shopify.com
表示引入shops.shopify.com
域名下的 SPF 记录~
表示处理邮件的方式为软拒绝(Soft fail),即可以被接受或标记为垃圾邮件all
表示匹配这个记录中包含的所有 IP 地址或域名
我们可以进而查询 shops.shopify.com
域名下的 SPF 记录:
$ dig +short -t txt shops.shopify.com
"v=spf1 ip4:35.203.94.235 ip4:35.203.3.51 ~all"
注意,以上包含两个 IP 地址:35.203.94.235
, 35.203.3.51
,但实际上 Shopify 可能不止从这两个 IP 发出邮件。例如本文开头提及的 IP 地址 149.72.125.57
:
$ dig +noall +answer -x 149.72.125.57
57.125.72.149.in-addr.arpa. 846 IN PTR o32.mailer.shopify.com.
SPF 记录分析
我们再来看几条 SPF 记录加深理解。如下:
v=spf1 include:shops.shopify.com include:_spf.google.com ~all
表示邮件可以来自 Shopify 或者 Gmail — 当我们选择 Gmail 收发邮件时,就需要把 include:_spf.google.com
添加到 SPF 记录中。同样可以分析 Gmail 的 SPF 记录:
$ dig +short -t txt _spf.google.com
"v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"
表示将从 _netblocks.google.com
等三个域名获得 SPF 记录,继续分析可以得到最终发出邮件的 IP 地址:
$ dig +short -t txt _netblocks.google.com
"v=spf1 ip4:35.190.247.0/24 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"
如果我们在 name.com 配置邮件转发,它会自动添加一条 SPF 记录:
v=spf1 a mx ~all
表示邮件可以来自 A 记录或 MX 记录指向的 IP 地址。
SPF 处理结果
如果邮件服务器测试 SPF 发现不满足 DNS 配置,它将显示为 Neutral 并自行处置,例如放到收件箱或标记为垃圾邮件。