如何设置 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
我的一个网站从各种来源发送电子邮件,包括:
- Mailchimp
- 山魈
- 邮枪
- 亚马逊 SES
- 来自服务器本身
我们已经为所有来源正确配置了 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...
198.2.185.161
198.2.185.245
198.2.141.4
198.2.175.233
198.2.185.245
198.2.142.122
我确实在 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
SPF: NEUTRAL with IP 54.240.7.46
所以回顾一下...
- 我们如何让 Mailchimp 完全传递 SPF 以便 DMARC 对齐
- 我们如何正确设置反向 DNS 的 PTR 记录,子域应该指向它发送电子邮件的服务器还是主域的服务器?
- 如何让 Amazon SES 抛出 SPF Pass,而不是 SPF Neutral?
- 你不能。你提到的线程中的答案是正确的。 Mailchimp 会将退回地址设置为其自己的域。因此,将范围添加到您自己的 SPF 记录不会改变任何内容(SPF 是在退回地址上检查的,而不是
header.from
地址)。虽然您没有完全冗余地进行身份验证,但您仍在通过 DMARC,它不应该影响您域的声誉(否则没有人会使用 MailChimp)。
- 只有IP地址的所有者才能在DNS中设置PTR记录。它应该指向发送电子邮件的服务器的名称,最好是
EHLO
/HELO
中的名称。 This thread 我认为有正确的答案,虽然我从来没有亲自设置过。
- 您的 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
我的一个网站从各种来源发送电子邮件,包括:
- Mailchimp
- 山魈
- 邮枪
- 亚马逊 SES
- 来自服务器本身
我们已经为所有来源正确配置了 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...
198.2.185.161
198.2.185.245
198.2.141.4
198.2.175.233
198.2.185.245
198.2.142.122
我确实在 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
SPF: NEUTRAL with IP 54.240.7.46
所以回顾一下...
- 我们如何让 Mailchimp 完全传递 SPF 以便 DMARC 对齐
- 我们如何正确设置反向 DNS 的 PTR 记录,子域应该指向它发送电子邮件的服务器还是主域的服务器?
- 如何让 Amazon SES 抛出 SPF Pass,而不是 SPF Neutral?
- 你不能。你提到的线程中的答案是正确的。 Mailchimp 会将退回地址设置为其自己的域。因此,将范围添加到您自己的 SPF 记录不会改变任何内容(SPF 是在退回地址上检查的,而不是
header.from
地址)。虽然您没有完全冗余地进行身份验证,但您仍在通过 DMARC,它不应该影响您域的声誉(否则没有人会使用 MailChimp)。 - 只有IP地址的所有者才能在DNS中设置PTR记录。它应该指向发送电子邮件的服务器的名称,最好是
EHLO
/HELO
中的名称。 This thread 我认为有正确的答案,虽然我从来没有亲自设置过。 - 您的 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 anall
modifier (not evaluated), it defaults toneutral
. 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