SPF记录中的DNS查找过多

时间:2013-01-10 15:21:24

标签: dns smtp mailchimp sendgrid spf

我的网站需要使用Google Apps,SendGrid和MailChimp服务发送电子邮件。 Google Apps用于接收和阅读我的域中的传入电子邮件。

我需要为我的域设置SPF记录。以下语法正确(不确定A和MX标记):

  

“v = spf1 a mx include _spf.google.com include servers.mcsv.net   包括: sendgrid.net 〜所有“

但如果我用http://www.kitterman.com/getspf2.py测试它,我会得到

  

PermError SPF永久性错误:DNS查找次数太多

类似的问题 http://www.onlineaspect.com/2009/03/20/too-many-dns-lookups-in-an-spf-record/

如何优化/重写我的SPF记录?

6 个答案:

答案 0 :(得分:64)

所以,我以前从来没有这样做过,但根据你发来的文章,这就是我提出来的。

我们从:

开始
v=spf1 a mx include:_spf.google.com include:servers.mcsv.net include:sendgrid.net ~all

在我们抛出Too many DNS lookups错误之前,我们总共获得10次查找:

  2 (Initial TXT & SPF Lookups)
  2 (a & mx Lookups)
  1 (_spf.google.com)
  1 (servers.mcsv.net)
 +1 (sendgrid.net)
 -----------------
  7 Lookups

因此,即使不遵循所包含的SPF记录,我们也有7次查找。


现在,让我们深入了解一下。

1。 _spf.google.com

Google SPF记录评估为:

v=spf1 include:_netblocks.google.com include:_netblocks6.google.com ?all

每个都解析为以下值:

# _netblocks.google.com
v=spf1 ip4:216.239.32.0/19 ip4:64.233.160.0/19 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:209.85.128.0/17 ip4:66.102.0.0/20 ip4:74.125.0.0/16 ip4:64.18.0.0/20 ip4:207.126.144.0/20 ip4:173.194.0.0/16 ?all

# _netblocks6.google.com
v=spf1 ip6:2607:f8b0:4000::/36 ip6:2a00:1450:4000::/36 ?all

因此谷歌为我们提供了2次查找,使总数达到 9次查询

2。 servers.mcsv.net

Mailchimp有点愚蠢,因为它增加了3个额外的查找:

v=spf1 include:spf1.mcsv.net include:spf2.mcsv.net include:spf.mandrillapp.com ?all

我认为根据您通过Mailchimp发送的内容,您可以删除其中一条或两条记录(但您必须自己进行评估)。

无论如何,这些解决方案如下:

# spf1.mcsv.net
v=spf1 ip4:207.97.237.194/31 ip4:207.97.238.88/29 ip4:207.97.240.168/29 ip4:69.20.10.80/29 ip4:69.20.41.72/27 ip4:74.205.22.1/27 ip4:69.20.90.0/26 ?all

# spf2.mcsv.net
v=spf1 ip4:204.232.163.0/24 ip4:72.26.195.64/27 ip4:74.63.47.96/27 ip4:173.231.138.192/27 ip4:173.231.139.0/24 ip4:173.231.176.0/20 ip4:205.201.128.0/24 ?all

# spf.mandrillapp.com
v=spf1 ip4:205.201.136.0/24 ip4:205.201.137.0/24 ?all

这给我们带来了总共 12次查询(已超过限制的两个)。

2。 sendgrid.net

SendGrid最终成为我们最少的额外查找次数。

v=spf1 ip4:208.115.214.0/24 ip4:74.63.202.0/24 ip4:75.126.200.128/27 ip4:75.126.253.0/24 ip4:67.228.50.32/27 ip4:174.36.80.208/28 ip4:174.36.92.96/27 ip4:69.162.98.0/24 ip4:74.63.194.0/24 ip4:74.63.234.0/24 ip4:74.63.235.0/24 include:sendgrid.biz ~all

所以这里唯一的额外查找是sendgrid.biz,其评估结果为:

v=spf1 ip4:208.115.235.0/24 ip4:74.63.231.0/24 ip4:74.63.247.0/24 ip4:74.63.236.0/24 ip4:208.115.239.0/24 ip4:173.193.132.0/24 ip4:173.193.133.0/24 ip4:208.117.48.0/20 ip4:50.31.32.0/19 ip4:198.37.144.0/20 ~all

这使我们的总计最多可以查找14次。


所以我们的总计是 14 Lookups 。我们需要将其降低到10.我已经在下面列出了几个选项,您可能需要使用其中的一个来降低它。

  1. 直接包含一些重定向的spf记录。现在我们知道spf记录重定向到哪些服务器,你可以删除中间人并直接包含它们。 注意:如果任何服务最终更改了他们的SPF记录,您将不得不手动更新您的SPF记录。

  2. 删除您正在使用的一些服务。不确定您拥有所有这些服务的用例,但肯定会有一些重叠您可以使用。例如,SendGrid支持(1)交易外发邮件,(2)时事通讯/营销电子邮件,以及(3)传入邮件。因此可能存在一些可简化的冗余。

  3. 如果MX记录是多余的,请将其删除。根据您的设置,MX查找可能是多余的。

  4. 希望这有帮助!

答案 1 :(得分:6)

斯威夫特的答案很棒。

上面未提及的技术是查看具有自己的SPF记录的单独子域是否可用于通过这些不同路由发送邮件的系统。

E.g。如果域名为example.com,请从user@gapps.example.com等地址发送Google应用。然后可以有gapps.example.com的SPF记录,其中包含_spf.google.com_spf.google.com可以从主example.com SPF记录中删除,这会使查找减少3。

答案 2 :(得分:4)

请查看SPF-tools *,这有助于将SPF记录从使用包含的原始SPF记录重新组合为仅包含ip4ip6字段的静态记录。它可以通过本地运行的DNS服务器或使用其API的托管DNS服务轻松耦合在一起,以使所有内容与上游包含同步。

*我是作者(现在和其他贡献者一起),它是Apache 2.0许可下的开源。

答案 3 :(得分:0)

我们探索了将SPF记录扁平化为IP以及创建子域。所有这些似乎都是很多工作。我们从spfproxy.org找到了一项服务,这需要几分钟的时间来设置。它们基本上使用SPF宏掩盖它们背后的DNS查找。不确定为什么更多的公司不愿意这样做。

答案 4 :(得分:0)

几年前我写了hydrate-spf,查找的工具包括并将结果合并到一个巨大的记录中。正如自述文件中所提到的,这种方法并不理想 - 它使您所包含的域无法更新其记录。但是,当您遇到允许的限制时,它将解决当前的问题,并且可以通过定期更新保持一定的维护。

答案 5 :(得分:0)

10查找限制是DNS查找的限制。展平SPF记录以包含较少的DNS查找并将其替换为IP(展平)是一种绕过极限的方法。

您可以手动执行此操作,但每次其中一个提供商更改其IP(经常发生)时,您必须更新SPF记录。

理想的解决方案是使用 SPF展平服务。这个是免费的低容量,或便宜超过500个电子邮件/月。 会定期轮询您要包含在更新IP中的SPF记录。

Fraudmarc.com

披露:我与该公司无关,这不是推荐链接