| 大家请下载附件查看分析过程,很多图片在这显示不出。 本文仅供技术探讨交流,里面的遗留问题还有待各位验证和解答
 
 
 
 关于省经济信息中心sendmail使用故障的分析解决说明
 一、        故障环境说明
 经济信息中心网络拓扑如下所示:
 
 内部办公网通过天融信千兆防火墙NGFW4000-UF做NAT访问互联网。
 防火墙版本为:2.6.40
 二、        故障现象说明
 1,内部办公机器通过防火墙NAT后,登录sendmail邮件服务器收邮件时,响应时间很长,大约需等待30秒后,才可以正常收取。
 2,不经过防火墙的用户可以正常收取邮件;
 3,以前使用天融信防火墙某较早版本(什么版本,暂时无法确定)时,内部办公机器可以正常收取邮件;
 4,使用其他品牌的产品做NAT时,内部办公机器可以正常收取邮件。
 +++++++++++++++++++++++++++++++++++++++
 通过用户反馈的故障现象,我们的第一印象就是:问题出在天融信防火墙上,但是事实真的如此吗?让我们搭个环境,抓个包,分析一下看看。
 +++++++++++++++++++++++++++++++++++++++
 三、        测试环境1-NAT环境(防火墙版本为2.6.40)
 环境描述:
 在公司使用版本为2.6.40的天融信NGFW4000防火墙作为NAT上网设备,内部使用一台笔记本作为测试PC,测试网络拓扑图以及各个IP地址的设置如下图所示:
 
 测试环境说明:
 该环境与用户实际环境完全一致,测试时,我们需要在以下三个地方抓取数据包:防火墙外网接口ETH1、防火墙内网接口ETH2、测试PC 192.168.1.200。
 测试步骤:
 1,        使用SecureCRT, 打开两个telnet 192.168.1.1的窗口,分别使用命令:tcpdump –i eth1 host 220.xxx.160.xxx –n(在防火墙eth1口上抓取邮件服务器220.xxx.160.xxx的所有数据包)和tcpdump –i eth2 host 220.xxx.160.xxx –n(在防火墙eth1口上抓取邮件服务器220.xxx.160.xxx的所有数据包)并保存会话;
 2,        在PC 192.168.1.200上开启科来网络分析软件(中国的sniffer),设置过滤条件为只抓取邮件服务器220.xxx.160.xxx的所有数据包并启动抓包;
 3,        在PC 192.168.1.200上使用telnet 220.xxx.160.xxx 110,登录邮件服务器的110(收邮件POP3)端口;
 4,        完成。
 测试现象:
 响应时间较长,大概等待30秒左右的时间,才显示登录成功的提示(与用户的描述一致)。
 测试结果分析:
 1,        防火墙外网接口ETH1上抓取的数据包如下所示:
 13:05:08.533163 218.104.68.171.42390 > 220.xxx.160.xxx.110: S 950786859:950786859(0) win 16384 <mss 1460,nop,nop,sackOK>
 13:05:08.721807 220.xxx.160.xxx.110 > 218.104.68.171.42390: S 211290961:211290961(0) ack 950786860 win 5840 <mss 1460,nop,nop,sackOK> (DF)
 13:05:08.722475 218.104.68.171.42390 > 220.xxx.160.xxx.110: . ack 1 win 17520
 13:05:12.916200 220.xxx.160.xxx.110 > 218.104.68.171.42390: S 211290961:211290961(0) ack 950786860 win 5840 <mss 1460,nop,nop,sackOK> (DF)
 13:05:12.916763 218.104.68.171.42390 > 220.xxx.160.xxx.110: . ack 1 win 17520
 +++++++++++++++++++++++++++++++++++++++
 TCP三次握手,正常。
 +++++++++++++++++++++++++++++++++++++++
 13:05:13.107977 220.xxx.160.xxx.38107 > 218.104.68.171.113: S 211996004:211996004(0) win 5840 <mss 1460,sackOK,timestamp 309913215[|tcp]> (DF)
 13:05:16.096580 220.xxx.160.xxx.38107 > 218.104.68.171.113: S 211996004:211996004(0) win 5840 <mss 1460,sackOK,timestamp 309913515[|tcp]> (DF)
 13:05:22.087058 220.xxx.160.xxx.38107 > 218.104.68.171.113: S 211996004:211996004(0) win 5840 <mss 1460,sackOK,timestamp 309914115[|tcp]> (DF)
 13:05:34.068364 220.xxx.160.xxx.38107 > 218.104.68.171.113: S 211996004:211996004(0) win 5840 <mss 1460,sackOK,timestamp 309915315[|tcp]> (DF)
 
 
 
 
 
 +++++++++++++++++++++++++++++++++++++++
 我们看到邮件服务器220.xxx.160.xxx主动连接218.104.68.171的113端口请求验证,但是218.104.68.171并没有响应邮件服务器的请求,于是邮件服务器重传了4次认证请求(时间约为30秒)。
 +++++++++++++++++++++++++++++++++++++++
 13:05:43.068169 220.xxx.160.xxx.110 > 218.104.68.171.42390: P 1:49(48) ack 1 win 5840 (DF)
 13:05:43.256913 218.104.68.171.42390 > 220.xxx.160.xxx.110: . ack 49 win 17472
 +++++++++++++++++++++++++++++++++++++++
 邮件服务器220.xxx.160.xxx最终放弃认证,开始218.104.68.171前面的POP3连接。
 +++++++++++++++++++++++++++++++++++++++
 2,        防火墙内网接口ETH2上抓取的数据包如下所示:
 13:05:08.533096 192.168.1.200.1523 > 220.xxx.160.xxx.110: S 950786859:950786859(0) win 16384 <mss 1460,nop,nop,sackOK>
 13:05:08.721846 220.xxx.160.xxx.110 > 192.168.1.200.1523: S 211290961:211290961(0) ack 950786860 win 5840 <mss 1460,nop,nop,sackOK> (DF)
 13:05:08.722447 192.168.1.200.1523 > 220.xxx.160.xxx.110: . ack 1 win 17520
 13:05:12.916219 220.xxx.160.xxx.110 > 192.168.1.200.1523: S 211290961:211290961(0) ack 950786860 win 5840 <mss 1460,nop,nop,sackOK> (DF)
 13:05:12.916742 192.168.1.200.1523 > 220.xxx.160.xxx.110: . ack 1 win 17520
 +++++++++++++++++++++++++++++++++++++++
 TCP三次握手,正常。
 +++++++++++++++++++++++++++++++++++++++
 13:05:43.068194 220.xxx.160.xxx.110 > 192.168.1.200.1523: P 1:49(48) ack 1 win 5840 (DF)
 13:05:43.256898 192.168.1.200.1523 > 220.xxx.160.xxx.110: . ack 49 win 17472
 +++++++++++++++++++++++++++++++++++++++
 连接POP3正常,但是期间有30秒的时差
 +++++++++++++++++++++++++++++++++++++++
 
 3,        测试PC 192.168.1.200上抓取的数据包如下所示:
 
 +++++++++++++++++++++++++++++++++++++++
 只有POP3协议的连接,但是期间有30秒的时差。
 +++++++++++++++++++++++++++++++++++++++
 
 四、        测试环境2-非NAT环境(该环境与防火墙无关)
 环境描述:
 在公司外网出口处直接使用一台笔记本设置为公网地址218.104.68.170上网,具体拓扑如下图所示:
 
 测试环境说明:
 在该环境下,测试PC 218.104.68.170直接以公网地址(未经过地址转换NAT)访问邮件服务器,测试时,我们需要在测试PC 218.104.68.170抓取数据包。
 测试步骤:
 1,        在测试PC 218.104.68.170开启科来网络分析软件,设置过滤条件为只抓取邮件服务器220.xxx.160.xxx的所有数据包并启动抓包;
 2,        在测试PC 218.104.68.170上使用命令:telnet 220.xxx.160.xxx 110,登录邮件服务器的110(收邮件POP3)端口;
 3,        完成。
 测试现象:
 响应时间较长,大概等待30秒左右的时间,才显示登录成功的提示(与用户的描述不符)。
 
 测试结果分析:
 测试PC 218.104.68.170上抓取的数据包如下图所示:
 
 +++++++++++++++++++++++++++++++++++++++
 明显,测试PC 218.104.68.170收到了来自邮件服务器220.xxx.160.xxx的认证请求包,但是测试PC 218.104.68.170并没有响应该数据包,于是邮件服务器220.xxx.160.xxx在尝试重传四次(耗时约30秒)后放弃。
 +++++++++++++++++++++++++++++++++++++++
 
 
 五、        测试环境3-NAT环境(防火墙版本为2.6.06)
 环境描述:
 在公司使用版本为2.6.06的天融信NGFW4000防火墙作为NAT上网设备,内部使用一台笔记本作为测试PC,测试网络拓扑图以及各个IP地址的设置如下图所示:
 
 
 测试环境说明:
 该环境与用户实际环境完全一致,测试时,我们需要在以下三个地方抓取数据包:防火墙外网接口ETH1、防火墙内网接口ETH2、测试PC 192.168.1.200。
 测试步骤:
 1,        使用SecureCRT, 打开两个telnet 192.168.1.1的窗口,分别使用命令:tcpdump –i eth1 host 220.xxx.160.xxx –n(在防火墙eth1口上抓取邮件服务器220.xxx.160.xxx的所有数据包)和tcpdump –i eth2 host 220.xxx.160.xxx –n(在防火墙eth1口上抓取邮件服务器220.xxx.160.xxx的所有数据包)并保存会话;
 2,        在PC 192.168.1.200上开启科来网络分析软件,设置过滤条件为只抓取邮件服务器220.xxx.160.xxx的所有数据包并启动抓包;
 3,        在PC 192.168.1.200上使用telnet 220.xxx.160.xxx 110,登录邮件服务器的110(收邮件POP3)端口;
 4,        完成。
 测试现象:
 很快响应,大概等待1秒左右的时间,显示登录成功的提示(与用户的描述符合)。
 
 测试结果分析:
 1,        防火墙外网接口ETH1上抓取的数据包如下所示:
 13:20:31.130290 218.104.68.171.33246 > 220.xxx.160.xxx.110: S 919068974:919068974(0) win 16384 <mss 1460,nop,nop,sackOK>
 13:20:31.316394 220.xxx.160.xxx.110 > 218.104.68.171.33246: S 1183749795:1183749795(0) ack 919068975 win 5840 <mss 1460,nop,nop,sackOK> (DF)
 13:20:31.317105 218.104.68.171.33246 > 220.xxx.160.xxx.110: . ack 1 win 17520
 +++++++++++++++++++++++++++++++++++++++
 TCP三次握手,正常。
 +++++++++++++++++++++++++++++++++++++++
 13:20:31.506633 220.xxx.160.xxx.38225 > 218.104.68.171.113: S 1188523777:1188523777(0) win 5840 <mss 1460,sackOK,timestamp 310005056[|tcp]> (DF)
 13:20:31.509404 218.104.68.171.113 > 220.xxx.160.xxx.38225: R 0:0(0) ack 1188523778 win 8192
 +++++++++++++++++++++++++++++++++++++++
 在邮件服务器220.xxx.160.xxx向218.104.68.171发出113端口的认证请求时,218.104.68.171立即发送了一个reset报文给邮件服务器220.xxx.160.xxx。
 +++++++++++++++++++++++++++++++++++++++
 
 13:20:31.718650 220.xxx.160.xxx.110 > 218.104.68.171.33246: P 1:49(48) ack 1 win 5840 (DF)
 13:20:31.843281 218.104.68.171.33246 > 220.xxx.160.xxx.110: . ack 49 win 17472
 +++++++++++++++++++++++++++++++++++++++
 紧接着邮件服务器220.xxx.160.xxx回应了218.104.68.171的POP3连接。
 +++++++++++++++++++++++++++++++++++++++
 
 2,        防火墙内网接口ETH2上抓取的数据包如下所示:
 13:20:31.130219 192.168.1.200.1643 > 220.xxx.160.xxx.110: S 919068974:919068974(0) win 16384 <mss 1460,nop,nop,sackOK>
 13:20:31.316430 220.xxx.160.xxx.110 > 192.168.1.200.1643: S 1183749795:1183749795(0) ack 919068975 win 5840 <mss 1460,nop,nop,sackOK> (DF)
 13:20:31.317085 192.168.1.200.1643 > 220.xxx.160.xxx.110: . ack 1 win 17520
 13:20:31.718667 220.xxx.160.xxx.110 > 192.168.1.200.1643: P 1:49(48) ack 1 win 5840 (DF)
 13:20:31.843265 192.168.1.200.1643 > 220.xxx.160.xxx.110: . ack 49 win 17472
 +++++++++++++++++++++++++++++++++++++++
 TCP三次握手、POP3连接全部正常,没有看到AUTH包。
 +++++++++++++++++++++++++++++++++++++++
 
 3,        测试PC 192.168.1.200上抓取的数据包如下所示:
 
 +++++++++++++++++++++++++++++++++++++++
 一切正常,响应时间在1秒之内,没有看到AUTH包。
 +++++++++++++++++++++++++++++++++++++++
 
 六、        分析结论
 通过以上的测试和分析,我们可以发现:
 1,        客户端在使用邮件服务器220.xxx.160.xxx的POP3服务时,邮件服务器会向客户端发送认证请求,该认证过程为邮件服务器主动发出,所以,当客户端是以NAT的方式访问邮件服务器时,该认证请求会直接发送给客户端NAT后的地址,而不是客户端真实的私网地址;
 2,        版本为2.6.40的天融信防火墙对邮件服务器220.xxx.160.xxx发送过来的认证请求包不予理睬,而版本为2.6.06的天融信防火墙对邮件服务器220.xxx.160.xxx发送过来的认证请求包直接发送reset报文重置该认证请求;
 3,该故障与天融信防火墙无直接关系;
 七、        解决方法
 1,        关闭sendmail邮件服务器的POP3认证;
 2,        将天融信防火墙NGFW4000的版本降级为2.6.06;
 八、        遗留问题
 1,        设置sendmail邮件服务器POP3认证机制有无必要?
 我们知道在SMTP时采用认证机制是预防别人使用邮件服务器发送垃圾邮件,那么此处一开始登录邮件服务器时的POP3认证是用来干什么的?
 2,        其他的路由设备在收到这样的认证报文会如何处理?
 用户反馈说,其他品牌的设备在测试环境1下,邮件服务器可以快速响应,那么其他品牌的设备是如何处理该认证报文的呢?像天融信2.6.06版本的防火墙一样吗?
 3,        如何关闭sendmail邮件服务器的POP3认证 ?
 Google、baidu都没有找到相关资料,望高手指点。
 4,        在测试环境2下,测试PC如何设置或开放什么服务才能响应该认证请求?PC为什么没有发送reset报文?
 5,        天融信TOS防火墙可以手工设置 “是否允许防火墙发送reset报文”,在这种环境下,是否可以成功应用?
 有待验证。
 |