系统极客一直在努力
专注于操作系统及软件使用教程

如何配置Exchange Server 2016 SMTP中继

Exchange Server 2016

在大多数的企业应用场景中,都会遇到第三方平台或应用程序使用 Exchange 的 SMTP 服务发送邮件的情况,在我个人所遇到的客户项目中,多数都是由 ERP 或 CRM 等平台去调用 Exchange SMTP 进行邮件投递。该需求 Exchange Server 2016 可以很好地满足,但如何选择和如何配置 Exchange Server 2016 SMTP 中继则需要按客户端应用的需求场景。

Exchange Server 2016 通常会遇到两种类型的 SMTP 中继场景:

  • 内部中继:设备和第三方应用只需将电子邮件发送给 Exchange Organization 的内部收件人
  • 外部中继:设备和第三方应用需要将电子邮件投递给外部收件人

SMTP 中继场景

我们先来看看两种不同的场景区别,再来具体分析实际应用场景中需要考虑的一些细节。

Exchange Server 2016内部SMTP中继

当 Exchange Server 2016 首次部署完成之后,将会自动预配置一个允许接收匿名发件人的接收器用于接收来自 Internet 到内部收件的人电邮。该自动创建的默认接收连接器不仅允许接收 Internet 的入站电子邮件,也同样适用的 SMTP 内部中继场景。

该接收连接器的默认名称为”服务器名\Default Frontend 服务器名“,我们可以在 EMS 中使用如下命令查看到:

Get-ReceiveConnector

Exchange Server 2016内部SMTP中继

同时,我们可以使用 Telnet 进行 SMTP 连接来测试接收连接器:

telnet mail1 25

Exchange Server 2016内部SMTP中继

具体的常用 SMTP 命令建议大家 Google 自学。

Exchange Server 2016外部SMTP中继

接着上面的演示示例,我们来看看使用 Telnet 从一个有效的内部地址发邮件给外部联系人会发生什么:

Exchange Server 2016外部SMTP中继

从上图中大家已经看到,此时会返回一个“550 5.7.54, Unable to relay recipient in non-accepted domain” SMTP 错误,这表示接收连接器不允许匿名将未经验证的发件人传递给外部域名,这样的默认设置可以防止 Exchange Server 2016 被不怀好意的人作为开放中继利用。

如果你的应用场景需要使用设备或第三方应用给外部人员发送邮件,有如下两种方式可以实现:

  • 使用经身份验证的SMTP连接
  • 配置匿名SMTP中继连接器(不推荐允许IP放得太大,配置不当容易被利用)

下面我们就以上两种方式的配置分别进行一下介绍。

配置Exchange Server 2016 SMTP中继身份验证

第一种方式便是配置使用 SMTP 连接身份验证。Exchange Server 2016 用于客户端的接收链接器默认命名为”服务器名\Client Frontend 服务器名

配置Exchange Server 2016 SMTP中继身份验证

要让 Exchange Server 2016 SMTP 中继身份认证能够正常工作,要求至少为正确配置了 Exchange Server 2016 SSL 证书,并为使用 SMTP 的设备或第三方应用配置了正确的 DNS 别名。如果前提条件确认无误,则只需为接收连接器配置好 TLSCertificateName 即可:

1 先使用 Get-ExchangeCertificate 确认要使用的 SSL 证书指纹。

Get-ExchangeCertificate

配置Exchange Server 2016 SMTP中继身份验证

2 由于 TLSCertificateName 字符串的语法由证书的两个不同属性组成,因此用于下列命令应用到配接收连接器:

$cert = Get-ExchangeCertificate -Thumbprint 31CDD8E30237AA41ABBD2D15D10B552DBED68436
$tlscertificatename = "$($cert.Issuer)$($cert.Subject)"
Set-ReceiveConnector "Client Frontend MAIL1" -Fqdn maiFl.sysgeek.cn -TlsCertificateName $tlscertificatename

配置Exchange Server 2016 SMTP中继身份验证

3 为了测试 Client Frontend 连接器,我们可以使用 PowerShell 的 Send-MailMessage cmdlet 来替代 Telnet 进行测试:

$credential = Get-Credential
Send-MailMessage -SmtpServer mail.sysgeek.cn -Credential $credential -From 'administrator@sysgeek.cn' -To 'xxxx@test.com' -Subject 'Test email' -Port 587 -UseSsl

配置Exchange Server 2016匿名SMTP中继

如果将 SMTP 外部中继使用身份验证的方式在你的场景不适用,管理员可以考虑在 Exchange Server 2016 中创建发送邮件设备和第三方应用 IP 或 IP 范围的匿名 SMTP 中继接收接收器。创建步骤如下:

1 打开Exchange 管理中心邮件流接收连接器

2 点击 + 号按向导创建一个新的接收连接器,名称自己写,角色选择前端传输,类型选择自定义

配置Exchange Server 2016匿名SMTP中继

3 删除默认远程网络设置的 IP 范围(极重要),再添加上允许匿名的设备或第三方应用的 IP 地址或范围。

配置Exchange Server 2016匿名SMTP中继

4 导向中配置完成后,打开 Exchange Management Shell 执行如下两条命令更改接收连接器权限:

Set-ReceiveConnector "ANONYMOUS RELAY MAIL1" -PermissionGroups AnonymousUsers
Get-ReceiveConnector "ANONYMOUS RELAY MAIL1" | Add-ADPermission -User 'NT AUTHORITY\Anonymous Logon' -ExtendedRights MS-Exch-SMTP-Accept-Any-Recipient

配置Exchange Server 2016匿名SMTP中继

注意:命令可以照抄,但接收连接器名称总会改成你自己环境的吧!

配置完成之后大家便可以使用 Telnet 测试被允许的 IP 地址是否已被允许从任何(有效内部)电子邮件地址发送邮件到外部地址了。

分享到:更多 ()