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

9

我有一个网站,可以从以下各个来源发送电子邮件:

  • Mailchimp
  • Mandrill
  • Mailgun
  • Amazon SES
  • 来自服务器本身

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

我们的所有电子邮件都一直正常发送,但是我们注意到我们的Mailchimp电子邮件显示为“SPF Incapable”,因此无法完全通过。

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

例如:

enter image description here

然而DMARC.io却说:

SPF: SPF不可能,因为MailChimp在退信地址中使用自己的域。他们的域身份验证工具需要包括Mailchimp。如果要避免包含Mailchimp服务器,请尝试只包括“ip4:205.201.128.0/20 ip4:198.2.128.0/18 ip4:148.105.8.0/21”的SPF记录。

因此,我将它们添加到了我的SPF中,但是仍然显示如下:

enter image description here

所有以下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

我在stackoverflow上发现了以下内容:https://dev59.com/kqvka4cB1Zd3GeqPvJPy#50471866,但是由于退信服务器几乎总是不同的,因此该建议似乎略有不对。

我的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

我做错了什么/我能做些什么来改善SPF的对齐?

另外,我认为对于前4个IP,我可以只使用:+ip4:94.237.30.75/28,这将包括那4个IP以及大约14个其他IP,这不是非常冒险吗,特别是当它们没有DKIM,因此DMARC无法通过时?为了使其更加安全,我可以将这4个记录减少到+ip4:94.237.30.75 +ip4:94.237.30.85/30,这将仅包括我们不使用的1个IP。

我还想通过EC2发送电子邮件,而不是对某些电子邮件使用SES(可能替换Mailgun/SES),但是当我们从这些服务器发送电子邮件时,它们会因为没有反向DNS而被发送到垃圾邮件。

我认为,解决这个问题的方法是请求Amazon为我们使用的3个EC2实例之一设置PTR记录?

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

至于SES,在添加SPF include和DKIM记录后,即使我们的SPF记录显示“Pass”,也会显示“Neutral”。例如,以下内容来自SES/EC2的“测试电子邮件”功能:

  • SPF: NEUTRAL with IP 54.240.7.46

所以简要概括一下...

  1. 我们如何使Mailchimp完全通过SPF以使DMARC对齐
  2. 我们如何正确设置反向DNS的PTR记录,子域名应该指向发送电子邮件的服务器还是主域名的服务器?
  3. 我如何让Amazon SES抛出SPF Pass,而不是SPF Neutral?
1个回答

4
  1. 你做不到。你提到的帖子中的答案是正确的。Mailchimp将把退信地址设置为自己的域名。因此,将范围添加到您自己的SPF记录中将不会改变任何内容(SPF是在退信地址上检查的,而不是在header.from地址上检查)。虽然您没有完全冗余地进行身份验证,但仍然通过了DMARC,这不应对您的域名声誉产生影响(否则没有人会使用MailChimp)。
  2. 只有IP地址的所有者才能在DNS中设置PTR记录。它应该指向发送电子邮件的服务器的名称,最好是EHLO/HELO中的名称。这个主题有正确的答案,我认为,尽管我从未亲自设置过。
  3. 您的AmazonSES电子邮件中使用的退信地址域是什么?您是否设置了自定义MAIL FROM地址{{link2:如此解释}}?以?all结尾且未传递左侧任何内容的SPF记录通常返回Neutral结果。 可能发生的另一件事(如果SPF域是您自己的域)是您正在命中DNS TXT记录的每个字符串限制{{link3:“每个字符串限制”}}。如果您没有将记录分成至少2个字符串,则检查可能不会执行超出Mailchimp包含的范围。在没有all修饰符(未评估)的情况下,它默认为neutral。您可以使用任何查询工具查看SPF记录的外观,但是使用{{link4:https://dns.google.com}}查询TXT记录时,应该显示已剪切字符串的(转义)双引号(“)标记。您可以检查此SPF记录以查看其外观:[…]ip4:185.211.120.0\"\"/22 ip4:185.250.236.0/22[…]

需要注意的是,您已接近DNS查找限制。看起来您已经进行了8次查找。超过10次查找将导致SPF检查结果为PERMERROR


回复1:但是反弹地址的IP在我提到的范围内,所以它应该通过... 回复2:是的,如果需要,您可以请求亚马逊更新PTR记录。基本上,如果EC2实例的IP是54.77.177.67,该服务器的域是testing.website.com,则PTR应指向testing.website.com而不是website.com。 回复3:我确实设置了邮件发送方,并且SPF没有被切断。 回复4:我忘记询问关于我的SPF中前4个IP的假设,关于如何将它们合并。 - Ryflex
1
实际上 SPF 检查本身会通过,但是不符合 DMARC 要求的 header.from 域名对齐。 - Reinto
Re 3: 'isn't being cut' 是什么意思?您的记录中有多个字符串吗?Re 4:是的,您的假设将通过包括/28子网来实现。但是,您的假设没有 DKIM 签名就无法通过 DMARC 是不正确的。DMARC 将通过header.from域与 DKIM 或 SPF PASS 对齐。另外,这有助于限制到 255 字符的限制,而不是 10 次查询的限制。您真的需要在其中使用 +a+mx 方法吗? - Reinto
你提到了“如果您还没有将记录拆分成至少2个字符串”......这就是我所说的。 我已将这些4个IP调整为/28子网掩码。 +a是用于域名,它们都由IP(例如94.237.30.75)覆盖,至于MX,我不确定但大多数都来自94.237.30.85和mailchimp,这两者都已添加,所以我可能可以解决它。 网站https://secure.fraudmarc.com/tool/spf/表明我正在使用8/10次查找,所以现在应该一切正常? - Ryflex
1
如果您更新了原始问题并提供最新的SPF记录,我可以查看一下以确保其正确性。我对fraudmarc.com的SPF检查不是很熟悉,所以无法百分之百确定。另外,为了减少记录中的字符数量,您还可以省略+符号。该符号被默认视为限定符。对于包含项,您已经省略了它们... - Reinto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接