我有以下 DNS 配置:
$ dig +noall +answer -t txt example.com
example.com. 626 IN TXT "v=spf1 +a +mx include:sendgrid.net include:_spf.google.com -all"
$ dig +noall +answer -t txt google._domainkey.example.com
google._domainkey.example.com. 600 IN TXT "v=DKIM1; k=rsa; ......"
$ dig +noall +answer -t txt _dmarc.example.com
_dmarc.example.com. 300 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:report@email; aspf=s; adkim=r;"
$ dig +noall +answer -t txt em1234.example.com
em1234.example.com. 358 IN CNAME 1234.xyz.sendgrid.net.
1234.xyz.sendgrid.net. 358 IN TXT "v=spf1 ip4:149.72.253.162 -all"
当我发送电子邮件时,example.com
一切正常,DMARC 也通过了。通过 SendGrid 和子域发送的电子邮件也是如此em1234.example.com
。然而,发送报告的报告工具声称 100% SPF 对齐失败,这很奇怪,因为 Gmail 和电子邮件标头的情况恰恰相反:
ARC-Authentication-Results: i=1; mx.google.com;
dkim=pass [email protected] header.s=s1 header.b=Rv669YsQ;
spf=pass (google.com: domain of bounces+4746099-3d38-recipient_email=recipient.com@em1234.example.com designates 149.72.253.162 as permitted sender) smtp.mailfrom="bounces+4746099-3d38-recipient_email=recipient.com@em1234.example.com";
dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=example.com
所以我在这里遇到的问题是如何 SPF 对齐 SendGrid 使用的子域?aspf
修复此设置的唯一方法relaxed
还是有其他方法?
在这种情况下,DMARC 通过,但 SPF 对齐失败。因为 sendgrid 代表发送电子邮件,
example.com
所以接收邮件服务器看到的是:@example.com
。@em1234.example.com
DMARC 检查 3 项内容:
所有 3 项都必须正确才能通过 DMARC。
在您的示例中,您的 DMARC 记录指定
aspf=s
(严格)和adkim=r
(宽松)。当模式为严格时,mail.FROM 和 Return-Path 中列出的两个域必须完全匹配才能通过对齐。当模式放宽时,子域也会通过。由于 SPF 和 DKIM 通过,并且 DKIM 保持一致(由于宽松模式),因此 DMARC 通过。但是,由于 SPF 对齐检查处于严格模式,并且两个域不完全匹配,因此 SPF 对齐失败。
DMARC 仅需要 SPF 对齐或 DKIM 对齐之一即可通过。因此,通过 DMARC 测试并不意味着 SPF 和 DKIM 一致。
您的报告工具是正确的。
aspf=r
在这种情况下你需要改变。或者,您必须让 sendgrid 使用相同的 header.FROM 和 Return-Path 域。然而,第三方电子邮件系统通常使用主域的子域。因此,除非 sendgrid 有任何其他选项,否则需要将 SPF 对齐检查更改为宽松模式,并且不应给您的组织带来任何风险。有关 SPF 对齐的更多信息,请访问:https://mxtoolbox.com/dmarc/spf/spf-alignment
此 Sendgrid 文档中具体描述了该问题:https://support.sendgrid.com/hc/en-us/articles/13925777447451-How-to-use-Custom-Return-Path-with-a-Strict-SPF-标识符对齐-DMARC-策略
我注意到 Sendgrid: