允许本地和 Google Apps 交付的正确 SPF 记录是什么

Byr*_*ode 7 domain-name-system postfix spf g-suite

我们最近将我们的服务器堆栈移到了一个新的数据场,我们的一些客户遇到了从他们的 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
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

对于添加到服务器的所有域,上述记录是否正常(一些 SPF 测试结果为阳性,其他为阴性)作为全局记录?

上面的两个 domain.com DNS 记录可以合并为一个吗?

对于不通过 Google Apps 发送的域,是否可以让 Google 包含 SPF 记录?

如果他们使用 Google Apps,是否需要删除其他 TXT 记录。我不认为有必要删除 mail.domain.com 记录,因为邮件不是来自那里,但如果存在,可能会导致任何问题。

我们有 100 多个域在一个服务器堆栈上运行,并且将它们全部更新不会很有趣,但我宁愿它正确完成。

提前致谢。

mgo*_*ven 5

一个主机名上应该只有一个 SPF 记录,因此您可以将两者合二为一。SPF 基本上是一个机制列表(匹配某些内容)以及对该机制要采取的操作。您可以根据需要在 SPF 记录中包含任意数量的这些机制。因为domain.com你想要这个:

domain.com. IN  TXT "v=spf1 include:_spf.google.com +a +mx -all"
Run Code Online (Sandbox Code Playgroud)

这意味着检查以下内容(第一个匹配机制是结果)。

  • 获取 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"
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果 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"
Run Code Online (Sandbox Code Playgroud)

假设它mail.domain.com本身没有 MX 记录。如果它确实有 MX 记录,请将mx术语添加回(在 之前all)。