Windows 2000、Windows XP 和 Exchange Server 中的 SMTP 中继行为

Support for Windows XP has ended

Microsoft ended support for Windows XP on April 8, 2014. This change has affected your software updates and security options. Learn what this means for you and how to stay protected.

本文已归档。它按“原样”提供,并且不再更新。
简介
Microsoft 简单邮件传输协议 (SMTP) 中继具有允许 SMTP 客户端使用 SMTP 服务器将电子邮件转发到远程域的功能。如 Request for Comments (RFC) 282 的 2.1 和 3.7 节所述,SMTP 被设计为具有中继电子邮件的功能。

但是,如果中继不受控制,则恶意用户可能会利用中继发送大量未经请求的电子邮件。不受控制的主机称为“开放中继”的主机。通过将这些未经请求的电子邮件发送到中间主机,恶意用户可以伪装自己的身份。这还可能导致中继主机上的资源过度使用,并阻止中继主机发送有效的电子邮件。尤其是,发送未经请求的电子邮件的恶意用户可以将一封邮件发给多个收件人,而不使用他们自己的带宽。

默认情况下,“适用于”部分中列出的 Microsoft 产品没有配置为开放中继。
更多信息
当使用某些第三方工具测试 SMTP 服务器的中继情况时,SMTP 服务器可能看起来未通过测试,而且 Microsoft SMTP 产品可能看起来是对中继开放的,尽管事实并非如此。这是因为 SMTP 服务器不能立刻拒绝该电子邮件。相反,SMTP 服务器会处理该电子邮件,然后发送未送达报告 (NDR)。有关 SMTP 服务器对中继的响应的更多信息,请参考 SMTP 服务器对中继的响应部分。有关如何测试 SMTP 服务器的中继情况的更多信息,请参考“测试中继”部分。

SMTP 协议会话中的每个“收件人”或“发件人”地址均包含以下两个部分:本地部分和域部分。如果未指定域部分(即紧跟在 @ 符号后面的部分),则假定电子邮件为本地电子邮件。有些 Microsoft SMTP 产品会附加本地域,原因是某些用户将其 SMTP 客户端配置为仅以用户名作为电子邮件地址。通过添加默认的本地域,Microsoft 服务器可以添加最可能是本地域的部分,从而减少支持费用。

发生上述情况的原因是,有些 Microsoft SMTP 产品在接受将要传送的 SMTP 电子邮件之前,不执行目录查找。Microsoft SMTP 产品只检查收件人域,以查看它是本地域还是显式允许域。如果收件人域既不是本地域也不是允许域,则 SMTP 服务器会通过一条类似如下内容的错误信息做出响应:
550 5.7.1 Relaying prohibited
阻止中继只需要一个条件,即证明“收件人”地址的域部分是本地域。一种选择是,检查邮件服务器的目录以了解收件人是否有效,但此操作不是必需的。如果邮件服务器接受了一个邮件,随后确定它无法传递该邮件,则该邮件服务器必须生成一个 NDR。Microsoft SMTP 产品符合此要求。

注意:Microsoft Exchange Server 2003 可以在 SMTP 协议会话期间执行目录查找。此功能可在系统管理器中启用。 有关 Exchange Server 2003 中收件人筛选的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
823866如何在 Exchange 2003 中配置连接筛选以使用实时阻止列表 (RBL);如何配置收件人筛选

在 SMTP 协议会话期间执行目录查找可用来验证地址。因此,我们建议您打开下面的知识库文章中描述的 TarpitTime 功能:
842851 Microsoft Windows Server 2003 的 SMTP Tar Pit 功能
重要说明:如果在 SMTP 协议会话期间必须执行目录查找,则可以编写一个 Microsoft Windows 2000 SMTP 协议事件接收器。有关其他信息,请访问下面的 MSDN 平台 SDK SMTP 服务器事件网站: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/smtpevt/html/_smtpevt_protocol_event_interfaces.asp

SMTP 服务器对中继的响应

建议的符合 RFC 的响应与如下内容类似:
550 5.1.1 UserName@DomainName.tld...User unknown
在“适用于”部分列出的产品中,Microsoft 选择不在 SMTP 协议会话期间执行目录查找,原因如下:
  • 如果 SMTP 服务器将一个 5xx 错误返回给正在尝试发送大量未经请求电子邮件的恶意用户,则该恶意用户将立刻获知哪些地址是真实的。如果恶意用户通过 SMTP 协议发送一个名称词典,那么他就能很容易获取一个有效电子邮件地址列表。这也可能会给本地用户带来安全风险,因为用户帐户名往往与电子邮件地址相同。
  • 恶意用户可以使用“发件人”地址来获得对系统的未经授权的访问,然后使用受害者的服务器向目标收件人发送 NDR。这种攻击被称为欺骗攻击,它只用攻击者发送给服务器的相同数据量来攻击该服务器。换句话说,如果恶意用户想对第三方发送 1 兆 (MB) 的数据,则必须使用他(或她)自己的 1 兆带宽把 1 兆的数据发送到 SMTP 服务器。通常情况下,这样一个恶意用户尝试发送 1 MB 的数据,但会导致 Internet 上有几十或几百 MB 的数据攻击一台或一组受害者服务器。
  • 如果在 SMTP 协议会话期间执行了目录查找,则 SMTP 协议会话的运行速度可能会大大减慢。在本文发布时,Microsoft 是在以下前提下运行的:SMTP 服务器必须以尽可能快的速度运行,以避免 Internet 上或桌面 SMTP 客户端上的 SMTP 邮件发生阻塞。有时,目录也可能不可用,或者可能需要对特殊域进行中继,但目录的副本可能不可用。这种行为可能发生在 Internet 服务提供商 (ISP) 主机环境中。

