一、 故障现象
自2011年6月份开始,公司某项目邮件系统工程师频繁接到发往国外的邮件退信问题。退信内容为:“Error Message: 400 cannot handshake with mail serve”,或者“530 Relaying not allowed”。
二、 环境描述
Exchange 2003邮件系统,前后端结构,入站邮件由两台赛门铁克反垃圾邮件网关组成,具备负载均衡功能。出站邮件由两台美讯智反垃圾邮件网关组成,设备型号较老,使用公网DNS来查询MX,过保无厂商支持,因为没有负载均衡功能,平时只能单台投递出站邮件,由于该客户每天出站邮件量巨大,经常会发生邮件队列拥堵现象。以往出站邮件队列拥堵时,通过修改Exchange出站连接器的优先级,让出站邮件暂时经由赛门铁克网关来投递,缓解一下美讯智的压力。
三、 故障原因分析
根据退信内容显示,无法与对方邮件服务器建立握手,得知该退信并非对方邮件提供,而是客户自己的邮件出站网关在多次尝试之后放弃投递而反馈给发件人,可以排除因发送方的IP地址被列为RBL和对方反垃圾误判的问题,这种退信内容通常由下列三种原因导致:
A、 DNS解析错误。可能对方邮件组织的MX记录做了变更,该变更在全球范围的DNS服务器上完成同步之前,发送方服务器没有解析出对方变更的MX记录,仍然向老的MX记录进行投递。通常这种情况的影响范围仅限定于刚做过MX地址变更的对象,影响时间约为48小时。
B、 对方邮件服务器离线的时间,或者SMTP服务停止时间超过了发送方尝试的时间,造成发件方在发起SMTP会话请求时无应答;
C、 发件方的出站邮件配置错误。如为某个域名设置了专用的SMTP连接器之后,对方的入站地址发生了变更,或者所使用的DNS服务器出现故障,查不出来有效的MX记录,通常这种情况影响范围比较大。
综合上述经验和知识,我们通过下列步骤对故障原因进行跟踪和定位:
1. 初步故障检测
A、 使用和出站网关一样的外网DNS,查询存在问题的邮件域名的MX记录,并逐一通过telnet对方MX主机的25端口,发现有部分主机无法通讯;
B、 协调其他项目的邮件系统工程师参与测试,并使用另外一个外网DNS,MX记录解析结果相同,但同样无法和部分MX主机建立通讯;
C、 请求国外的朋友进行相同测试,MX记录解析结果相同,但每个主机都可以正常通信。
本阶段所使用的工具:
A、 nslookup命令,用于查询MX记录和A记录;
B、 Google提供的全球免费DNS:8.8.8.8和8.8.4.4;
C、 telnet命令,用于测试对方25端口即SMTP服务是否正常。
小结:DNS解析结果正常,但从国内无法向部分MX主机发起SMTP连接请求,而从国外则正常连接。导致国内的邮件服务器向这些MX主机进行邮件投递时,有60%左右的失败概率。
2. 共性分析
根据多个用户反映的问题,发往dxx.com、lxx.com、nxx.com、cxx.com、hxx.com、zxx.com等域名的邮件,都会有一定几率无法到达,收到本文开头部分的退信内容。
为此,我们使用nslookup对这几个域名进行MX记录查询,发现这些域名都使用了相同的全球中继服务,这些域名的MX记录都被指向很多台命名规则名为xxxx.xx.messagelabs.com主机,大家有兴趣的话可以验证一下,可见这些域名都使用了同一家全球邮件中继服务商,用以降低邮件丢失率;
小结:国外大公司为了降低邮件丢失率而使用了全球中继服务,所有发给这些域名的邮件,都会通过DNS的指引,将邮件投递到xxxx.xx.messagelabs.com主机,xxxx.xx.messagelabs.com主机再根据具体的邮件域名,将邮件中继转发到各大公司真正的入站地址。
3. 进阶故障检测
为了验证上述的推论,我们让另外两个项目的同事分别向上述域名之一的IT管理员发了多封测试邮件,结果很意外,他们发送的邮件全都正常到达,一封都没丢。而从我们这边发出的邮件,依然有很大的退信率。
为此,我们调取了xx公司的SMTP投递日志进行分析,发现xx公司的邮件系统在解析出对方的MX记录后,会根据MX记录的优先级进行选择性投递。同时我们也通过Nslookup工具注意到,提供邮件中继服务的messagelabs公司已经将国内无法到达的MX主机的优先级调低。此时我们开始把思路固定在负责出站的美讯智邮件网关上,经过测试发现,确实是这套8年前部署的邮件网关的出站投递机制存在问题,该网关在邮件投递过程中,通过DNS查询出对方的MX记录后,忽略了MX记录的优先级,而是对解析出来的MX记录进行轮询式投递,枉费了messagelabs公司对来自中国邮件服务器的一番苦心。有了这个思路之后,我们随即在邮件系统中为发往dow.com的邮件创建了一条专用的SMTP连接器,使发往dow.com的邮件通过赛门铁克投递,结果再也没有发生邮件退信。看来赛门铁克的出站网关与时俱进,能根据MX记录的优先级进行投递。
小结:邮件在投递时,会通过DNS查询对方的MX记录,查询出来的MX记录中包含了优先级和别名信息,如xx公司的MX记录:
“lxx.com mail exchanger = 10 mail.lxx.com”
其中的10,就是该MX记录的优先级,10比20优先级高。
而客户这里部署的美讯智网关在投递邮件时,没有使用MX记录的优先级进行选择性投递,而是把所有结果都轮询式的进行一次投递,这里面的结果,就包括了国内无法建立通讯的MX主机。
4. 结论
由于客户所使用的出站邮件网关在投递时没有根据MX记录的优先级进行投递,从而无法避开个别无法从国内访问的MX主机,不顾解析出来的记录是否能通就盲目的进行投递,失败后再使用相同的MX记录尝试再次投递。
这种故障的发生,实在很巧合。因为种种原因,我们国内的邮件服务器无法和文中提到的部分MX主机建立通讯,而各大公司为了降低丢邮件的概率,而使用了全球邮件中继服务,但偏偏有一些出站设备落后的投递机制,使得全球邮件中继服务反而成了祸害。想要问题复现,这三个条件缺一不可!
四、 解决方案
根据上述分析结果和验证的结论,我们通过以下步骤对这个问题进行解决:
1、 故障控制:在Exchange邮件系统中创建一个到赛门铁克网关的SMTP连接器,在该连接器的“地址空间“里,把有问题的域名都添加进来,并把优先级设置为1,迫使发往这些域名的邮件一律经由赛门铁克网关进行投递。通过这个环节的工作,故障现象已经消失;
2、 主动优化:在美讯智网关上对日志进行筛选,把所有投递给有问题的MX记录的域名一一记录,并将这些域名放到新创建的SMTP连接器的“地址空间“里,做到在用户反映之前就把问题解决;
3、 设备升级:在对现有的赛门铁克网关阵列进行扩容后,让出入站的邮件一律交由赛门铁克处理,美讯智网关下线,彻底解决。
五、 后续处理
由于目前的出站邮件流主要还是由一台美讯智网关进行投递,邮件量多的时候,因为性能问题,时常发生邮件队列堆积的现象,大大延长的外发邮件的到达时间,用户也时有抱怨。在目前条件下,为了让问题得到缓解,我们通过对出站邮件进行分流,让另一台压力为另的美讯智也分担一部分出站邮件,大大降低了单台美讯智的压力,提高了设备的利用率,同时也有效缓解了邮件队列堆积的数量。目前形成了出站邮件分三路投递:美讯智投递有问题的,交由赛门铁克进行投递。hk、jp、cn、us、uk、tw、kr、br、ru、cc等结尾的域名,交由美讯智A进行投递,其余的域名的一律交由美讯智B进行投递,通过这种设置,大幅提高了邮件出站的效率,平均邮件投递时间比之前降低60%。
, ANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: -39pt; MARGIN: 0cm 0cm 0pt 60pt; LETTER-SPACING: normal; FONT: 12px verdana, sans-serif, arial, helvetica; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=MsoBodyTextIndent align=left> 3、 设备升级:在对现有的赛门铁克网关阵列进行扩容后,让出入站的邮件一律交由赛门铁克处理,美讯智网关下线,彻底解决。五、 后续处理
由于目前的出站邮件流主要还是由一台美讯智网关进行投递,邮件量多的时候,因为性能问题,时常发生邮件队列堆积的现象,大大延长的外发邮件的到达时间,用户也时有抱怨。在目前条件下,为了让问题得到缓解,我们通过对出站邮件进行分流,让另一台压力为另的美讯智也分担一部分出站邮件,大大降低了单台美讯智的压力,提高了设备的利用率,同时也有效缓解了邮件队列堆积的数量。目前形成了出站邮件分三路投递:美讯智投递有问题的,交由赛门铁克进行投递。hk、jp、cn、us、uk、tw、kr、br、ru、cc等结尾的域名,交由美讯智A进行投递,其余的域名的一律交由美讯智B进行投递,通过这种设置,大幅提高了邮件出站的效率,平均邮件投递时间比之前降低60%。