最终编辑:看来我对 DKIM 的理解完全错了,签名域不必与发件人域相同,因此我的问题的整个前提都是错误的。非常感谢 Paul 指出我的错误!
以下是原始问题:
我尝试阅读有关 SPF 和 DKIM 的信息,但我不明白同时使用两者的意义,至少在打击垃圾邮件(伪造发件人地址,这可能导致我的电子邮件服务器/域被列入黑名单)的情况下。据我所知,DKIM 本身就应该完成 SPF 应该完成的工作。
我目前的理解如下:
- 发送电子邮件时,发件人可以声明任何他们想要的内容(例如虚假的发件人地址)
- DKIM 可以检测虚假的发件人电子邮件地址,因为您可以根据 DNS TXT 记录中的公钥验证 DKIM 签名。
- SPF 允许您验证电子邮件是否从有权向给定发件人地址发送电子邮件的邮件服务器发送。
我不明白的是:除非 DKIM 私钥以某种方式被泄露,仅 DKIM 验证就足以验证电子邮件是从授权的电子邮件服务器发送的,因为否则电子邮件服务器将没有签署电子邮件的私钥。
我在这里看到了一个非常相似的问题的答案:https://serverfault.com/a/780248/154775,其中作者声称 DKIM 无法防止重放攻击。我承认这一点,但我发现这只是一个极端情况,在我看来,迄今为止最大的问题是带有虚假发件人地址的垃圾邮件 - DKIM 应该可以轻松自行防止这种情况。
除了重放攻击之外,是否存在 SPF 与 DKIM 相比提供额外保护的场景?
编辑 :我已用粗体标记出我的问题的核心,以明确我到底想要什么答案。
答案1
如果仅使用 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 仅用于确保消息完整性,而不是验证已批准的发件人。除非与配置了 SPF 的 DMARC 一起使用,否则 DKIM 只能用作垃圾邮件预防方面的“工作量证明”,因为没有人知道您的域的密钥位于何处。
答案2
答案3
我认为这个问题很难令人满意地回答的原因之一是,你的核心论点似乎是基于理论上的理想情况,而不是现实世界。
从原则上来说,DKIM 还不够吗?是的,当然,如果您的 DKIM 始终有效,并且没有邮件服务器会以破坏您的 DKIM 签名的方式重写您的邮件,如果你不介意有人转发你的邮件,并且如果如果您的每个潜在收件人也都实施了 DKIM 验证,那么原则上 DKIM 对您来说就足够了。(不过,您可能仍需要添加 DMARC 策略,以使收件人拒绝根本没有 DKIM 签名的邮件。)
但是,人们还需要关心 SPF 吗?是的,出于实际原因,他们需要。SPF 和 DKIM 在很大程度上是独立的标准,但 SPF 总是比 DKIM 更容易实现,许多管理员似乎只乐于使用它。因此,DKIM 的覆盖范围仍然不够广泛。因此,如果您的邮件服务器没有 SPF 记录,那么有人通过欺骗您的域向只有 SPF 的收件人发送垃圾邮件的可能性更高。因此,您自己的合法邮件被这些收件人标记为垃圾邮件的可能性也会更高。
答案4
根本没有办法阻止垃圾邮件使用域或发件人身份验证。这些技术都不是专门用来打击垃圾邮件的,但它们可以帮助。
DKIM、DMARC 和 SPF 保护收件人免受电子邮件伪造或发件人欺骗(第 1 点)。这是尤其重要打架网络钓鱼多于垃圾邮件,关于词语的含义和用法。即,垃圾邮件往往是无害的,只是骚扰而已。
相反,网络钓鱼和鱼叉式网络钓鱼本质上是恶意的,如果没有 DKIM,它们可以利用与发件人地址的信任关系。当网络犯罪分子想要通过将 IBAN/SWIFT 代码更改为流氓代码来向公司客户发送伪造发票时,情况尤其如此。
对于大宗的商业电子邮件,这些技术完全没有帮助。我可以购买大量新的临时域名,甚至是批量购买,并使用少量 DevOps 自动化来设置 SPF、DKIM、DMARC,然后开始从不可避免地未知的发件人地址发送大量垃圾邮件活动。我每天都会在垃圾邮件收件箱中发现这种情况(如果有人要求提供证据,我可以在这个答案上粘贴一些标题)。
另一个与网络钓鱼相关的反例是,如果网络钓鱼者想要攻击 ACME 银行 ( acme.com
) 的客户,他们无法发送看起来像是来自 的电子邮件[email protected]
,但他们可以购买(因为他们确实购买了!!)acme-confirm-credentials.com
并发送电子邮件。
受过教育的收件人会注意到该电子邮件不是来自官方的acme.com
,并会产生怀疑,尽管人们应该对“凭证确认”的要求产生怀疑。