组合多个 SPF 记录,如何决定应该使用什么限定符?

Combining multiple SPF records, how to decide what qualifier should be used?

我不确定在尝试合并 SPF 记录时应该使用什么限定符。

我知道 Whosebug 上还有很多其他问题,关于什么组合 SPF 记录是正确的,但没有一个我能找到清楚地解释为什么在建议不同的限定符时应该使用某个限定符通过各种服务。

我当前的记录如下:

v=spf1 +a +mx +ip4:111.222.333.444 include:_spf.google.com ~all include:servers.mcsv.net ?all include:mailgun.org ~all

Google's SPF 记录为:

Mailchimp's SPF 记录为:

Mailgun's SPF 记录为:

我应该如何从 +all-all~all?all 中决定使用什么限定词

下列哪一项是正确的?

  1. v=spf1 +a +mx +ip4:111.222.333.444 include:_spf.google.com include:servers.mcsv.net include:mailgun.org ~all
  2. v=spf1 +a +mx +ip4:111.222.333.444 include:_spf.google.com include:servers.mcsv.net include:mailgun.org ?all
  3. v=spf1 +a +mx +ip4:111.222.333.444 include:_spf.google.com include:servers.mcsv.net include:mailgun.org +all
  4. v=spf1 +a +mx +ip4:111.222.333.444 include:_spf.google.com include:servers.mcsv.net include:mailgun.org -all

MX & A

同样的问题涉及 +a+mx 的使用,我是否也需要包括它们?

+ 怎么样?

我是否需要在 +a+mx+ip4

之前添加 +

切记,我们通过 Mailchimp、MailGun、Google 和服务器发送电子邮件。

您当前的记录没有意义。规则是从左到右评估的,因此您的默认 (all) 机制应该始终在最后。

当您 include 一个外部 SPF 记录时,它包含的任何 all 操作都会被有效地忽略(因为它会被您以后的指令覆盖)。

MailChimp 的记录是愚蠢的(令人惊讶); ?all相当于根本没有SPF记录,但在这种情况下没有区别。

文字 IP 机制最快,因为它们不需要 DNS 查找来检查,因此将它们放在第一位被认为是礼貌的做法。

您不需要 + 在机制前面,因为这是默认限定符。

a机制意味着"allow the IP returned by the A record for this host"。同样,mx 表示 "allow sending from any IP that is also a mail exchanger (mail server) for this domain"。如果这些是真的,请添加它们。我建议将它们放在任何 include 机制之前,因为它们只需要一次 DNS 查找,而且它们很可能已经被接收者缓存了。

你不应该使用 +all;它非常糟糕,因为它为所有来源提供了积极的 pass 结果,这比没有 SPF 记录更糟糕。 ?all 等同于没有 SPF,所以你也不应该使用它。

如果您还使用 DMARC,则应使用 ~all;如果不是,请使用 -all。这样做的原因是 SPF 规则在 DMARC 之前被评估,并且 -all 将导致在 DMARC 有机会做它的事情之前立即终止。然后可以将 DMARC 配置为拒绝任何获得 softfail 的内容,并且它的报告机制可以完成它们应该做的事情。

如果您使用的是 DMARC,我会推荐此记录,如果您不使用 DMARC,我会推荐此记录,但 -all

v=spf1 ip4:111.222.333.444 a mx include:_spf.google.com include:servers.mcsv.net include:mailgun.org ~all

无论您最终得到什么,请在 Scott Kitterman's validator 上查看。