仅靠 DKIM 不能解决垃圾邮件问题吗?为什么我需要SPF?

cor*_*raf 21 security email spam spf dkim

最终编辑:我对 DKIM 的看法似乎完全错误,签名域不必与发件人域相同,因此我的问题的整个前提是有缺陷的。非常感谢保罗指出我的错误!

原问题如下:

我曾尝试阅读 SPF 和 DKIM,但我不明白同时使用两者的意义,至少在打击垃圾邮件的背景下(伪造的发件人地址,这可能导致我的电子邮件服务器/域被列入黑名单)。据我所知,只有 DKIM 才能完成 SPF 应该完成的工作。

到目前为止,我的理解如下:

  1. 发送电子邮件时,发件人可以声明他们想要的任何内容(例如伪造的发件人地址)
  2. DKIM 允许检测伪造的发件人电子邮件地址,因为您可以根据 DNS TXT 记录中的公钥验证 DKIM 签名。
  3. SPF 允许您验证电子邮件是否来自有权为给定发件人地址发送电子邮件的邮件服务器。

我不明白的是:除非 DKIM 私钥以某种方式被泄露,否则仅 DKIM 验证就足以验证电子邮件是从授权的电子邮件服务器发送的,否则电子邮件服务器将无法用于签署电子邮件的私钥。

我在这里看到了一个非常相似的问题的答案:https : //serverfault.com/a/780248/154775,作者在其中声称 DKIM 无法防止重放攻击。我承认这一点,但我发现这是一个非常极端的案例,我认为迄今为止最大的问题是带有虚假发件人地址的垃圾邮件 - DKIM 应该很容易地防止这种情况发生。

与仅 DKIM 相比,是否存在重放攻击之外的场景,其中 SPF 提供额外保护?

编辑:我用粗体标记了我的问题的核心,以澄清我到底想要什么答案。

Esa*_*nen 31

SPF 和 DKIM 完全保护不同的东西:SPF 保护信封发件人,而 DKIM 保护电子邮件标头和正文的完整性和真实性。此外,DKIM 只能验证现有签名,但没有方法判断是否应接受没有签名的消息。因此,除了 SPF 和 DKIM 之外,还需要DMARC

此外,这些方法都不是用于对抗垃圾邮件问题,而是用于对抗电子邮件伪造。请记住,垃圾邮件发送者也可以并且确实设置了它们。但是如果没有 DMARC、DKIM 和 SPF,他们可以自由地将您的域用于他们的目的。

  • `请记住,垃圾邮件发送者也可以并且确实设置了它们 [域]。` ==> 我想强调的是,今天垃圾邮件发送者购买了大量刻录机域并为它们配置了 DMARC。这些都不会影响域名的*信誉*。我可以简单地检查我的垃圾邮件文件夹,发现几乎每封电子邮件都经过 DMARC 身份验证 (2认同)

小智 8

虽然 Esa Jokinen 的回答是正确的,但我觉得语言令人困惑。

简单地说:

  • SPF 检查直接从特定商定的授权邮件服务器或邮件中继到达您的服务器的邮件。
  • DKIM 会检查邮件最初是从具有正确密钥的服务器发送的,并且没有人玩过邮件正文,无论是否重新发送以及您的服务器从何处接收邮件都是任何人的猜测。

DKIM 是加密通过/失败,如果邮件服务器将签名添加到内容中可以破坏它(并且它可能像服务器或中继添加额外的回车一样无辜),有各种切换简单与轻松(覆盖常见的修改),其中一些修改是允许的,但以削弱保护为代价。总的来说,我发现 DKIM 太复杂,太容易让邮件意外丢失。

相比之下,我认为 SPF 设置起来相当容易,只要您不经常更改邮件服务器的地址,就需要较少的调试。您还可以指定在 SPF 中更加谨慎地对待未列出的服务器(“软故障”),这将进一步增强与列表匹配的服务器的可信度,而不会惩罚那些不太严厉的服务器。

DKIM 很容易出错。由于 DKIM 未正确验证(如邮件服务器的标题和日志中所示),我收到了很多合法电子邮件,这些电子邮件已将其放入我的垃圾邮件文件夹。然而,它确实为您的消息提供了进一步的可信度。

总的来说,DKIM 在您不知道您的邮件服务器中继地址是什么和/或它们经常更改并且您只想将签名密钥提供给某处主机上的应用程序以代表您从您的域地址发送邮件的情况下可能很有用.

