我们最近将服务器堆栈移至新的数据场,我们的一些客户在从他们的 GApps 帐户发送邮件时遇到了问题。在服务器迁移之前,我们没有遇到任何问题,但我怀疑 IP 更改等可能与此有关。
我们发现问题是某些域名的 SPF 标头不正确并且不包含 Google SPF 记录。
我已向所有域添加了 TXT 记录,以下v=spf1 include:_spf.google.com ~all
内容解决了可传递性问题,但我对 SPF 了解不够,不知道我们的 DNS 模板上的所有 TXT 记录是否正常。
如果某个域使用 Google Apps 发送邮件,我们会禁用该域的本地邮件路由,以防止任何内部邮件无法通过,并且所有非 GApps MX 记录都会被删除。
当前,每个域上设置如下:
domain.com. TXT v=spf1 +a +mx -all
domain.com. TXT v=spf1 include:_spf.google.com ~all
mail.domain.com. TXT v=spf1 ip4:xxx.xxx.xxx.xxx a mx a:mail.domain.com mx:domain.com ?all
我的问题是:
对于添加到服务器的所有域,上述记录是否正常(一些 SPF 测试结果为阳性,另一些为阴性)?
上面的两个 domain.com DNS 记录可以合并为一个吗?
对于未通过 Google Apps 发送的域名,Google 可以包含 SPF 记录吗?
如果他们使用 Google Apps,是否有必要删除其他 TXT 记录。我认为没有必要删除 mail.domain.com 记录,因为邮件不是从那里发出的,但如果存在,是否会引起任何问题。
我们在一台服务器堆栈上运行着 100 多个域,更新它们全部不是一件有趣的事情,但我希望能够正确地完成。
提前致谢。
答案1
一个主机名上只能有一个 SPF 记录,因此您必须将两个记录合并为一个。SPF 基本上是一个机制(匹配某些内容)列表以及针对该机制要采取的操作。您可以在 SPF 记录中包含任意数量的这些机制。如果您想要domain.com
这样:
domain.com. IN TXT "v=spf1 include:_spf.google.com +a +mx -all"
这意味着检查以下内容(以第一个匹配的机制为结果)。
获取 SPF 记录
_spf.google.com
并对其进行评估 (include:
)。Google 的 SPF 记录如下所示:_spf.google.com descriptive text "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"
如果 SMTP 客户端的 IP 位于这些 IPv4 子网之一内,则接受 (
ipv4:
)如果 SMTP 客户端的 IP 是域的 A 记录,则接受 (
+a
)- 如果 SMTP 客户端的 IP 是该域的 MX 记录,则接受 (
+mx
) - 拒绝一切 (
-all
)
您的 SPF 记录mail.domain.com
可能可以简化为:
mail.domain.com. IN TXT "v=spf1 ip4:xxx.xxx.xxx.xxx a mx:domain.com ?all"
假设mail.domain.com
本身没有 MX 记录。 如果有 MX 记录,请将该mx
术语添加回去(在 之前all
)。
答案2
为什么您有三个不同的 SPF 记录?另外,为什么您有一个单独的记录mail.domain.com
,您会接受该域名上的任何邮件吗?基本上,一个domain.com TXT v=spf1 include:_spf.google.com +a +mx ~all
就足够了。