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

在通过普通邮件服务器(AKA中继主机)发送邮件时,我无法让子域名通过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条目,但为了简洁起见我省略了它们, sub1sub2的SPF条目有所不同价值观,因为我正在尝试尝试这个工作。)

mail.example.com正在运行postfix,并被configuration为example.comsub1.example.comsub2.example.com的中继主机。 他们都可以通过邮件服务器发送邮件(也可以通过DKIM签名),这只是SPF问题。

当我从[email protected]这样的地址发送邮件时,SPF检查通过没有问题。 但是,当我从其他地址发送邮件到[email protected]则SPF检查失败。 能够以这两种格式发送电子邮件至关重要。

很显然,我以某种方式误解了SPF规范。 任何见解都被赞赏!

编辑2

实际上,值为"v=spf1 include:example.com -all"的子域SPFlogging"v=spf1 include:example.com -all"似乎正在工作(其他值仍然不起作用)。 我猜测我的服务器和Gmail之间的DNScaching(我正在用来检查SPF的通过/失败)只需要更新。 无论如何,感谢大家的帮助。

编辑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] 

子域通常使用地址的父域来发送电子邮件。 这确实需要用户id跨域协调。 但是,有不同的子域发送电子邮件的用例。

如果您希望子域的SPFlogging正常工作,则需要每个子域的MX和SPFlogging。 包含模型或下面的模型在没有MX规范的情况下都不起作用。 (您可以使用A:192.0.2.x规范来包含SPFlogging。)尝试使用如下的绑定定义:

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

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

考虑为你的邮件服务器设置一个SPFlogging,如下所示:

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

看来你的邮件服务器有一个IPv6地址。 您需要将其作为AAAAlogging添加到邮件服务器定义中,如图所示。 如果您希望SPF通过IPv6工作,则您的邮件服务器/服务将需要固定的IPv6 IP地址。

虽然SPF不是必需的,但请检查邮件服务器IP地址子域的PTRlogging是否返回其名称。 对于IPv4,您通常需要联系您的提供商。 对于IPv6,您应该能够获得委派给您的DNS的networking块,并且您将不得不configuration该区域。

假设您需要sub1和sub2来发送邮件,那么您需要手动将其IP地址添加到SPFlogging。 创buildsub1.example.com的SPFlogging仅适用于您的电子邮件格式为[email protected]。 将您的example.com SPF更改为以下内容:

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

你有正确的语法,唯一的缺陷是SPFlogging,不像DKIM,只匹配电子邮件似乎源于的域。

如果可能,Postfix将通过IPv6发送邮件,但example.com(01:02 :: 03:04:05:06,来自标头)的IPv6在SPF-Record中未列出有效。 要么允许此IP额外或限制Postfix到IPv4只。

因为我们想要进步,你可以select第一个变种:)