使用通用邮件服务器的子域名的 SPF 设置

使用通用邮件服务器的子域名的 SPF 设置

当我通过普通邮件服务器(又称中继主机)发送邮件时,我无法让子域通过 SPF 检查。

当前设置如下:

MX  10  mail.example.com.

example.com.  TXT  "v=spf1 a mx -all"
sub1          TXT  "v=spf1 include:example.com -all"
sub2          TXT  "v=spf1 a mx -all"

      A  1.2.3.4
mail  A  1.2.3.5
sub1  A  1.2.3.6
sub2  A  1.2.3.7

(以上只是我的 Linode DNS 区域文件的精简版和“审查版”。还有一些AAAA子域的条目,但为了简洁起见,我将它们省略了。sub1和的 SPF 条目sub2具有不同的值,因为我正在尝试让它工作。)

mail.example.com正在运行 postfix,并配置为 、 和 的中继主机example.comsub1.example.com它们sub2.example.com都可以通过邮件服务器正常发送电子邮件(并且也由 DKIM 签名),只是 SPF 存在问题。

当我从类似这样的地址发送邮件时[email protected],SPF 检查会顺利通过。但是,当我从类似这样的地址发送邮件时,[email protected]SPF 检查会失败。能够以两种格式发送电子邮件至关重要。

显然,我在某种程度上误解了 SPF 规范。任何见解都值得赞赏!

编辑2

实际上,带有值的子域 SPF 记录"v=spf1 include:example.com -all"现在似乎可以正常工作(其他值仍然不起作用)。我猜想我的服务器和 Gmail(我用它来检查 SPF 通过/失败)之间的某个 DNS 缓存只需要更新。无论如何,感谢大家的帮助。

编辑1

以下是使用 Gmail 中的“显示原始”功能的(已审查)标头信息:

Delivered-To: [email protected]
Received: by 10.27.176.132 with SMTP id g4csp19468;
    Mon, 6 Oct 2014 09:23:39 -0700 (PDT)
X-Received: by 10.60.223.229 with SMTP id qx5mr2871424.34.1412612619;
    Mon, 06 Oct 2014 09:23:39 -0700 (PDT)
Return-Path: <[email protected]>
Received: from mail.example.com (mail.example.com. [01:02::03:04:05:06])
    by mx.google.com with ESMTPS id fi7si2708120.75.2014.10.06.09.23.38
    for <[email protected]>
    (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
    Mon, 06 Oct 2014 09:23:38 -0700 (PDT)
Received-SPF: fail (google.com: domain of [email protected] does not designate 01:02::03:04:05:06 as permitted sender) client-ip=01:02::03:04:05:06;
Authentication-Results: mx.google.com;
    spf=hardfail (google.com: domain of [email protected] does not designate 01:02::03:04:05:06 as permitted sender) [email protected];
    dkim=pass [email protected]
Received: from sub2.example.com (sub2.example.com [IPv6:01:02::03:04:07:08])
    by mail.example.com (Postfix) with ESMTPS id 587C7A7;
    Mon,  6 Oct 2014 09:23:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=example.com; s=mail;
    t=1412612618; bh=TN5kedzeI1m7kEkfICUGBMJFkDu6VqIrLGM3ne5ESHQ=;
    h=To:From:Subject:Date:From;
    b=Hr3ivPismDgCfyk5Sf5pVmIX6LQo0J4Gv7mWer7QP/81ZK5CrDv+o0LwR1Q19vPlF
     j0RYKzQpsU2n2r/vqnlj8PY7yEd7pZoaQfByJzY0S4uj8NoyLK3ywVSzRt8c/acjSK
     jMTItp+tmK6ZDALMbhhfSHgvTO0N+uozVTgEeMtU=
Received: by sub2.example.com (Postfix, from userid 1000)
    id 910FF104; Mon,  6 Oct 2014 09:23:36 -0700 (PDT)
To: [email protected]
From: [email protected]

答案1

子域使用父域的地址发送电子邮件是很常见的。这确实要求跨域协调用户 ID。但是,也有使用不同子域发送电子邮件的情况。

如果您希望子域的 SPF 记录正常工作,则需要每个子域的 MX 和 SPF 记录。如果没有 MX 规范,则包含模型或以下模型都无法工作。(您可以使用A:192.0.2.x包含的 SPF 记录的规范。)尝试使用绑定定义,例如:

sub1        IN      A       192.0.2.6
            IN      TXT     "v=spf1 mx -all"
            IN      MX      mail

由于邮件子域位于您的域中,因此您可以将 指定MXmailmail.example.com.。对于不同的域,您始终需要一个完全合格的地址mail.example.net.

考虑为您的邮件服务器设置 SPF 记录,如下所示:

mail        IN      A       192.0.2.5
            IN      AAAA    2001:DB8::5
            IN      TXT     "v=spf1 a -all"

您的邮件服务器似乎有一个 IPv6 地址。您需要将其作为 AAAA 记录添加到邮件服务器定义中,如图所示。如果您希望 SPF 在 IPv6 上工作,您的邮件服务器/服务将需要一个固定的 IPv6 IP 地址。

虽然对于 SPF 来说不是必需的,但请检查邮件服务器 IP 地址子域的 PTR 记录是否返回其名称。对于 IPv4,您通常需要联系您的提供商。对于 IPv6,您应该能够将网络块委托给您的 DNS,并且您必须配置区域。

答案2

假设您需要 sub1 和 sub2 也发送邮件,那么您需要手动将其 IP 地址添加到 SPF 记录中。仅当您的电子邮件格式为以下格式时,才可以为 sub1.example.com 创建 SPF 记录[电子邮件保护]. 将您的 example.com SPF 更改为以下内容:

example.com.TXT“v=spf1 a mx ip4:1.2.3.6 ip4:1.2.3.7 -all”

您的语法正确,唯一的缺陷是,SPF 记录与 DKIM 不同,它仅匹配电子邮件似乎来自的域。

答案3

Postfix 会尽可能通过 IPv6 发送邮件,但 example.com 的 IPv6(01:02::03:04:05:06,来自邮件头)在 SPF 记录中无效。请额外允许此 IP 或将 Postfix 限制为仅 IPv4。

由于我们想要进步,您可以选择第一个变体:)

相关内容