如何测试中继

可以通过测试 SMTP 服务器来确定该服务器是否被配置为中继电子邮件。在下面的示例中,中继测试 1 至 5 不被 SMTP 服务器接受,并且被立即拒绝。测试 6 和 7 被 STMP 服务器接受,但是电子邮件不被中继,且服务器最终生成一个 NDR。

要运行下列中继测试,请首先打开一个 Telnet 会话,并连接到 SMTP 服务器上的端口 25:
  1. 打开一个命令提示窗口。
  2. 键入 telnet ServerName 25,其中 ServerName 是 SMTP 服务器的名称或 IP 地址,25 是端口号,然后按 Enter 键。
  3. 键入 EHLO,然后按 Enter 键。

中继测试 1

此为 SMTP 中继的标准测试。除非管理员特许,或者 SMTP 客户端事先做过验证,否则不允许 SMTP 客户端以这种方式进行中继。要执行此测试,请按照下列步骤操作:
  1. 在 Telnet 会话提示符处,键入 RSET

    Telnet 会话使用类似如下内容的文本做出响应:
    250 2.0.0 Resetting
  2. 键入 MAIL FROM:UserName@DomainName.tld,其中 UserName 是用户名,DomainName 是域名,tld 是顶级域(如 .com 或 .net)。

    Telnet 会话使用类似如下内容的文本做出响应:
    250 2.1.0 UserName@DomainName.tld....Sender OK
  3. 键入 RCPT TO:RecipientName@DomainName.tld,其中 RecipientName 是收件人的电子邮件地址。

    Telnet 会话使用类似如下内容的文本做出响应:
    550 5.7.1 Unable to relay for RecipientName@ DomainName.tld

中继测试 2

此测试与中继测试 1 几乎相同,只是发件人是本地用户而非远程域中的用户。由于“发件人”地址通常用于获得对系统的未经授权的访问,因此服务器不应中继此电子邮件。要执行此测试,请按照下列步骤操作:
  1. 在 Telnet 会话提示符处,键入 RSET

    Telnet 会话使用类似如下内容的文本做出响应:
    250 2.0.0 Resetting
  2. 键入 MAIL FROM:LocalUser,其中 LocalUser 是域中用户帐户的本地电子邮件名称,然后按 Enter 键。

    Telnet 会话使用类似如下内容的文本做出响应:
    250 2.1.0 LocalUser@DomainName.tld....Sender OK
  3. 键入 RCPT TO:RecipientName@DomainName.tld

    Telnet 会话使用类似如下内容的文本做出响应:
    550 5.7.1 Unable to relay for RecipientName@DomainName.tld

中继测试 3

此测试针对 NULL 或空白“发件人”信封地址。NDR 及其他通知会使用 NULL“发件人”信封地址。但是,一定不要中继通知,除非“收件人”地址中的域是本地域。要执行此测试,请按照下列步骤操作:
  1. 在 Telnet 会话提示符处,键入 RSET

    Telnet 会话使用类似如下内容的文本做出响应:
    250 2.0.0 Resetting
  2. 键入 MAIL FROM:<>,然后按 Enter 键。

    Telnet 会话使用类似如下内容的文本做出响应:
    250 2.1.0 <>....Sender OK
  3. 键入 RCPT TO:RecipientName@DomainName.tld

    Telnet 会话使用类似如下内容的文本做出响应:
    550 5.7.1 Unable to relay for RecipientName@DomainName.tld

中继测试 4

此测试与中继测试 2 相同,只是本地域已显式添加到电子邮件地址中。对中继关闭的 SMTP 服务器不应中继此电子邮件。要执行此测试,请按照下列步骤操作:
  1. 在 Telnet 会话提示符处,键入 RSET

    Telnet 会话使用类似如下内容的文本做出响应:
    250 2.0.0 Resetting
  2. 键入 MAIL FROM:UserName@DomainName.tld,其中 DomainName 是本地域的名称,然后按 Enter 键。

    Telnet 会话使用类似如下内容的文本做出响应:
    250 2.1.0 UserName@DomainName.tld....Sender OK
  3. 键入 RCPT TO:UserName@DomainName.tld,然后按 Enter 键。

    Telnet 会话使用类似如下内容的文本做出响应:
    550 5.7.1 Unable to relay for UserName@DomainName.tld

中继测试 5

