2006年6月26日

NULL Sender 与 compurep.com.au 的退邮

Author: Hagen.GoO 转载请联系作者
MSN_contact: wantm009@hotmail.com
Keyword: NULL Sender,退邮
Quote:

朋友说他的邮件服务器给 compurep.com.au 的用户发送邮件,老是被退回,提示:

550 5.7.1 <Remote_user@compurep.com.au>... recipient denied, because MX 10 'mail.xxx.com.cn.' [2xx.6x.4x.2xx] for <Local_user@xxx.com.cn> did not accept the empty address, <>, as required by RFC 821, 1123, 2505, and 2821

于是我猜想可能是对方 AntiSPAM 校验 Mail From 而导致的问题,分析如下:

正常情况:Local_user@xxx.com.cn 发送邮件到 Remote_user@compurep.com.au 其简单会话是:
第一,xxx.com.cn 的 SMTP 连接到 compurep.com.au 的 MX 记录所指的服务器;
第二,xxx.com.cn 的 SMTP 外送 HELO/EHLO 命令,对方 SMTP 应答250;
第三,xxx.com.cn 的 SMTP 送 MAIL FROM:<Local_user@xxx.com.cn>,对方应答250;
第四,xxx.com.cn 的 SMTP 送 RCPT TO:<Remote_user@compurep.com.au>,对方给出250;
第五,xxx.com.cn 的 SMTP 送 DATA,开始发送邮件……

而当 compurep.com.au 的 SMTP 设置了 Mail From 校验以后,整个邮件发送的会话发生了细微变化,在上述的第三步中,对方的 SMTP 会另外新启用一个线程,连接到 xxx.com.cn 的 SMTP 继而校验 MAIL FROM:<Local_user@xxx.com.cn> 这条命令中包含的邮件地址是否真的存在,其完整过程简述如下:
第一,xxx.com.cn 的 SMTP 连接到 compurep.com.au 的 MX 记录所指的服务器;
第二,xxx.com.cn 的 SMTP 外送 HELO/EHLO 命令,对方 SMTP 应答250;
第三,xxx.com.cn 的 SMTP 送 MAIL FROM:<Local_user@xxx.com.cn>,对方应答250;
第四,compurep.com.au 的 SMTP 服务器新开线程,连接 xxx.com.cn MX 对应服务器;
第五,compurep.com.au 的 SMTP 服务器发送 HELO/EHLO 命令;xxx.com.cn 回应250;
第六,compurep.com.au 的 SMTP 发送 VRFY 和 EXPN 校验 Local_user 是否存在;
如果 VRFY EXPN 命令被禁,继续第七步,
如果得到250应答,校验成功,转到第九步 CASE1,
如果得到530回应,校验失败,转到第九步 CASE2,
第七,compurep.com.au 的 SMTP 发送 MAIL FROM:<> 命令,xxx.com.cn 回应250;
第八,compurep.com.au 的 SMTP 发送 RCPT TO:<Local_user@xxx.com.cn>
如果得到250应答,表示校验成功,转到第九步,执行 CASE1,
如果得到>500回应,校验失败,则转到第九步,执行 CASE2.
第九,xxx.com.cn 的 SMTP 送 RCPT TO:<Remote_user@compurep.com.au>,
CASE1:如果 Mail From 校验成功,compurep.com.au 给出250,继续第十步,
CASE2:校验失败,compurep.com.au 给出失败应答,Local_user@xxx.com.cn 收到错误信息;
第十,xxx.com.cn 的 SMTP 送 DATA,开始发送邮件……

出于安全考虑,现在 SMTP 一般都是禁用 VRFY EXPN 命令的,所以有些 AntiSPAM 中的 Mail From 策略干脆就不使用。另外也有一些 Mail From 的 AntpSPAM 策略是在第三步给出250回应前就执行。

按照 RFC 1123 的文档,某些Postmaster给出的 notification 的信息,其 Mail From 必须是空(NULL Sender)地址,即 MAIL FROM:<> 的格式。当某些 SMTP 因考虑垃圾邮件的缘故,拒绝 NULL Sender 后,便会和 RFC 1123 产生一点冲突。有些比较刻板的 MTA 其 Mail From 校验时,使用的就是 Postmaster 的 NULL Sender。

于是连接朋友 2xx.6x.4x.2xx 的 SMTP 端口,手动测试 MAIL FROM:<> 的命令,得到 “501 <> : domain string is NULL.”,证实朋友的 SMTP 确实拒绝 NULL Sender,这便和 compurep.com.au 的 Mail From 校验产生了不和谐。即在第八步时,compurep.com.au 得到501应答,预示无法校验到 Local_user@xxx.com.cn 是真实存在的,于是就产生了退邮。

朋友 SMTP 是 Trend InterScan Messaging Security Suite for SMTP ,找到趋势的官方KB,http://esupport.trendmicro.com/support/viewxml.do?ContentID=EN-121719&id=EN-121719,提示要修改 isntsmtp.ini 中的配置才能解决这个问题。

没有评论: