ORF反垃圾邮件系统

邮件服务器-邮件系统-邮件技术论坛(BBS)

 找回密码
 会员注册
查看: 6741|回复: 2
打印 上一主题 下一主题

[转帖] Microsoft SMTP 服务器在第三方测试中可能显示为能够接受并中继电子邮件

[复制链接]
跳转到指定楼层
顶楼
发表于 2007-6-21 17:09:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Microsoft SMTP 服务器在第三方测试中可能显示为能够接受并中继电子邮件


症状
如果使用某种第三方测试对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-mailaccountdoesnotexistattheorganizationthismessagewassentto.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帮助。

smtp协议手工使用
[xmail@xmail log]$ telnet smtp.263.net 25
Trying 211.150.96.25...
Connected to smtp.263.net.
Escape character is ’^]’.
220 Welcome to coremail System(With Anti-Spam) 2.1 for 263(040326)
HELO weiqiong@cctk.net
250 smtp.263.net
mail from:weiqiong@cctk.net
250 Ok
rcpt to:g2_t1@263.net
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
haha
.
250 Ok: queued as B9E452FF3E
quit
221 Bye
Connection closed by foreign host.


2. soap中设置超时时间
soap_init(&soap);  
soap.send_timeout = 10;  
soap.recv_timeout = 10;  
以秒为单位

soap_init(&soap);
soap_set_namespaces(&soap, abs_namespaces);

获取错误号字符串
*soap_faultcode(&soap), *soap_faultstring(&soap)

沙发
发表于 2007-7-17 17:13:39 | 只看该作者
呵呵,好文,详细明了
藤椅
发表于 2007-7-17 17:19:52 | 只看该作者
呵呵,好文,详细明了
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

小黑屋|手机版|Archiver|邮件技术资讯网

GMT+8, 2024-5-17 06:58

Powered by Discuz! X3.2

© 2001-2016 Comsenz Inc.

本论坛为非盈利中立机构,所有言论属发表者个人意见,不代表本论坛立场。内容所涉及版权和法律相关事宜请参考各自所有者的条款。
如认定侵犯了您权利,请联系我们。本论坛原创内容请联系后再行转载并务必保留我站信息。此声明修改不另行通知,保留最终解释权。
*本论坛会员专属QQ群:邮件技术资讯网会员QQ群
*本论坛会员备用QQ群:邮件技术资讯网备用群

快速回复 返回顶部 返回列表