大家请下载附件查看分析过程,很多图片在这显示不出。
本文仅供技术探讨交流,里面的遗留问题还有待各位验证和解答
关于省经济信息中心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报文”,在这种环境下,是否可以成功应用?
有待验证。 |