拥有最终~全部规则的SPF记录有什么意义?



在过去的一个小时里,我一直在深入研究SPF,浏览RFC-4408,并复习另一个教程。

我拥有自己的域名,在该域名后面的服务器上安装了后缀。除了我的正常地址,我还希望能够使用GMail发送电子邮件,使用我自己的电子邮件地址作为发件人。

我确实收到了很多反垃圾邮件,垃圾邮件发送者使用我的电子邮件地址作为"发件人"行:(据我所知,SPF用于检查给定的SMTP服务器是否被允许发送具有特定发件人域名的邮件。这将有助于反垃圾邮件。

很明显,如果我想通过gmail发送邮件,我必须允许gmail通过SPF记录以我的名义发送。

在他们的帮助下,我添加了以下TXT记录:

v=spf1 include:_spf.google.com ~all

他们特别建议不要使用-all作为失败规则。

假设~all是一个"软故障",它仍然接受所有消息,那么启用SPF有什么意义

我试图从外部主机发送一些邮件,但它们被接受了,唯一的区别是我的邮件服务器假设没有SPF记录。

通过GMail发送时的日志摘录:

May  8 15:15:58 h2150855 policyd-spf[6184]: None; identity=helo; client-ip=300.300.300.300; helo=mail-lf0-f52.google.com; envelope-from=mygmailaddress@gmail.com; receiver=mypersonaladdress@example.com
May  8 15:15:58 h2150855 policyd-spf[6184]: Pass; identity=mailfrom; client-ip=300.300.300.300; helo=mail-lf0-f52.google.com; envelope-from=mygmailaddress@gmail.com; receiver=mypersonaladdress@example.com

并通过第三方服务器发送:

May  8 15:19:17 h2150855 policyd-spf[6554]: None; identity=helo; client-ip=301.300.300.300; helo=theserver.example.com; envelope-from=exhuma@theserver.example.com; receiver=mypersonaladdress@example.com
May  8 15:19:17 h2150855 policyd-spf[6554]: None; identity=mailfrom; client-ip=301.300.300.300; helo=theserver.example.com; envelope-from=exhuma@theserver.example.com; receiver=mypersonaladdress@example.com

我能看到的唯一区别是,后缀SPF插件将gmail消息显式标记为Pass,而另一个则标记为None

我现在认为添加SPF并没有对我的邮件设置产生任何影响,我正在考虑再次删除它。

它之所以推荐~all而不是-all,是因为它与DMARC的交互方式;使用-all的建议早于DMARC的存在。如果仅使用SPF,-all确实是一个有效(正确)的设置,但-all通常会破坏DMARC,因为它的规则不会被评估。如果你设置了~all默认SPF操作,它会将决定权交给DMARC层,这时你可以说"我们认为SPF软失败是硬失败",然后继续获得DMARC的其他好处。

因此,简而言之,如果您使用DMARC,~all并非毫无意义。(?all总是毫无意义!)

您最好只将~all用于测试,将-all用于生产。甚至RFC也建议:

如果域所有者选择发布SPF记录,建议它们以"-all"结尾,或者重定向到其他这样做的记录,因此可以做出授权的最终决定。

当遇到软故障时,一些网站实际上会拒绝电子邮件,或将其直接发送到垃圾邮件文件夹,但简单地强制执行硬故障将改善网站拒绝试图将您的域伪造为发件人的邮件的更改。

~all在某些DMARC包(如OpenDMARC)中默认情况下被解释为失败,尽管您可以更改标志以将其解释为通过。

类似地,默认情况下,?all在OpenDMARC中被解释为失败。

相反,-all总是被解释为失败,无论您部署了什么DMARC包。

我写了一篇关于这个主题的文章:为什么SPF身份验证失败。

它还涵盖了其他相关概念,包括none、neutral、temperor、pererror等。

最新更新