SPF 记录中间的“~all”在解析时是否表示记录结束?

whe*_*ska 9 domain-name-system email spam spf g-suite

我公司的SPF记录格式如下:

“v=spf1 include:_spf.google.com ~all a mx ip4:XX0.0/23 include:spf.example.com ?all”

所以我们的 SPF 记录中间有一个“~all”。在openspf.com 网站上,他们这样说关于“全部”机制:

这种机制总是匹配的。它通常位于 SPF 记录的末尾。

因此,他们不会说“所有”必须放在 SPF 记录的末尾,而是说它通常放在末尾。

在我们公司,最近我们看到从我们的 SPF 记录中列出的服务器发送的电子邮件中出现一些软故障,但我们的 SPF 记录通过了我迄今为止找到的所有验证工具。

我想知道的是,在包含 Google Apps (_spf.google.com) 之后的这个“~all”是否会导致解析停止并且无法识别 SPF 记录的其余部分?通过与软失败是否取决于解析它的人以及他们如何处理 SPF 记录的具体实现?是否有任何理由拥有不在 SPF 记录末尾的“全部”机制?

是的,我知道我们可以更改我们的 SPF 记录。这个问题更多地是为了澄清这一切是如何运作的,而不一定是解决我们的具体情况。

Mic*_*ton 11

RFC 7208 § 5.1对此进行了明确说明:all出现之后,必须忽略它之后的所有内容。

毕竟,机制永远不会被测试。在“所有”之后列出的机制必须被忽略。当记录中有“全部”机制时,无论术语的相对顺序如何,都必须忽略任何“重定向”修饰符(第 6.1 节)。

它过时的RFC RFC 4408 也说了很多相同的话。较新版本的 RFC 只是阐明了意图。

毕竟,机制永远不会被测试。当存在“全部”机制时,任何“重定向”修饰符(第 6.1 节)都不起作用。

因此,符合 SPF 的实现将完全忽略第一个~all. 然而,这并不意味着每个实现都符合规范。特别是,这可能被认为值得澄清,因为一个或多个实现不符合。

完全不清楚为什么在线验证工具不会捕获这种错误配置,但是如果您打算在第一次all使用之后进行任何操作,您应该更正记录,因为正确的实现将忽略它。


The*_*ner 7

“v=spf1 include:_spf.google.com ~all a mx ip4:XX0.0/23 include:spf.example.com ?all”

按顺序说:

“通过 SPF 记录的电子邮件_spf.google.com对我们的域有效”

“我们域的所有其他发件人的软故障”

“来自我们 A 记录的电子邮件对我们的域有效”

“来自我们 MX 记录的电子邮件对我们的域有效”

“来自 IP 范围的电子邮件x.x.0.0/23对我们的域有效”

“通过 SPF 记录的电子邮件spf.example.com对我们的域有效”

“来自我们域的所有其他发件人的电子邮件无法以一种或另一种方式进行验证”

根据记录语法:

按顺序评估机制。如果没有机制或修饰符匹配,则默认结果为“中性”。

因此,对于您来说,一旦它遇到“所有其他人的软故障”,那真的很重要……它应该忽略您指定的其余机制。

您的 SPF 记录应尽可能简洁。我非常怀疑您是否拥有一个完整的 /23 网络,应该为您的域发送电子邮件,也不应该为您的所有 A 记录发送电子邮件。也许是……但很可能不是。

一个漂亮干净的 SPF 记录应该类似于:

“v=spf1 包括:_spf.google.com 包括:spf.example.com mx -all”

这基本上可以说 _spf.google.com、spf.example.com 和您的 MX 记录是您的域的唯一有效发件人......其他所有内容都应视为无效。