如何配置Exchange Server 2016 SMTP中继
如何配置Exchange Server 2016 SMTP中继
在大多数的企业应用场景中,都会遇到第三方平台或应用程序使用 Exchange 的 SMTP 服务发送邮件的情况,在我个人所遇到的客户项目中,多数都是由 ERP 或 CRM 等平台去调用 Exchange SMTP 进行邮件投递。该需求 Exchange Server 2016 可以很好地满足,但如何选择和如何配置 Exchange Server 2016 SMTP 中继则需要按客户端应用的需求场景。
Exchange Server 2016 通常会遇到两种类型的 SMTP 中继场景:
- 内部中继:设备和第三方应用只需将电子邮件发送给 Exchange Organization 的内部收件人
- 外部中继:设备和第三方应用需要将电子邮件投递给外部收件人
我们先来看看两种不同的场景区别,再来具体分析实际应用场景中需要考虑的一些细节。
Exchange Server 2016内部SMTP中继
当 Exchange Server 2016 首次部署完成之后,将会自动预配置一个允许接收匿名发件人的接收器用于接收来自 Internet 到内部收件的人电邮。该自动创建的默认接收连接器不仅允许接收 Internet 的入站电子邮件,也同样适用的 SMTP 内部中继场景。
该接收连接器的默认名称为”服务器名\Default Frontend 服务器名“,我们可以在 EMS 中使用如下命令查看到:
同时,我们可以使用 Telnet 进行 SMTP 连接来测试接收连接器:
具体的常用 SMTP 命令建议大家 Google 自学。
Exchange Server 2016外部SMTP中继
接着上面的演示示例,我们来看看使用 Telnet 从一个有效的内部地址发邮件给外部联系人会发生什么:
从上图中大家已经看到,此时会返回一个“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 SSL 证书,并为使用 SMTP 的设备或第三方应用配置了正确的 DNS 别名。如果前提条件确认无误,则只需为接收连接器配置好 TLSCertificateName 即可:
1先使用 Get-ExchangeCertificate 确认要使用的 SSL 证书指纹。
由于 TLSCertificateName 字符串的语法由证书的两个不同属性组成,因此用于下列命令应用到配接收连接器:
$cert = Get-ExchangeCertificate -Thumbprint 31CDD8E30237AA41ABBD2D15D10B552DBED68436
$tlscertificatename = "$($cert.Issuer)$($cert.Subject)"
Set-ReceiveConnector "Client Frontend MAIL1" -Fqdn maiFl.sysgeek.cn -TlsCertificateName $tlscertificatename
为了测试 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点击 + 号按向导创建一个新的接收连接器,名称自己写,角色选择前端传输,类型选择自定义。
删除默认远程网络设置的 IP 范围(极重要),再添加上允许匿名的设备或第三方应用的 IP 地址或范围。
导向中配置完成后,打开 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
注意:命令可以照抄,但接收连接器名称总会改成你自己环境的吧!
配置完成之后大家便可以使用 Telnet 测试被允许的 IP 地址是否已被允许从任何(有效内部)电子邮件地址发送邮件到外部地址了。