当通过 SMTP 从一个本地邮箱发送到另一个本地邮箱时,由于邮件中的客户端 IP 而不是服务器 IP,导入到 Gmail 的电子邮件 SPF 失败

当通过 SMTP 从一个本地邮箱发送到另一个本地邮箱时,由于邮件中的客户端 IP 而不是服务器 IP,导入到 Gmail 的电子邮件 SPF 失败

我们有一个 Linux (Debian) VPS,带有已设置 SPF 的域名(假设 example.com 带有 MX mail.example.com)。正在运行 dovecot+exim。此外还有 Direct Admin。

当我向国外服务器发送邮件时,一切都正常。邮件中有服务器 IP,SPF 检查也正常。

一些数据发生了变化(域等):

Received: from mail.example.com (mail.example.com. [188.40.153.39])
    by mx.google.com with ESMTPS id ***.7.2015.02.18.04.09.46
    for <*@gmail.com>
    (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
    Wed, 18 Feb 2015 04:09:47 -0800 (PST)
Received-SPF: pass (google.com: domain of [email protected] designates 188.40.153.39 as permitted sender) client-ip=188.40.153.39;

但是,当我将其从本地邮箱发送到另一个本地邮箱,然后通过 POP3 将邮件发送到 Gmail 时,我遇到了 SPF 问题,因为消息包含原始客户端 IP 地址,而 SPF 检查失败。

Authentication-Results: mx.google.com;
   spf=fail (google.com: domain of [email protected] does not designate 82.160.100.10 as permitted sender) [email protected]
Received-SPF: fail (google.com: domain of [email protected] does not designate 82.160.100.10 as permitted sender) client-ip=82.160.100.10;

82.160.100.10 是原始发件人的 IP。

由于这个问题,我们的内部通信往往会被通过 Gmail 检查邮箱的人标记为垃圾邮件。

有什么想法可以解决这个问题吗?


编辑:测试邮件的标题(更改了我们的 IP 和域名)

1)从一个邮箱发送到另一个邮箱的电子邮件 - 来自 Thunderbird 客户端的标题:

Return-path: <[email protected]>
Envelope-to: [email protected]
Delivery-date: Thu, 19 Feb 2015 11:41:20 +0100
Received: from nat10.net08-g2.isko.net.pl ([82.160.100.10] helo=[11.0.0.22])
    by mail.example.com with esmtpsa (TLSv1.2:DHE-RSA-AES128-SHA:128)
    (Exim 4.83)
    (envelope-from <[email protected]>)
    id 1YOOPC-0005Ud-Qq
    for [email protected]; Thu, 19 Feb 2015 11:41:20 +0100
Message-ID: <[email protected]>
Date: Thu, 19 Feb 2015 11:41:18 +0100
From: Head Developer <[email protected]>
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0
MIME-Version: 1.0
To: Zbyszek <[email protected]>
Subject: This is test
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

2)同一封邮件被gmail接收后(通过POP3自动常规导入):

Delivered-To: *@gmail.com
Received: by 10.140.86.210 with SMTP id p76csp775880qgd;
    Thu, 19 Feb 2015 02:47:12 -0800 (PST)
X-Received: by 10.140.102.165 with SMTP id w34mr10762910qge.26.1424342832562;
    Thu, 19 Feb 2015 02:47:12 -0800 (PST)
Authentication-Results: mx.google.com;
   spf=fail (google.com: domain of [email protected] does not designate 82.160.100.10 as permitted sender) [email protected]
Received-SPF: fail (google.com: domain of [email protected] does not designate 82.160.100.10 as permitted sender) client-ip=82.160.100.10;
Received: by 10.224.31.8 with POP3 id w8mf619596qac.5;
    Thu, 19 Feb 2015 02:47:12 -0800 (PST)
X-Gmail-Fetch-Info: [email protected] 2 mail.example.com 110 [email protected]
Return-path: <[email protected]>
Envelope-to: [email protected]
Delivery-date: Thu, 19 Feb 2015 11:41:20 +0100
Received: from nat10.net08-g2.isko.net.pl ([82.160.100.10] helo=[11.0.0.22])
    by mail.example.com with esmtpsa (TLSv1.2:DHE-RSA-AES128-SHA:128)
    (Exim 4.83)
    (envelope-from <[email protected]>)
    id 1YOOXn-0005j5-Tm
    for [email protected]; Thu, 19 Feb 2015 11:41:20 +0100
