在调查 DMARC 报告时,我意识到我并不真正了解电子邮件的某些方面。我试图确保我正确掌握了与 SPF 和 DMARC 相关的概念。
如果一封电子邮件经过几个中间节点……
- 服务器之间的每个连接都会传递一个信封“MAIL FROM:”值,该值是在发件人的 MUA 进行初始 SMTP 握手时建立的。邮件在网络中传输时,“MAIL FROM:”的值不会改变。最终的 MTA 可能会根据“MAIL FROM:”添加“Return-Path:”标头。
- DMARC 报告中的“<header_from>”元素基于邮件的“发件人:”标头,由发件人的客户端设置。
- 链中的最终 MTA 执行 SPF 和 DMARC 检查。SPF 检查与其连接的节点的源 IP 地址。而不是原始源 IP 地址。
- 中间节点不执行 SPF 检查。它们主要中继电子邮件而不更改信封信息。
- 鉴于第三点,我的 DNS 的 SPF TXT 记录必须包含可以直接连接到收件人的 MTA 的每个可能的中间节点的 IP 地址。
因此,由于中间节点在 SPF 中不起作用。如果我能确保在节点连接到最终 MTA 之前在链中注入虚假电子邮件。那么 SPF 会通过吗?还应该可以伪造“MAIL FROM:”和“From:”;这样 DMARC 也会通过吗?
以上内容是否正确或者我还遗漏了其他要点?
您对电子邮件的工作方式存在根本性的误解。没有任何“中间”服务器像邮局一样运行,但在典型设置中,一个(发送)电子邮件基础设施将消息传递给另一个(接收基础设施)。SPF 检查应该在这些基础设施的边缘直接针对连接进行;而不是
Received
可以伪造的前一个标头。另一方面,只要签名内容不变,DKIM 签名就会保持有效,因此可以根据需要尽可能接近最终目的地进行检查。DMARC 不会对消息进行身份验证,但会强制执行 SPF 或 DKIM 提供的身份验证,要求与标头中使用的主机名保持一致
From
。转发和邮件列表场景稍微复杂一些。由于正确配置的 SPF 在转发后不会通过,因此转发基础设施应重写信封发件人。SPF 检查本身将通过,但 SPF+DMARC 对齐会被破坏。因此,转发完全依赖于 DKIM+DMARC,邮件列表应避免修改邮件内容或重写标
From
头并使用自己的 DKIM 密钥重新签名邮件。