概览:Exchange 边缘传输服务器角色
下载这篇文章的代码: ExchangeEdge2007_10.exe (354KB)
Microsoft 平均每个工作日从 Internet 接收到大约 1300 万次邮件提交尝试 ― 其中由于不合法而被阻止的超过了 1050 万。在严重
的情况下,例如 Internet 上垃圾邮件攻击或病毒发作期间,这些被阻止的邮件数量可能超过 9000 万。当然,这只是在 Microsoft 出现的情况;然而,并非只有 Microsoft 面临着欺诈邮件、垃圾邮件、网页仿冒、电子邮件携带的病毒、目录收集、分布式拒绝服务 (DDoS) 攻击以及类似问题。对于此类问题,您如何确保在保持消息传送环境不受大量不合法恶意内容影响的情况下,将所有合法邮件传递给您的用户?
要实现可靠的消息传送保护,一种方法是在 Internet 和您的产品环境之间的外围网络中部署 Exchange Server 2007 边缘传输服务器和 Forefront Security for Exchange Server。这将在您的外围设备上形成一组有组织的边缘传输代理组,其中包括 10 个以上的边缘传输代理,帮助保护您的生产系统和用户。尽早阻止不需要的内容具有显而易见的价值。理想情况下,这些内容在传送到您的服务器之前就应该被阻止,否则在严重情况下您的消息传送环境将承受相当大的负载。不过,消息传送保护还包含其他内容,而不仅仅是阻止邮件。
本系列文章包含两部分,这是第一部分,其中介绍了 Exchange Server 2007 和 Forefront Security for Exchange Server 提供的反垃圾邮件和防病毒代理的体系结构和主要功能。为了使说明更具现实意义、更具实用性,我将在本文中为您介绍如何建立测试实验室,它以 Microsoft 在其公司生产环境中使用的消息传送保护设计为模板。随后,我将更详细地介绍 Exchange Server 2007 的边缘传输体系结构。
在整篇文章中,我将大量使用脚本和批处理文件来自动完成最重要的配置任务。这些文件包括用于解释执行的各个步骤的注释。您可以从《TechNet 杂志》网站 technetmagazine.com/code07.aspx 下载获得这些脚本。
边缘传输拓扑
图 1 显示了 Microsoft IT 在公司生产环境中实施的边缘传输设计。我先指出一些值得注意的设计功能,然后再为您介绍边缘传输体系结构。如果您想了解所有实施细节,请参阅“Exchange 资源”侧栏中引用的 IT Showcase 白皮书。
图 1 Microsoft 的边缘传输拓扑 (单击该图像获得较小视图) 图 1 Microsoft 的边缘传输拓扑 (单击该图像获得较大视图) 分析一下图 1,您会注意到 Microsoft 的边缘传输拓扑是完全冗余的,在任何位置都不存在单点故障。为了实现负载平衡,Microsoft IT 在外部使用 DNS 轮询机制,在内部使用具有多个桥头的消息传送连接器。此外,值得一提的是所有传输服务器(集线器传输和边缘传输)都运行 Forefront Security for Exchange Server 进行病毒扫描。这样,Microsoft IT 就能够在所有入站、出站和内部邮件到达邮件路由拓扑中的传输服务器后立即对其进行扫描。
另一个与安全性相关的重要设计特点是边缘传输服务器不包含在公司 Active Directory 环境中。实际上,不必在任何 Active Directory 林中部署边缘传输服务器。但是,为了维护一致的管理框架、应用通用策略集和支持单一登录,Microsoft IT 将所有边缘传输服务器部署在独立于生产环境的 Extranet 林中。
最后,您可以清楚地看到,来自 Internet 的所有邮件都要通过位于北美的边缘传输服务器发送到 Microsoft。位于都柏林和新加坡的边缘传输服务器只处理出站邮件。将所有入站通信集中到北美的边缘传输服务器上处理有一个优点,就是不仅可以实施集中式安全管理和反垃圾邮件控制,还可以避免来自大型区域性数据中心的出站邮件经过内部消息传送主干网。
Microsoft IT 系统工程师 Omesh Desai 设计了 Microsoft 的边缘传输拓扑。当我向 Omesh 询问这些最重要的设计功能时,他说:“在边缘传输设计中,我们利用本机 Exchange 反垃圾邮件和防病毒功能在消息传送主干网中实现多层消息传送保护。消息传送外围部分的安全最重要,不过一个简单的管理模型对我们也非常重要。边缘传输服务器通过更加严密的防火墙配置帮助我们提高了安全性,还通过 IP 信誉服务、自动内容筛选器更新、安全列表聚合和电子邮件邮戳验证提高了垃圾邮件筛选的准确性。默认情况下,所有服务器到服务器的通信都进行了加密,我们还尽可能对与外部目标的通信进行加密。”
“我们在边缘传输服务器中使用了两个双核 64 位处理器和 8 GB 内存。通过使用六台这样的服务器和两个数据中心的负载平衡,我们有足够的能力应付邮件提交高峰,例如病毒在 Internet 上发作期间。”
边缘传输测试实验室
测试实验室设置由于最佳实践是使用不存在的域名和专用 IP 地址,因此我使用 AdventureWorks.com 和 192.168.xxx.0-24 范围内的 IP 地址。因为我并不是要测试负载平衡或容错,所以不存在冗余系统或防火墙阵列。(当然,Microsoft IT 实际使用的防火墙系统不能作为安全原因讨论。)不管怎样,此类细节对于此测试环境来说并不重要。
我的测试环境使用 ISA Server 2006,因为它可能是与 Exchange Server 2007 一起使用的最常见的防火墙系统之一。在外部和内部防火墙中都运行 ISA Server 2006 有助于将测试环境的复杂性保持在一个适当的水平;不过,对于生产环境,我建议使用不同的外部和内部防火墙系统以提高安全性。我没有部署 IP 安全 (IPsec) 策略或为传输层安全性 (TLS) 准备环境,因为这些主题不在本文讨论范围内。
但是,我使用了虚拟机和 32 位评估软件,您可以从 Microsoft 网站下载它们。Microsoft 不支持在生产中使用 32 位版本的 Exchange Server 2007,但在测试环境中这并不是问题。
我的测试实验室尽可能采用默认设置。在运行 Exchange Server 2007 安装程序并为生产环境订阅边缘传输服务器之前,只需特别注意 IP 配置、防火墙和 DNS 区域。有关 IP 配置的详细信息,请参阅辅助下载中提供的 Test Lab―IP Configuration.xls 文件。如果使用相同的 IP 地址分配,您可以通过在 ISA01 计算机上直接运行 ISA01_Firewall_Policies.vbs 脚本快速配置外部防火墙(称为 ISA01),运行 ISA02_Firewall_Policies.vbs 快速配置内部防火墙 (ISA02)。辅助下载还包括批处理文件(INTERNET01_DNS_Config.bat、AD01_DNS_Config.bat 和 AD02_DNS_Config.bat),用于配置 DNS 服务器。由于这些批处理文件使用 DNS 命令行工具 (dnscmd.exe),您需要安装 Windows 支持工具;否则必须使用 DNS 控制台手动创建 DNS 记录。
为避免来自现有环境的干扰,我的测试实验室没有连接到 Internet。这种隔离是一种非常有效的防护措施。它将导致签名更新、IP 信誉和内容筛选器更新的所有下载失败,不过这对测试目的影响不大。要避免出现错误消息,请转到 Forefront Server Security 管理员控制台中的扫描程序更新,然后将所有扫描引擎的更新频率设置为一次,并指定一个过去的日期。
要实际体验一下这些功能,最好建立一个测试环境 ― 通常来说建议不要使用生产系统进行测试。至少,将一台运行 Exchange Server 2007 的服务器用作邮箱、客户端访问和集线器传输服务器角色。您还需要另一台 Exchange 服务器用作边缘传输服务器角色。如果您通过运行 Install-AntispamAgents.ps1 脚本(位于集线器传输服务器上的 %ProgramFiles%\Microsoft\Exchange Server\Scripts 文件夹中)在多角色服务器上部署所有传输代理,则可以跳过边缘传输服务器安装。但此方法与 Microsoft IT 部署差别很大。要获得实际的测试实验室,您需要再包含几台服务器。图 2 显示了我研究本文所使用的测试环境。辅助下载中提供了更详细的说明。有关建立实验室的详细信息,请参阅“建立测试实验室”侧栏。
图 2 边缘传输测试环境 (单击该图像获得较小视图) 图 2 边缘传输测试环境 (单击该图像获得较大视图) 在订阅边缘传输服务器和配置相关连接器的过程中,Microsoft IT 删除了所有默认连接器,然后创建了四个发送连接器,以便与不同类型的简单邮件传输协议 (SMTP) 主机和内部集线器传输服务器进行有效的通信。第一个发送连接器是常规的 Internet 连接器,用于与特定地址空间定义不匹配的所有目标。
第二个发送连接器是具有详细地址空间定义的 Internet 连接器,用于不支持扩展的 SMTP(HELO 域)的已知目标。通过将此连接器的 ForceHELO 参数设置为 $true,Microsoft IT 在建立 SMTP 连接时避免了不必要的 EHLO、失败响应 500、HELO 序列。
第三个发送连接器是具有详细地址空间定义的 Internet 连接器,用于支持 TLS 通过加密连接进行安全通信的合作伙伴和其他远程域(TLS 域)。此连接器已将 RequireTLS 参数设置为 $true。
第四个发送连接器是一个入站连接器,用于将接收的 Internet 邮件传输到公司环境中的集线器传输服务器。同样,有关边缘传输服务器配置的详细信息,请参阅本文末尾处“Exchange 资源”侧栏中引用的 IT Showcase 白皮书。
为了将 Microsoft IT 样式的连接器拓扑应用于测试实验室,我使用了一个基于脚本的过程,这些脚本是 Omesh 为了在内部 Microsoft IT 中使用而创建的。出于安全原因,我明显改短了各个命令,不过由此产生的连接器拓扑仍符合 Microsoft IT 拓扑。步骤如下:
在多角色 Exchange 服务器 (HUB-MBX-01) 和边缘传输服务器 (EDGE01) 上,删除默认的连接器。
在 HUB-MBX-01 上,通过运行 HUB-MBX-01_recv_connector.ps1 脚本(在本文的下载中提供)创建新的接收连接器。
在 EDGE01 上,通过运行 EDGE01_recv_connector.ps1 脚本为内部和外部消息传送连接创建两个新的接收连接器。
在 EDGE01 上,通过运行以下命令创建订阅文件:
New-EdgeSubscription -FileName "c:\subscriptionfile.xml"
然后,将生成的订阅文件 (c:\subscriptionfile.xml) 复制到集线器传输服务器的根文件夹中。
5. 在 HUB-MBX-01 上,确保订阅文件的路径为 c:\subscriptionfile.xml,然后运行 HUB-MBX-01_complete_subscription.ps1 脚本。此脚本将为边缘同步导入该订阅文件而不会自动创建发送连接器,为 Internet 和内部连接创建发送连接器,然后通过边缘同步将生成的配置复制到边缘传输服务器。
6. 通过以下方法验证配置:使用 [email protected] 和 [email protected] 将测试邮件从 Internet 主机发送到 [email protected],然后回复已接收的邮件以确保入站和出站邮件传输正常。
建议您用记事本打开各个脚本文件,并分析这些脚本执行配置所用的 cmdlet 和参数。有关这些 cmdlet 和参数的详细信息,请查看以联机方式提供的 Exchange Server 2007 产品文档。
边缘传输体系结构
现在,让我们了解一下边缘传输代理,从我安装边缘传输服务器角色时起,这些代理就一直在等待有人发送 HELO 或 EHLO。如果您在边缘传输服务器上运行 Get-TransportAgent cmdlet,会看到图 3 中列出的 11 个条目。默认情况下,所有代理都被启用以通过适当的设置实现消息传送保护。
Get-TransportAgent cmdlet 和图 3 按优先级顺序列出了这些代理,不过这并非代理执行任务的顺序。工作顺序主要依赖于这些代理注册的 SMTP 接收事件和路由事件的顺序。要查看代理和事件是如何结合在一起的,请参阅图 4 中的图表,该表说明了如何将传输代理集成到边缘传输体系结构。
图 4 边缘传输体系结构中的传输代理 (单击该图像获得较小视图) 图 4 边缘传输体系结构中的传输代理 (单击该图像获得较大视图) 在邮件处理过程中,各个阶段都会发生传输事件,以便调用附加代码来执行垃圾邮件筛选、病毒扫描和其他任务。在这个松散耦合且可扩展的设计中,边缘传输进程 (EdgeTransport.exe) 假定事件源的角色。事件处理程序(也称为传输代理)是基于 Microsoft .NET Framework 2.0 的托管代理对象,它向事件源注册以接收回调通知。
图 5 显示了所有代理的事件注册,这些代理安装在具有 Forefront Security 的边缘传输服务器上。由于代理注册的数量很大,所以这些注册可能有些难以理清,不过不要绝望。如果在边缘传输服务器上运行 Get-TransportPipeline | Format-List 命令,则可以更加方便地分析每个单独传输事件的注册情况。只需确保 Microsoft Exchange 传输服务 (MSExchangeTransport.exe) 正在运行,并且在上次服务重新启动后您通过边缘传输服务器至少发送了一封邮件。正如输出所示,多个代理可以注册相同的事件类型,并且各个代理可以注册多个事件。事件注册只取决于相应代理的处理要求。
图 5 传输代理的事件注册 (单击该图像获得较小视图) 图 5 传输代理的事件注册 (单击该图像获得较大视图) 最重要的事件之一是 OnSubmittedMessage 路由事件,在邮件到达提交队列时会触发该事件。所有邮件,无论它们是通过 SMTP、文件系统还是任何其他机制传入的,都必须经过此队列。分类程序是 Exchange Server 传输体系结构的核心组件,负责解析收件人、分类和路由邮件以及生成传递状态通知 (DSN)。因此,对于必须处理所有已接收邮件的代理,OnSubmittedMessage 事件是最佳注册选择。FSE 路由代理是为了将所有接收的邮件传送到病毒扫描引擎而为 OnSubmittedMessage 事件注册的 Forefront Security 组件。由于为 OnSubmittedMessage 事件注册了 FSE 路由代理,所有邮件都必须经过防病毒解决方案。
那么,为什么所有代理不是向 OnSubmittedMessage 注册事件后就认为完成了工作呢?因为您希望在服务器确认成功传送前,尽早阻止不需要的邮件。否则,在遇到垃圾邮件或病毒攻击时,您的服务器可能必须处理 9000 万封垃圾邮件,还可能生成 9000 万个未送达报告 (NDR),这将使其他无辜者受到严重威胁。垃圾邮件和病毒攻击几乎始终使用虚假的原始发件人信息。向没有创建原始邮件的收件人发送上百万个 NDR 不仅浪费了您和目标组织的资源,还为恶意用户提供了发动邮件流和 DDoS 攻击的机会。阻止恶意发件人的攻击对于自我保护和保护其他人至关重要。
要有效地阻止邮件,在服务器使用 250 OK 状态代码确认数据接收之前,传输代理必须中断 SMTP 与远程主机之间的对话。根据 SMTP 存储和转发原理,如果未确认邮件传递,您的服务器可以安全地放弃任何已接收的数据而不会生成 NDR。SMTP 接收代理可以完成此操作。它们与 SMTP 会话交互,因为当远程主机连接到该服务器、建立 SMTP 会话、传输 SMTP 谓词、提交邮件并终止连接时,传输管道会根据 SMTP 接收事件调用这些代理。(图 6 列出了与每个步骤相关的 SMTP 接收事件。)由于拒绝邮件的功能优先于传送邮件和中断与远程 SMTP 主机的连接,所有 Exchange Server 2007 反垃圾邮件代理将作为 SMTP 接收代理实现。
能够根据 SMTP 接收代理和路由代理的处理上下文对它们进行区分非常重要。虽然路由代理对邮件属性具有完全访问权限,但 SMTP 接收代理对上下文更敏感,因为后者与 SMTP 会话交互。例如,在远程主机实际传输邮件前,垃圾邮件筛选器无法作用于该邮件的属性。因此,为正确的 SMTP 接收事件注册代理非常重要。请参阅“传输代理开发”侧栏以获取更详细的信息。
Exchange 资源
Microsoft Exchange Server 2007 边缘传输和消息传送保护(Microsoft IT Showcase 技术白皮书)
Windows PowerShell 脚本中心
Exchange Server 2007 技术中心
Microsoft Exchange 团队博客“You Had Me From EHLO”
休息片刻再继续
让我们稍作休息,然后继续深入了解传输体系结构和测试方案。我所讲的内容涵盖甚广,包括边缘传输服务器的 Microsoft IT 样式部署,以及在邮件处理过程的传输管道中触发的内部事件。此系列文章由两部分组成,在下一部分中,我将通过一些值得注意的测试方案继续分析边缘传输代理的行为。
同时,建议下载 Microsoft Visual Studio 2005 Professional Edition 的 90 天试用版 (go.microsoft.com/fwlink/?LinkId=98043),然后按照 Steve 的说明在您的测试环境中编译并安装示例代理。即使您不是开发人员,您也会发现完成这些任务非常简单。如果看到越来越多的业务应用程序依赖于自定义代理,我不会感到惊讶,因为在 Exchange Server 2007 中使用 Visual Studio 2005 开发这些组件是那么便捷。
Kay Unkroth是一位企业家,他曾担任支持工程师、系统开发人员、顾问、培训师和撰稿人,研究 Microsoft 服务器技术已达 15 年以上。Kay 还是 Biblioso Corporation 的共同创始人兼董事长,该公司专门从事托管文档和本地化服务。
摘自 October 2007 期刊 TechNet Magazine.