如何设置 SPF 以通过 Mailchimp、SES 和 EC2,以便 DMARC 不会因未对齐而部分失败

How do I setup SPF to Pass for Mailchimp, SES and EC2 so that DMARC doesn't partially failing due to misalignment

我的一个网站从各种来源发送电子邮件,包括:

我们已经为所有来源正确配置了 SPF 和 DKIM 设置,因此我们决定也添加 DMARC,同时我们将 ?all 更改为 -all。

我们所有的电子邮件都通过得很好,但我们注意到我们的 Mailchimp 电子邮件是 "SPF Incapable",因此没有完全通过。

大多数电子邮件客户端/帐户显示 DMARC 已通过,但是 DMARCian 和一些电子邮件客户端会抛出 DMARC Fail-alignment

例如:

然而,

DMARC.io 确实说了以下内容:

SPF: SPF is not possible as MailChimp uses their own domain in the bounce address. Their domain authentication verification tool requires including Mailchimp, though. To work-around this without having to include Mailchimp servers, try including only 'ip4:205.201.128.0/20 ip4:198.2.128.0/18 ip4:148.105.8.0/21' in your SPF record.

所以,我将它们添加到我的 SPF 中,但它仍然显示:

以下所有 IP 都包含在这些 CIDR 符号中,所以我无法弄清楚为什么 SPF 仍然未对齐 SPF,但它修复了 DKIM...

我确实在 Whosebug 上找到了以下内容: 但是这在建议中似乎有点错误,因为退回服务器几乎总是不同的。他们有数百台服务器。

我的 SPF 看起来像:

v=spf1 +a +mx +ip4:94.237.30.75 +ip4:94.237.30.85 +ip4:94.237.30.86 +ip4:94.237.30.87 +ip4:54.77.177.67 +ip4:34.246.233.211 +ip4:52.18.62.128 +ip4:34.241.119.225 +ip4:205.201.128.0/20 +ip4:198.2.128.0/18 +ip4:148.105.8.0/21 include:servers.mcsv.net include:spf.mandrillapp.com include:mailgun.org include:amazonses.com -all

我做了什么wrong/can我为了让 SPF 一致而进行了改进?

附带说明一下,我假设我可以只使用前 4 个 IP:+ip4:94.237.30.75/28 这将包括这 4 个 IP 以及 14 个左右的其他 IP,这些 IP 的风险并不大特别是当他们没有 DKIM 并且结果是 DMARC 通过时?为了让它更安全一点,我可以将这 4 条记录减少到 +ip4:94.237.30.75 +ip4:94.237.30.85/30,这将只包含 1 个我们不使用的 IP。

我也想通过 EC2 发送电子邮件,而不是通过 SES 发送一些电子邮件(可能取代 Mailgun/SES)但是当我们从这些服务器发送电子邮件时,它们会因为没有反向 DNS 而被发送到垃圾邮件.

我想,解决这个问题的方法是请求亚马逊为我们使用的 3x EC2 实例设置 PTR 记录?

我之前确实请求过其中一个,但我不确定它是应该指向我的主要网站的 IP 还是它从中发送电子邮件的服务器的 IP...

至于 SES,即使在添加 SPF 包含和 DKIM 记录之后,我们的 SPF 记录显示 "Neutral" 而不是 "Pass" 例如以下来自 "Test Email" 的功能SES/EC2

所以回顾一下...

  1. 我们如何让 Mailchimp 完全传递 SPF 以便 DMARC 对齐
  2. 我们如何正确设置反向 DNS 的 PTR 记录,子域应该指向它发送电子邮件的服务器还是主域的服务器?
  3. 如何让 Amazon SES 抛出 SPF Pass,而不是 SPF Neutral?
  1. 你不能。你提到的线程中的答案是正确的。 Mailchimp 会将退回地址设置为其自己的域。因此,将范围添加到您自己的 SPF 记录不会改变任何内容(SPF 是在退回地址上检查的,而不是 header.from 地址)。虽然您没有完全冗余地进行身份验证,但您仍在通过 DMARC,它不应该影响您域的声誉(否则没有人会使用 MailChimp)。
  2. 只有IP地址的所有者才能在DNS中设置PTR记录。它应该指向发送电子邮件的服务器的名称,最好是 EHLO/HELO 中的名称。 This thread 我认为有正确的答案,虽然我从来没有亲自设置过。
  3. 您的 AmazonSES 电子邮件中使用的退回地址域是什么?您是否设置了自定义 MAIL FROM 地址 as explained here?对于以 ?all 结尾的 SPF 记录,通常会返回 Neutral 结果,并且不会传递其左侧的任何内容。 可能发生的另一件事(如果 SPF 域是您自己的域)是您正在点击 "characters-per-string limit" for DNS TXT records. If you haven't cut the record up in at least 2 strings, the check might not get executed beyond the Mailchimp include. And with the absence of an all modifier (not evaluated), it defaults to neutral. You can see what your SPF record looks like with any lookup tool, but querying your domain with https://dns.google.com for TXT records should show you (escaped) double quote (") marks for where the string has been cut. As an example you can check this SPF record 以查看它的外观:[…]ip4:185.211.120.0\"\"/22 ip4:185.250.236.0/22[…]

最后要注意的一件事是您接近 DNS lookup limit。看起来您已经进行了 8 次查找。超过 10 次查找将导致 SPF 检查产生 PERMERROR