![在混合部署中,发送到 Office 365 的所有外部邮件均未通过 SPF,并被 EOP 标记为垃圾邮件](https://linux22.com/image/664754/%E5%9C%A8%E6%B7%B7%E5%90%88%E9%83%A8%E7%BD%B2%E4%B8%AD%EF%BC%8C%E5%8F%91%E9%80%81%E5%88%B0%20Office%20365%20%E7%9A%84%E6%89%80%E6%9C%89%E5%A4%96%E9%83%A8%E9%82%AE%E4%BB%B6%E5%9D%87%E6%9C%AA%E9%80%9A%E8%BF%87%20SPF%EF%BC%8C%E5%B9%B6%E8%A2%AB%20EOP%20%E6%A0%87%E8%AE%B0%E4%B8%BA%E5%9E%83%E5%9C%BE%E9%82%AE%E4%BB%B6.png)
简而言之:合法电子邮件被归入垃圾邮件文件夹,因为 EOP(Exchange Online Protection)将电子邮件标记为垃圾邮件(SCL5)和 SPF 失败。这种情况发生在所有外部域(例如 gmail.com/hp.com/microsoft.com)到客户域(contoso.com)上。
背景信息:
我们正开始将邮箱迁移到 Office 365 (Exchange Online)。这是一种混合部署/丰富共存配置,其中:
- 本地 = Exchange 2003(旧版)和 2010(为混合部署而安装)
- 场外 = Office 365 (Exchange Online)
- EOP 配置用于 SPF 检查。
- MX 记录指向本地,因为我们尚未完成将所有邮箱从本地迁移到 Exchange Online。
问题是,当外部用户向组织中的 Office 365 邮箱发送电子邮件时(邮件流:外部 -> 邮件网关 -> 内部部署邮件服务器 -> EOP -> Office 365),EOP 会使用接收邮件的邮件网关的外部 IP 地址执行 SPF 查找和硬/软失败消息。
(本地邮箱不会出现此问题;只有迁移到 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
示例 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
示例 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
有关包含 X-Forefront-Antispam-Report 的邮件标头,请参阅http://pastebin.com/sgjQETzM
注意:23.1.4.9 是本地混合 Exchange 2010 服务器连接器至 Exchange Online 的公用 IP 地址。
在混合部署的共存阶段,如何阻止外部电子邮件被 EOP 标记为垃圾邮件?
[2015-12-12更新]
该问题已由 Office 365 支持(升级/后端团队)修复,因为它与我们的设置无关。
我们得到以下建议:
- 将公共 IP 列入 EOP 允许列表中(已尝试,但没有帮助。)
- 为我们的域添加 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 的工作方式。)
- 确保 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 检查对于 gmail.com(外部)到 Office 365 仍然软失败,但支持人员表示这没问题,所有邮件都会进入收件箱而不是垃圾邮件文件夹。
附注:在故障排除过程中,后端团队发现了一个看似很小的配置问题——我们在 IP 允许列表中定义了来自入站连接器的 IP(即 Exchange 2010 混合服务器的公共 IP)(另一位 Office 365 支持人员建议将其作为故障排除步骤)。他们告诉我们我们不需要这样做,事实上这样做可能会导致路由问题。他们评论说,在初始传递时,电子邮件不会被标记为垃圾邮件,因此这里也可能存在问题。然后我们从 IP 允许列表中删除了 IP。(但是,在设置 IP 允许列表之前就存在垃圾邮件问题。我们认为允许列表不是原因。)
最终,该支持人员表示:“应该是EOP机制。”因此,整个事件应该是由他们的机制引起的。
对于任何感兴趣的人,可以在此处查看其支持人员的故障排除线程:https://community.office365.com/en-us/f/156/t/403396
答案1
您确定邮件流直接从混合服务器流向 O365 吗?
当您运行混合向导时,它应该在本地和 O365 中创建连接器,这些连接器会将林之间的邮件流视为内部邮件。这意味着它将绕过 EOP/垃圾邮件检查,您永远不会看到这些 SPF 消息。
如果您的边缘设备正在修改标头,则这可能会导致您的问题 - 在您的服务器和 O365 之间,任何东西都不应修改消息标头。确保您没有现有连接器可能会覆盖混合向导创建的连接器。您可以随时删除已创建的现有连接器,然后重新运行向导以重新创建它们。
检查 Exchange 中的传输规则,并确保它们在转到 O365 之前没有修改消息,如果它们被禁用,请再次测试以确保这些不是您的问题。
最后(或者可能是首先)检查您的联合是否配置正确。如果配置不正确,则可能是您的邮件未得到正确处理的原因。这时重新运行混合向导也可以帮助您。
答案2
我不是这里的专家,我已经很长时间没有玩过 Exchange 了,但我会尽我所能回答。
让我们讨论一下设计,为什么不先将所有流量路由到 EOP,然后再路由到内部 Exchange 服务器?您在那里失去了一个很好的功能,它肯定会让您更容易从单个位置控制垃圾邮件(假设您的本地 Exchange 也有一个反垃圾邮件过滤器)。
现在让我们讨论垃圾邮件问题:
- 邮件流和连接器:我感觉连接器设置不正确,如果您收到的所有电子邮件似乎都来自同一个 23.1.4.9 IP 地址,而不是发件人的邮件服务器 IP 地址,那么 SPF 检查肯定会失败,因为它的目的是检查发件人的 IP 和该发件人 IP 的域名。我肯定会花一些时间来检查连接器是如何设置的,这里有一个很好的链接:https://technet.microsoft.com/en-us/library/ms.exch.eac.connectorselection(v=exchg.150).aspx
- EOP 垃圾邮件过滤器和连接过滤器:如果连接器的 IP 设置正确,也许是时候查看 EOP 下的垃圾邮件/连接过滤器了,我会创建过滤器以绕过检查来自 IP 23.1.4.9 的传入电子邮件,但这会使所有传入电子邮件绕过垃圾邮件过滤器检查列表,这会给您带来上一点提到的问题,检查您的连接器,最好先将传入电子邮件路由到 EOP。
答案3
几年后,现在可以修复外部连接器的 SPF 问题。
有一个选项“Exchange Online 中连接器的增强筛选Enhanced Filtering for Connectors in Exchange Online“您可以在其中定义哪些主机必须跳过 SPF 和其他检查。您可以访问选项这里。