查看: 2723|回复: 8

关于省经济信息中心sendmail使用故障的分析解决说明

[复制链接]
发表于 2007-4-14 10:18:26 | 显示全部楼层 |阅读模式
大家请下载附件查看分析过程,很多图片在这显示不出。
本文仅供技术探讨交流,里面的遗留问题还有待各位验证和解答



关于省经济信息中心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报文”,在这种环境下,是否可以成功应用?
有待验证。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×

评分

1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2007-4-16 09:12:19 | 显示全部楼层
靠,我自己顶一下!
有一百多人看,居然没人回应?????????!!!!!!!!
伤~~~~~~~~~~~~~~~~~
回复

使用道具 举报

发表于 2007-4-16 09:20:15 | 显示全部楼层
顶,谢谢楼主分享。

没有看到图片。
先下载文章看一下,然后回来再顶。
回复

使用道具 举报

发表于 2007-4-16 15:57:58 | 显示全部楼层
topsec应该用2.6.38这个版本,2.6.40问题很多~
回复

使用道具 举报

发表于 2007-4-16 17:27:42 | 显示全部楼层
不错。。。很好的东西是要顶的
回复

使用道具 举报

发表于 2007-4-17 10:10:49 | 显示全部楼层
不错 lz 辛苦了 我觉得你写的东西 条理很清晰 牛人啊
回复

使用道具 举报

发表于 2007-4-17 14:27:12 | 显示全部楼层
作者的思路好清晰,好细致啊!

什么时候我才能的到这个水平啊!

学习了
回复

使用道具 举报

发表于 2007-4-24 11:09:38 | 显示全部楼层

好东西啊

谢谢楼住的分享啊
回复

使用道具 举报

发表于 2007-4-24 17:17:02 | 显示全部楼层
想起一个问题。。。干吗要用sendmail....linux下的好的邮件服务器软件很多。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

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