症状
如果使用某种第三方测试对Microsoft简单邮件传输协议(SMTP)服务器的中继情况进行测试,SMTP服务器可能看起来未能通过测试,MicrosoftSMTP产品可能看起来是对中继开放的,即使事实并非如此。
现有多个常用测试可用来测试SMTP服务器的中继情况。您可以使用第三方Web站点及工具,例如:
http://www.abuse.net/relay.html
-和-
http://mail-abuse.net
Microsoft提供了第三方联系信息以便于您寻求技术支持。该联系信息如有更改,恕不另行通知。Microsoft不保证此第三方联系信息的准确性。
开始,您的SMTP服务器看起来可能未能通过部分测试,这时,您的MicrosoftSMTP产品可能看起来是对中继开放的。但是,在您进一步仔细检查了服务器后,将发现您的MicrosoftSMTP产品并没有对中继开放。
原因
SMTP协议中的每个“收件人”或“发件人”地址均包含以下两个部分:本地部分(或邮箱)和域部分。如果没有指定域部分(换句话说,就是紧跟在[@]符号后面的部分),则会假定电子邮件是本地电子邮件。实际上,有些MicrosoftSMTP产品会将本地域附上,原因是某些用户配置其SMTP客户端时,仅将用户名当作电子邮件地址。通过添加默认的本地域,Microsoft服务器将最可能是默认值的设置添加了上去,这样就减少了支持费用。
发生上述情况的原因是,MicrosoftSMTP产品在接受将要传递的SMTP电子邮件之前,不执行目录查找。MicrosoftSMTP产品只检查收件人域,看它是不是一个本地域或显式允许的域。如果收件人域不是一个本地域或允许的域,则服务器将显示一条与下面类似的错误信息:
5505.7.1Relayingprohibited
阻止中继只需要一个条件,即证明“收件人”地址的域部分是本地域。一种选择是,检查邮件服务器的目录以了解收件人是否有效,但此操作不是必需的。如果邮件服务器接受了一个邮件,后来发现它无法传递该邮件,该邮件服务器必须生成一个未送达报告(NDR)。(请参见RequestforComments[RFC]2821文档的第3.7节和RFC1123文档的第5.2.7节。)MicrosoftSMTP产品符合此要求。MicrosoftSMTP服务器似乎接受了要中继的邮件,但是后来该服务器并不传递该邮件并且生成一个NDR。
更多信息
如果您必须拥有在SMTP协议会话期间执行目录查找的能力,您可以编写一个Windows2000SMTP协议事件接收器。
有关其他信息,请参见下面的MSDN平台SDKSMTP服务器事件Web站点:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/smtpevt/html/_smtpevt_protocol_event_interfaces.asp
推荐的符合RFC的响应与下面的响应类似:
5505.1.1user@northwindtraders.com...Userunknown
Microsoft选择不在SMTP协议会话期间执行目录查找,原因是:
如果您将5xx错误返给假冒的用户,则向您的服务器发送主动提供的大量商务电子邮件(垃圾邮件或UCE)的用户即刻会发现哪些地址是真实的、哪些地址是假冒的。用户如果使用SMTP协议运行一个名称词典,就很容易获取一个有效电子邮件地址的列表。这也可能会给本地用户带来安全风险,因为用户名往往与电子邮件地址是一样的。
恶意用户可以使用“发件人”地址在未经授权的情况下访问系统(欺骗),然后使用受害者的服务器向目标收件人发送NDR。这种攻击只能用攻击者能够发送的数据量攻击服务器。换句话说,如果恶意用户想对第三方发送1兆(MB)的数据,则必须使用他(或她)自己的1兆带宽把1兆的数据发送到SMTP服务器。通常情况下,这种恶意用户尝试发送1MB的数据,但是仍会导致Internet上有几十或几百MB的数据攻击一个或一组受害者服务器。阻止发生这一情况最好的做法是,在整个Internet范围内验证“发件人”的地址。但是,还没有任何标准用于在整个Internet范围内验证“发件人”的地址;因此,应对这一情况的最好做法是查看邮件标头。
如果在SMTP协议会话期间执行了目录查找,则SMTP协议的运行速度可能大大减慢。在本文发布时,Microsoft是在以下前提下运作的:SMTP服务器应以尽可能快的速度运行,以避免Internet上或桌面SMTP客户端上的SMTP邮件发生阻塞。如果目录过载,则客户端可能会发现服务器运行速度过慢,而且会收到一条错误信息。在某些情况下,目录也可能不可用;或者,可能需要对特定的域进行中继,但是目录的副本可能不可用(例如,在ISP承载的环境中)。
关于中继的一般信息
一台SMTP客户端可以使用SMTP服务器将电子邮件转发到远程(即,非本地)域,这一情况叫做中继。中继本来不是坏事,因为SMTP就是为这一用途设计的(请参见RFC2821文档的第2.1节和第3.7节)。
但是,如果对中继不加控制(不受控制的主机称作“开放中继”的主机),恶意用户可能使用中继来发送主动提供的大量商务电子邮件(垃圾邮件或UCE)。通过将这些不请自来的电子邮件借助中间主机弹跳,恶意用户会让自己的身份真假难辨。这还会使资源绑定到中继主机上,使中继主机无法发送有效的电子邮件。特别是,大多数发送这种主动提供的电子邮件的用户无需使用自己的带宽即可将一封邮件发送给大量的收件人。
中继测试1
此为SMTP中继的标准测试。如果不是管理员特许或者SMTP客户端首先进行验证,SMTP客户端不应以这种方式进行中继。
>>>RSET
<<<2502.0.0Resetting
>>>MAILFROM:
<<<2502.1.0spamtest@contoso.net....SenderOK
>>>RCPTTO:
<<<5505.7.1Unabletorelayforrelaytest@contoso.net
中继测试2
此测试与上一个测试基本上一样,只是发起人是本地用户而不是远程域的用户。因为“发件人”地址常被用于在未经授权的情况下访问系统(欺骗),所以任何服务器都不应被这种方法欺骗:
>>>RSET
<<<2502.0.0Resetting
>>>MAILFROM:
<<<2502.1.0spamtest@northwindtraders.com....SenderOK
>>>RCPTTO:
<<<5505.7.1Unabletorelayforrelaytest@contoso.net
中继测试3
此测试针对NULL或空白“发件人”信封地址。NDR及其他通知会使用NULL“发件人”信封地址。然而,如果“收件人”地址中的域不是本地域,通知仍然不会通过:
>>>RSET
<<<2502.0.0Resetting
>>>MAILFROM:<>
<<<2502.1.0<>....SenderOK
>>>RCPTTO:
<<<5505.7.1Unabletorelayforrelaytest@contoso.net
中继测试4
此测试与中继测试2一样,只是客户端已显式添加本地域。这不应骗过SMTP服务器:
>>>RSET
<<<2502.0.0Resetting
>>>MAILFROM:
<<<2502.1.0spamtest@northwindtraders.com....SenderOK
>>>RCPTTO:
<<<5505.7.1Unabletorelayforrelaytest@contoso.net
中继测试5
此测试也与中继测试2一样,只是已添加服务器的本地IP地址,目的是尝试欺骗服务器。尽管此地址格式通常是可接受的,但服务器不应接受到远程域的中继。在尝试将服务器的“本地主机名”或域名称系统(DNS)名填入“发件人”地址中的各种其他测试中,服务器都不应被“发件人”地址欺骗:
>>>RSET
<<<2502.0.0Resetting
>>>MAILFROM:
<<<2502.1.0spamtest@[10.10.10.10]....SenderOK
>>>RCPTTO:
<<<5505.7.1Unabletorelayforrelaytest@contoso.net
中继测试6
此测试专用于旧式的基于UNIX的服务器,该服务器通过附加本地域并将(@)符号更改为百分号(%)来路由电子邮件。然后服务器才中继邮件。此Microsoft产品可接受该邮件,显示未能通过测试。因为百分号(%)在本地部分是个有效字符,此产品选择了接受该邮件并在目录查找失败时发出一个NDR。对于这一类型的中继,MicrosoftSMTP产品没有漏洞,因为邮件没有转发,而是发出了一个NDR:
>>>RSET
<<<2502.0.0Resetting
>>>MAILFROM:
<<<2502.1.0spamtest@northwindtraders.com....SenderOK
>>>RCPTTO:
<<<2502.1.5relaytest%contoso.net@northwindtraders.com
中继测试7
此测试是中继测试6的又一个变种。此Microsoft产品接受邮件并显示未能通过测试。因为引号符号(")在本地部分是个有效字符,此产品选择了接受该邮件并在目录查找失败时发出一个NDR。对于这一类型的中继,MicrosoftSMTP产品没有漏洞,因为邮件没有转发,而是发出了一个NDR:
>>>mailfrom:
<<<2502.1.0spamtest@northwindtraders....SenderOK
>>>rcptto:<"nobody@mail-contoso.org">
<<<2502.1.5"nobody@mail-contoso.org"@northwindtraders.com
如果您的SMTP服务器未能通过这些测试中的一个或多个,特别是中继测试6和7,这并不一定能说明该服务器是一个开放中继。有些系统(包括MicrosoftExchange和MicrosoftWindows2000SMTP)看起来能接受中继邮件,但是随后在内部拒绝邮件而不进行传递。但是,如果不发送一条真实的测试邮件,您无法真正确定某个服务器是否真的开放中继。
当您对Exchange2000服务器进行中继测试6和测试7时,因为这两种测试都会针对无效收件人生成一条消息,所以在ExchangeSystemManager中指定的邮箱(具体指定位置是在默认SMTP虚拟服务器的属性中,在邮件选项卡上,在“将使用未解析的收件人的邮件全部转发到主机”框中)会收到一个与下例类似的DNR:
Yourmessagedidnotreachsomeoralloftheintendedrecipients.
Subject:中继测试6
Sent:3/22/20025:47PM
Thefollowingrecipient(s)couldnotbereached:
relaytest%contoso.net@northwindtraders.comon3/12/200212:30PM
Thee-mailaclearcase/" target="_blank" >ccountdoesnotexistattheorganizationthismessagewassentto.Checkthee-mailaddress,orcontacttherecipientdirectlytofindoutthecorrectaddress.
-或者-
Yourmessagedidnotreachsomeoralloftheintendedrecipients.
Subject:中继测试7
Sent:3/13/200212:30PM
Thefollowingrecipient(s)couldnotbereached:
"nobody@mail-contoso.org"@northwindtraders.comon3/13/200212:30PM
Thee-mailaccountdoesnotexistattheorganizationthismessagewassentto.Checkthee-mailaddress,orcontacttherecipientdirectlytofindoutthecorrectaddress.
您可以使用这些NDR来验证这些邮件确实未被中继。
有关如何在运行ExchangeServer5.5时使服务器防范开放中继的其他信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:
196626XFOR:RestrictingRoutingintheInternetMailService
如果您运行的是MicrosoftExchange2000,默认情况下,中继需要身份验证。有关其他信息,请参见Exchange2000帮助。