什么是 SPF 记录?如何配置它们?

什么是 SPF 记录?如何配置它们?

这是一个典型问题关于设置SPF 记录

我的办公室里有许多计算机,它们共享一个外部 IP(我不确定该地址是静态的还是动态的)。每台计算机都使用 Outlook 通过 IMAP 连接到我们的邮件服务器。这些计算机发送和接收电子邮件,一些用户也通过手机发送和接收电子邮件。

我在用http://wizard.easyspf.com/生成 SPF 记录,但我不确定向导中的某些字段,具体来说:

  1. 输入可以为此域发送或中继邮件的任何其他域
  2. 输入用于发送或中继此域的邮件的网络块的 CIDR 格式的任意 IP 地址
  3. 输入可以为该域发送或中继邮件的任何其他主机
  4. 具有 SPF 意识的 MTA 应该如何严格地对待这个问题?

我对前几个问题相当确定...希望我已经提供了足够的信息。

答案1

SPF 记录详细说明了哪些服务器被允许发送您的域名的邮件。

问题 1-3 真正概括了 SPF 的要点:您应该列出所有被授权从您的域发送邮件的服务器的地址。
如果您目前没有详尽的列表,设置 SPF 记录通常不是一个好主意。此外,一个域只能有一个 SPF 记录,因此您需要将所有信息合并到一条记录中。

个别问题实际上只是帮助您分解列表。

  1. 要求您提供其他其邮件服务器可能会转发您的邮件;如果您在 mail-relay.example.org 有辅助 MX 服务器,并且它是域的主邮件服务器(MX 记录)example.org,则应输入mx:example.org。您的 SPF 记录在几乎所有情况下都应包含您自己域的 MX 记录(mx)。
  2. 询问您的 IP 网络块。如果您在 1.2.3.0/28 有共置服务器,并且您的办公室地址空间是 6.7.8.0/22,请输入ip4:1.2.3.0/28 ip4:6.7.8.0/22。IPv6 空间应添加为例如ip6:2a01:9900:0:4::/64
  3. 如果(例如)您在别人的办公室里还有一台机器被允许从您的域发送邮件,也请输入该机器,例如a:mail.remote.example.com

您的移动电话用户有问题。如果他们通过使用 SMTP AUTH 等连接到您的邮件服务器并通过该服务器发送电子邮件,那么您已经通过在 (2) 中列出邮件服务器的地址来处理他们。如果他们只是通过连接到 3G/HSDPA 提供商提供的任何邮件服务器来发送电子邮件,那么在您重新设计电子邮件基础架构之前,您无法有意义地执行 SPF,以便您控制每个进入互联网的声称是来自你的电子邮件的点。

问题 4 略有不同,询问收件人应该如何处理声称来自您的域的电子邮件没有来自上面列出的系统之一。有几种合法的响应,但唯一有趣的是~all(软失败)和-all(硬失败)。 (无答案)和(qv)?all一样没用,而且令人厌恶。~all+all

~all是简单的选择;它告诉人们,您列出了一批有权从您那里发送邮件的系统,但您不承诺该列表是详尽无遗的,因此来自您的域的来自其他系统的邮件可能仍然是合法的。我敦促你不是这样做不仅会使 SPF 完全失去意义,而且 SF 上的一些邮件管理员还会故意将他们的 SPF 接收器配置~all为垃圾邮件发送者的标志。 如果你不打算这样做-all,就根本不要使用 SPF

-all是一个有用的选择;它告诉人们,您列出了允许从您发送电子邮件的系统,并且没有其他系统被授权这样做,因此他们可以拒绝来自 SPF 记录中未列出的系统的电子邮件。这就是 SPF 的意义所在,但是在激活它之前,你必须确保已经列出了所有有权发送或中继你邮件的主机

谷歌是已知建议

发布使用 -all 而不是 ~all 的 SPF 记录可能会导致传送问题。

嗯,是的,有可能;这就是 SPF 的全部意义。我们无法确切知道谷歌为什么给出这个建议,但我强烈怀疑这是为了防止那些不知道电子邮件来源的系统管理员给自己带来传送问题。 如果你不知道所有电子邮件来自哪里,请不要使用 SPF。如果您要使用 SPF,请列出它的所有来源地,然后告诉全世界您对该列表很有信心,使用-all

请注意,以上这些都不对收件人的服务器具有约束力;您公布 SPF 记录的事实绝不会迫使其他人遵守它。任何给定邮件服务器的管理员都可以自行决定接受或拒绝哪些电子邮件。我认为 SPF 的作用是允许您对声称来自您的域但实际上并非如此的电子邮件不承担任何进一步的责任。任何邮件管理员向您抱怨您的域正在向他们发送垃圾邮件当他们没有检查你宣传的 SPF 记录时,该记录会告诉他们应该拒绝该电子邮件可以公平地将耳朵里的跳蚤送走。


include由于这个答案已被规范化,我最好就和说几句话redirect。后者更简单;如果你的 SPF 记录,比如说example.com,说redirect=example.org,那么example.org的 SPF 记录取代你自己。example.org也替换为您的域名那些查找(例如,如果example.org的记录包含mx机制,MX则应在 上进行查找example.org,而不是在您自己的域上进行)。

include被广泛误解,并且正如该标准的作者指出的那样“include” 这个名字选得不好“。如果您的 SPF 记录includeexample.org的记录,那么example.org收件人应该检查 的记录以查看如果它给出任何理由(包括+all)接受你的电子邮件。如果是,您的邮件应该会通过。如果没有,收件人应该继续处理您的 SPF 记录,直到到达您的all机制。因此,-all或者确实任何在记录中,allexcept的其他使用对处理结果没有影响。+allinclude

有关 SPF 记录的更多信息http://www.openspf.org是一个极好的资源。


请不要误解,但如果你弄错了 SPF 记录,那么互联网上很大一部分人将无法收到你发送的电子邮件,直到你修复它为止。你的问题表明你可能没有完全事实与您正在做的事情相关,如果是这种情况,那么您可能需要考虑在采取某些措施阻止向很多人发送电子邮件之前寻求专业帮助。

编辑:谢谢您的善意言辞,我非常感激。

SPF 主要是一种预防技术乔布斯,但有些人似乎已经开始使用它来尝试检测垃圾邮件。其中一些人确实可能会对您没有 SPF 记录或记录过于宽泛(例如a:3.4.5.6/2 a:77.5.6.7/2 a:133.56.67.78/2 a:203.54.32.1/2,这相当狡猾地等同于+all)赋予负面价值,但这取决于他们,您对此无能为力。

我个人认为 SPF 是一件好事,如果你当前的邮件结构允许,你应该宣传一条记录,但很难给出一个权威的答案,适用于整个互联网,关于人们如何使用为特定目的设计的 DNS 记录,当他们决定将其用于其他目的时。我唯一可以肯定的是,如果你宣传具有 策略的 SPF 记录-all,并且您弄错了,很多人将永远看不到您的邮件。

编辑2:根据评论删除,并保持答案为最新。

答案2

对于您的设置来说,重要的是最终将电子邮件发送到互联网的服务器的配置。您说您通过 SMTP 发送电子邮件。因此,就 IP 地址而言,重要的是您的 SMTP 服务器的配置(问题 2)

如果您使用第三方(例如 gmail)发送电子邮件,则必须包含其 spf 记录,如下所示:include:_spf.google.com(ajax 向导似乎不知道这一点)。

对于“严格程度”,如果您不确定,请保留“软失败”( ~all ),但一旦配置干净,则“拒绝”( -all )就是要走的路。

相关内容