此测试与中继测试 2 相同,只是使用的是服务器的 IP 地址而非域名。尽管此地址格式通常是可接受的,但服务器不得接受到远程域的中继。在“发件人”地址中使用“本地主机”或服务器的域名系统 (DNS) 名称的其他各种测试中,服务器都不得中继使用此方法的电子邮件。要执行此测试,请按照下列步骤操作:
  1. 在 Telnet 会话提示符处,键入 RSET

    Telnet 会话使用类似如下内容的文本做出响应:
    250 2.0.0 Resetting
  2. 键入 MAIL FROM:UserName@10.10.10.10,然后按 Enter 键。

    Telnet 会话使用类似如下内容的文本做出响应:
    250 2.1.0 UserName@10.10.10.10....Sender OK
  3. 键入 RCPT TO:UserName@DomainName.tld,然后按 Enter 键。

    Telnet 会话使用类似如下内容的文本做出响应:
    550 5.7.1 Unable to relay for UserName@DomainName.tld

中继测试 6

此测试特定于旧式的基于 UNIX 的服务器,这些服务器通过附加本地域并将 @ 符号改成百分号 (%) 以路由电子邮件。然后服务器才中继邮件。由于百分号 (%) 是电子邮件地址的本地部分中的一个有效字符,因此,如果目录查找失败,SMTP 服务器可能会接受此邮件,然后发送一个 NDR。Microsoft SMTP 产品不容易出现这种类型的中继漏洞,因为邮件没有转发,而是生成了一个 NDR。要执行此测试,请按照下列步骤操作:
  1. 在 Telnet 会话提示符处,键入 RSET

    Telnet 会话使用类似如下内容的文本做出响应:
    250 2.0.0 Resetting
  2. 键入 MAIL FROM:UserName,然后按 Enter 键。

    Telnet 会话使用类似如下内容的文本做出响应:
    UserName@DomainName.tld....Sender OK
  3. 键入 RCPT TO:UserName%DomainName.tld,然后按 Enter 键。

    Telnet 会话使用类似如下内容的文本做出响应:
    250 2.1.5 UserName%DomainName.tld@DomainName.tldUserName@DomainName.tld
    注意:本地域附加在电子邮件地址中收件人域之后。

中继测试 7

此测试对中继测试 6 做了一些改动。由于引号字符 (") 是电子邮件地址的本地部分中的一个有效字符,因此,如果目录查找失败,SMTP 服务器将接受此邮件,然后发送一个 NDR。Microsoft SMTP 产品不容易出现这种类型的中继漏洞,因为邮件没有转发,而是生成了一个 NDR。要执行此测试,请按照下列步骤操作:
  1. 在 Telnet 会话提示符处,键入 RSET

    Telnet 会话使用类似如下内容的文本做出响应:
    250 2.0.0 Resetting
  2. 键入 MAIL FROM:UserName,然后按 Enter 键。

    Telnet 会话使用类似如下内容的文本做出响应:
    UserName@DomainName.tld....Sender OK
  3. 键入 RCPT TO:"UserName@DomainName.tld",然后按 Enter 键。

    Telnet 会话使用类似如下内容的文本做出响应:
    "UserName@DomainName.tld"@DomainName.tld
    注意:本地域附加在电子邮件地址中收件人域之后。

如何判断是否关闭 SMTP 服务器以进行中继测试 6 和 7

对 Exchange 2000 计算机执行中继测试 6 和 7 时,这些测试将为未解析的收件人生成一条消息,并且 NDR 将由 Exchange 系统管理器中指定的邮箱接收。可以在默认 SMTP 虚拟服务器的属性(在 Exchange 系统管理器的“邮件”选项卡上的“将具有未解析的收件人的所有邮件转发到下列主机”框中)中为未解析的收件人配置邮箱。

这些 NDR 表明电子邮件未被中继。
参考
有关如何在运行 Exchange Server 5.5 时将服务器配置为可防范开放中继的方法的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
196626XFOR:限制 Internet Mail Service 中的路由
有关如何在 Windows 2000 中防止中继的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
310356如何在 Windows 2000 上防止 IIS 5.0 SMTP 服务器的邮件中继
现有多个常用测试可用来测试 SMTP 服务器的中继情况。例如,可以使用下列第三方网站和工具:Microsoft 提供了第三方联系信息以便于您寻求技术支持。这些联系信息如有更改,恕不另行通知。Microsoft 不保证这些第三方联系信息的准确性。

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。对于这些产品的性能或可靠性,Microsoft 不作任何暗示保证或其他形式的保证。
XIMS abuse orbs look-up msn hotmail mail-abuse.org ordb.org osirusoft.com maps
属性

文章 ID:304897 - 上次审阅时间:12/06/2015 04:32:06 - 修订版本: 9.0

Microsoft Windows XP Professional Edition, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, Microsoft Windows 2000 Professional Edition, Microsoft Exchange 2000 Enterprise Server, Microsoft Exchange Server 5.5 标准版, Microsoft Exchange Server 5.0 标准版

  • kbnosurvey kbarchive kbhowto kbnetwork kbwinservnetwork KB304897
反馈