SPF 技术原理简述

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 记录,协议版本为 spf1
  • include: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 并自行处置,例如放到收件箱或标记为垃圾邮件。

京ICP备12052177号-1