垃圾邮件检查服务器分配分数和阈值来计算垃圾邮件/非垃圾邮件,通常会为通过 SPF 和 DKIM 的邮件奖励额外的分数。从字面上看,您可以通过两者获得奖励积分。

另请参阅:SPF 与 DKIM - 确切用例和差异


Ove*_*Ove 8

我认为这很难得到令人满意的回答的原因之一,是因为您的核心论点似乎基于理论理想情况,而不是基于现实世界。

原则上,DKIM 还不够吗?是的,当然,如果您的 DKIM 始终有效并且没有邮件服务器以破坏您的 DKIM 签名的方式重写您的邮件,如果您不关心任何人重新发送您的电子邮件,并且如果您的每个潜在收件人也实施 DKIM 验证,那么原则上 DKIM 对您来说就足够了。(不过,您可能仍需要添加 DMARC 策略,以使收件人拒绝根本没有 DKIM 签名的邮件。)

但是,人们还需要关心 SPF 吗?是的,出于实际原因,他们确实这样做了。SPF 和 DKIM 在很大程度上是独立的标准,但 SPF 总是比 DKIM 更容易实现,而且许多管理员似乎对使用它感到满意。所以 DKIM 仍然没有完全覆盖。因此,如果您的邮件服务器没有 SPF 记录,那么有人可以通过欺骗您的域向只有 SPF 的收件人发送垃圾邮件的可能性更高。因此,您自己的合法邮件被这些相同的收件人标记为垃圾邮件的可能性也会更高。


Pau*_*aul 7

仅使用 DKIM,接收服务器无法知道在哪里可以找到您的域的 DKIM 密钥,因为电子邮件的签名包含选择器 DNS 记录位置,该位置由每个邮件服务器管理员分配。因此,从其他服务器接收电子邮件的邮件服务器将无法使用它来评估消息。

如果您有 example.com 并配置了 DKIM,仅此,我从我的服务器(example.net)发送了一封电子邮件,但我的服务器“欺骗”了来自 ​​example.com 的电子邮件,并且我配置了对于 example.net 的 DKIM 记录,电子邮件将通过 DKIM 测试,并且接收服务器将很难确定该邮件不是来自 example.com 所有者批准的服务器。这是因为 DKIM 测试是使用发送服务器记录来执行的,以验证电子邮件的完整性,仅此而已。

使用电子邮件签名中的信息执行验证。换句话说,DKIM 测试的开始是电子邮件本身,其中包括发送服务器的 DKIM 公钥的位置。DKIM 标准仅用于验证服务器发送的电子邮件完整性,因此服务器的域不需要与其他标头信息(例如smtp.mailfrom. 这就是为什么我可以“欺骗”example.com 并使用 example.net 的密钥通过 DKIM 测试

这就是为什么这里的每个人都声明 DKIM 仅用于消息完整性,而不是批准的发件人验证。DKIM 只能用作垃圾邮件防护方面的“工作证明”,除非与配置了 SPF 的 DMARC 一起使用,因为没有人知道您的域的密钥位于何处。

  • 使用电子邮件签名中的信息执行验证。换句话说,DKIM 测试的开始是电子邮件本身,其中包括 **发送** 服务器的 DKIM 公钥的位置。DKIM 标准仅用于验证服务器发送的电子邮件完整性,因此服务器的域不需要与其他标头信息(例如“smtp.mailfrom”)有任何关系。这就是为什么我可以“欺骗”example.com 并使用 example.net 的密钥通过 DKIM 测试。 (3认同)
  • 看来我完全误解了DKIM,你指出的区别对于理解DKIM至关重要。阅读 RFC 可以清楚地看出,DKIM 的意图并不是签名域必须与发件人域相同,因此有效的 DKIM 签名不能确保发件人地址未被伪造,除非签名域与发件人域相同发件人域。非常感谢您不仅重申了其他人所说的话,而且实际上指出了我的错误。 (3认同)
  • 啊?这与我的理解完全相反。我的 DKIM 公钥作为特殊 TXT 记录添加到我的 DNS 服务器中,并且该条目仅对我的域有效。进行 DKIM 验证时,电子邮件收件人是否不会验证域名是否与 DKIM 密钥匹配? (2认同)
  • 您能否将上述评论中的信息包含在您的实际答案中?这将使读者更容易理解为什么你的答案是正确的。 (2认同)