发送到 Office 365 的所有外部邮件均未通过 SPF,在混合部署中被 EOP 标记为垃圾邮件

wan*_*ick 11 exchange spam exchange-2010 microsoft-forefront microsoft-office-365

简而言之:当 EOP(Exchange Online Protection)将电子邮件标记为垃圾邮件 (SCL5) 和 SPF 失败时,合法电子邮件会进入垃圾文件夹。客户端域 (contoso.com) 的所有外部域(例如 gmail.com/hp.com/microsoft.com)都会发生这种情况。

背景资料:

我们刚刚开始将邮箱迁移到 Office 365 (Exchange Online)。这是一个混合部署/丰富共存配置,其中:

  • 本地 = Exchange 2003(旧版)和 2010(安装用于混合部署)
  • 外部 = Office 365 (Exchange Online)
  • EOP 配置用于 SPF 检查。
  • MX 记录指向本地,因为我们尚未完成将所有邮箱从本地迁移到 Exchange Online。

问题是当外部用户将电子邮件发送到组织中的 Office 365 邮箱时(邮​​件流:外部 -> 邮件网关 -> 本地邮件服务器 -> EOP -> Office 365),EOP 执行 SPF 查找和硬/软具有接收邮件的邮件网关的面向外部的 IP 地址的失败邮件。

(本地邮箱不会出现此问题;只有迁移到 Office 365 的邮箱才会出现。)

一个例证: 使用 EOP 从外部到 Office 365 的邮件流

示例 1:从 Microsoft 到 O365

Authentication-Results: spf=fail (sender IP is 23.1.4.9) 
smtp.mailfrom=microsoft.com; contoso.mail.onmicrosoft.com;
dkim=none (message not signed) header.d=none;
Received-SPF: Fail (protection.outlook.com: domain of microsoft.com does not designate
23.1.4.9 as permitted sender) receiver=protection.outlook.com; client-ip=23.1.4.9; 
helo=exchange2010.contoso.com; X-MS-Exchange-Organization-SCL: 5
Run Code Online (Sandbox Code Playgroud)

示例 2:从 HP 到 O365

Authentication-Results: spf=none (sender IP is 23.1.4.9) 
smtp.mailfrom=hp.com; contoso.mail.onmicrosoft.com; dkim=none 
(message not signed) header.d=none; Received-SPF: None 
(protection.outlook.com: hp.com does not designate permitted sender hosts) 
X-MS-Exchange-Organization-SCL: 5
Run Code Online (Sandbox Code Playgroud)

示例 3:从 Gmail 到 O365

Authentication-Results: spf=softfail (sender IP is 23.1.4.9) 
smtp.mailfrom=gmail.com; contoso.mail.onmicrosoft.com; 
dkim=fail (signature did not verify) header.d=gmail.com; 
Received-SPF: SoftFail (protection.outlook.com: domain of transitioning 
gmail.com discourages use of 23.1.4.9 as permitted sender)  
X-MS-Exchange-Organization-SCL: 5
Run Code Online (Sandbox Code Playgroud)

对于带有 X-Forefront-Antispam-Report 的邮件头,请参阅http://pastebin.com/sgjQETzM

注意:23.1.4.9 是本地混合 Exchange 2010 服务器连接到 Exchange Online 的公共 IP 地址。

在混合部署的共存阶段,我们如何阻止外部电子邮件被 EOP 标记为垃圾邮件?


[2015-12-12 更新]

此问题已由 Office 365 支持(上报/后端团队)修复,因为它与我们的设置无关。

我们被建议如下:

  1. 将 EOP 允许列表中的公共 IP 列入白名单(尝试过。它没有帮助。)
  2. 为我们的域添加 SPF 记录:“v=spf1 ip4:XXX.XXX.XXX.XXX ip4:YYY.YYY.YYY.YYY include:spf.protection.outlook.com -all”(不要认为这个建议有效因为 EOP 不应该根据我们的 SMTP IP 地址检查 gmail.com,因为它没有在 gmail.com 的 SPF 记录中指定。这似乎不是 SPF 的工作方式。)
  3. 确保 TLS 已启用(见下文)

关键部分是第三点。“如果未启用 TLS,来自本地 Exchange 的传入电子邮件将不会被标记为内部/信任电子邮件,并且 EOP 将检查所有记录,”支持人员表示。

支持人员通过以下行从我们的邮件标头中确定了 TLS 问题:

  • X-MS-Exchange-Organization-AuthAs:匿名

这表示 EOP 收到电子邮件时未启用 TLS。EOP 不会将收到的电子邮件视为信任电子邮件。正确的应该是这样的:

  • X-MS-Exchange-Organization-AuthAs:内部

但是,这不是由我们的设置引起的;支持人员通过验证来自 Exchange 2010 混合服务器的详细 SMTP 日志,帮助我们确保设置正确。

大约在同一时间,他们的后端团队解决了这个问题,但没有告诉我们究竟是什么原因造成的(不幸的是)。

在他们修复之后,我们发现消息头有一些显着的变化,如下所示。

对于从 Exchange 2003 到 Office 365 的内部邮件:

  • X-MS-Exchange-Organization-AuthAs:内部(它是“匿名的”)

  • SCL=-1(SCL=5)

  • Received-SPF:SoftFail(是一样的)

对于到 Office 365 的外部邮件(例如 gmail.com):

  • X-MS-Exchange-Organization-AuthAs:匿名(是一样的)

  • SCL=1(原来是 SCL=5)

  • Received-SPF:SoftFail(是一样的)

尽管 SPF 检查仍然对 Office 365 的 gmail.com(外部)软故障,但支持人员表示没问题,所有邮件都将转到收件箱而不是垃圾文件夹。

作为旁注,在故障排除期间,后端团队发现了一个看似很小的配置问题——我们在 IP 允许列表中定义了来自入站连接器的 IP(即 Exchange 2010 混合服务器的公共 IP)(由另一个 Office 365 支持建议)人作为故障排除步骤)。他们让我们知道我们不需要这样做,实际上这样做会导致路由问题。他们评论说,在最初通过时,电子邮件没有被标记为垃圾邮件,因此这里也可能存在问题。然后我们从 IP 允许列表中删除了该 IP。(但是,垃圾邮件问题在 IP 允许列表设置之前就存在。我们认为不是允许列表是原因。)

总之,“应该是EOP机制,”支持者说。因此,整个事情应该是由它们的机制引起的。

对于任何感兴趣的人,可以在此处查看其支持人员之一的故障排除线程:https : //community.office365.com/en-us/f/156/t/403396

小智 2

您确定邮件流直接从您的混合服务器发送到 O365 吗?

当您运行混合向导时,它应该在本地和 O365 中创建连接器,这会将林之间的邮件流视为内部邮件。这意味着它将绕过 EOP/垃圾邮件检查,并且您永远不会看到这些 SPF 邮件。

如果您的边缘设备正在修改标头,这可能会导致您的问题 - 在您的服务器和 O365 之间,不应修改消息标头。确保您没有可能覆盖混合向导创建的现有连接器。您始终可以删除已创建的现有连接器,然后重新运行向导来重新创建它们。

检查 Exchange 中的传输规则,确保它们在转到 O365 之前不会修改邮件,如果禁用它们,请再次测试以确保这些不是您的问题。

最后(或者可能是第一个)检查您的联合是否配置正确。如果不是,则可能是您的邮件未得到正确处理的原因。这也是重新运行混合向导可以为您提供帮助的地方。