Message-ID: <[email protected]>
Date: Thu, 19 Feb 2015 11:41:18 +0100
From: Head Developer <[email protected]>
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0
MIME-Version: 1.0
To: Zbyszek <[email protected]>
Subject: This is test
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

编辑:一些额外的信息

  • 交付方式是 SMTP(我在家里使用邮箱从 Thunderbird 发送电子邮件[电子邮件保护]到同一服务器上的另一个邮箱[电子邮件保护]
  • 82.160.100.10 是我的家庭 IP,nat10.net08-g2.isko.net.pl 是我的家庭主机名,可解析为该 IP
  • 10.140.102.165 是 gmail 服务器 IP
  • 11.0.0.22 是我家庭网络中的本地 IP
  • 邮件服务器 IP 不在任何标题中(如果存在则为 188.40.153.39)。
  • 主机名 mail.example.com 指向邮件服务器 IP
  • 域名 IP 不在任何标头中(如果存在,我会将其更改为 85.17.23.59)
  • 域名有正确的 MX 条目(指向子域名 mail.example.com)
  • SPF 记录:“v=spf1 a mx ip4:188.40.153.39 -all”

编辑:未披露 IP,因为不太敏感

答案1

免责声明:在 GMail 人员确认之前,这个答案仍为猜测。

看起来是 GMail 错误处理了您在此处获取的电子邮件。有些人还报告了与您类似的情况这里这里或者这里

问题是:GMail 通过 POP3 获取电子邮件后,在扫描电子邮件时也会部署 SPF 措施。

通常,SPF 检查在 SMTP 事务中通过检查发件人地址和客户端 IP 地址的域部分进行。但在 POP3 中,GMail 必须解析标头并找到最后一个Received标头。

Received: from nat10.net08-g2.* ([*.160.100.10] helo=[11.0.0.22])
    by mail.example.com with esmtpsa (TLSv1.2:DHE-RSA-AES128-SHA:128)
    (Exim 4.83)
    (envelope-from <[email protected]>)
    id 1YOOXn-0005j5-Tm
    for [email protected]; Thu, 19 Feb 2015 11:41:20 +0100

这是从您的服务器获取的原始电子邮件。它表明您的电子邮件接受来自*.160.100.10发件人的电子邮件[电子邮件保护]. 在这个阶段Gmail 假装是您的服务器并检查发件人地址(example.com)和客户端 IP 地址(*.160.100.10)的域部分。结果如下:

SPF 软失败,因为[电子邮件保护]未指定 *.160.100.10 为允许的发件人

作为解决方法,您可以将 Gmail 过滤器设置为永远不将您的电子邮件标记为垃圾邮件。

答案2

Gmail 似乎有一个错误,它不尊重“已接收”标头中的 ESMTPA,因此无法显示 MUA 是受信任的主机。我想到了一些可能的解决方法:

  1. 使用拆分 MX,即一个 Exim 实例用于接收和转发经过身份验证的客户端的邮件,另一个实例用于接收至邮箱。这模拟了 Gmail 可能期望的 ISP 到 ISP 邮件,并且标头中将有一个与 SPF 记录匹配的 IP 地址。
  2. 在顶部添加一个 Received 标头,通过添加 add_header = 来模拟上述传输Received: by 10.224.31.8 with ESMTP ....
  3. 对于通过 POP 在 Gmail 中检查邮件的用户,将副本转发到他们的 Gmail 帐户。

答案3

我遇到了同样的问题,我使用以下 Google 文档修复了它。这可能对你也有帮助,值得一试。

https://support.google.com/a/answer/33786?hl=en

您必须将以下记录添加到现有的 spf TXT 记录中。这有助于 Google 识别电子邮件地址的来源。

include:_spf.google.com

因此,您必须按如下方式更新您的 spf 记录。

SPF 记录:"v=spf1 a mx ip4:188.40.153.39 include:_spf.google.com -all"

然后尝试发送电子邮件,如果您的 IP 信誉良好,它会直接到达您的收件箱。

相关内容