具有最终 ~all 规则的 SPF 记录有什么意义?

3
在过去的一个小时里,我一直在研究SPF,浏览RFC-4408,并查看另一个教程
我拥有自己的域名,在该域名后面的服务器上安装了postfix。除了我的正常地址外,我还希望能够使用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实际上并没有对我的邮件设置产生任何影响,正在考虑再次删除它。
3个回答

4
推荐使用~all而不是-all的原因是与DMARC的交互方式有关;使用-all的建议早于DMARC的存在。-all确实是有效的(和正确的)设置如果你仅使用SPF,但-all通常会破坏DMARC,因为它的规则不会被评估。如果您设置了一个~all默认SPF操作,它会将决策移交给DMARC层,在这一点上,您可以说“我们认为SPF软拒绝是硬拒绝”,然后继续获得DMARC的其他好处。
所以,简而言之,~all使用DMARC时不是无意义的。(?all总是毫无意义!)

0

~all 在一些 DMARC 软件包(如 OpenDMARC)中默认被解释为失败,尽管您可以更改标志以使其被解释为通过。

同样,?all 在 OpenDMARC 中默认被解释为失败。

相比之下,-all 总是被解释为失败,无论您部署的 DMARC 软件包是什么。

我写了一篇文章涵盖了这个主题:为什么 SPF 认证失败

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


0

在编程方面,最好的选择是仅在测试中使用 ~all,在生产中使用 -all。即使RFC也建议如此:

如果域所有者选择发布SPF记录,则建议以“-all”结尾,或重定向到其他记录,以便可以做出授权的明确确定。

有些网站实际上会拒绝电子邮件,或将其定向到垃圾邮件文件夹,当遇到软失败时,但是简单地强制执行硬失败将提高网站拒绝试图伪造您的域名作为发件人的消息的机会。


拒绝 softfail 是直接违反 RFC 的建议,而 IME 实际上非常罕见。RFC 的建议早于 DMARC 的存在,而 -all 的存在破坏了 DMARC,因此如果您也在使用 DMARC,则应使用 ~all,请参阅我的答案。 - Synchro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接