ChinaUnix首页 > 精华文章 > FTP服务器 > 正文

[精彩] 案例分享:服务器间经历N层防火墙后ftp绝症的处理全过程


http://www.chinaunix.net 作者:yuhuohu  发表于:2008-01-18 16:33:56
发表评论】 【查看原文】 【FTP服务器讨论区】【关闭

[font=楷体_GB2312][size=3][color=blue]
老老实实,脚踏实地,从基础分析,解决ftp绝症案例分享.[/color][/size][/font]

[color=Red]在遇到这个问题时,本人也是vsftp菜鸟,在解决问题时逐步成长,希望这个贴能够给新手们提供一个解决问题的思路。[/color]

[align=center][color=Red]点此推荐:[/color][font=宋体][url=http://blog.chinaunix.net/u2/star.php?blogid=12442]http://blog.chinaunix.net/u2/star.php?blogid=12442[/font]
[size=3][/size][/align][size=3]

[color=Blue]【背景描述】[/color][/size]

两台服务器间,间隔了N层防火墙,应用需要通过ftp传递文件。

server-a----firewall.......firewall----server-b(123.123.123.123)
                             |
                其他网段机器(办公地)

服务器位置离办公地很远,到现场难度极大。

[size=3][color=Blue]【问题现象】[/color][/size]
[indent]服务器b ftp client  ----->  服务器a的ftp server OK
服务器a ftp client  ----->  服务器b的ftp server:[color=Red]卡住鸟![/color],如下所示

[/indent]引用:$ ftp 123.123.123.123
Connected to 123.123.123.123.
220 (vsFTPd 2.0.5)                   [color=Magenta]//卡在这里,过了NNN久,大约10分钟[/color]              
421 Timeout.
No control connection for command: Illegal seek
KERBEROS_V4 rejected as an authentication type
Name (123.123.123.123:ftpuser): ftpuser                   [color=Magenta]//输入后就断开连接了[/color]        
No control connection for command: No such file or directory
Login failed.
No control connection for command: No such file or directory
ftp> 



[size=3][color=Blue]【问题分析】[/color][/size]

首先怀疑可能防火墙配置有问题
[list]
[*]先google一把,找出几篇同样问题的贴,然而没有答案。[*]互ping,OK[color=Indigo][color=Purple](判断网络连接没问题)[/color][/color][*]从server-a telnet到server-b没问题[color=Indigo][color=Purple](判断各级防火墙功能没问题)[/color][/color][*]server-b自己连自己的ftp服务没问题[color=Indigo][color=Purple](判断服务器端没问题)[/color][/color][*]与server-b同一防火墙的设备连server-b的ftp服务没问题[color=Purple](判断server-b直连的防火墙没问题)[/color][*]其他网段机器连server-b的ftp服务没问题[color=Purple](判断中间防火墙没问题)[/color][*]其他网段机器连server-a的ftp服务没问题[color=Purple](判断server-a端的防火墙没问题)[/color][*]server-a连与它同一防火墙的设备的ftp服务没问题[color=Purple](判断server-a的ftp客户端工作性没问题)[/color][/list][color=Magenta]晕死鸟,各种分析到此为止,莫非此题无解?[/color]
[color=Magenta]一怒之下,把各级防火墙的相关访问策略全部Permit all,结果问题依旧。[/color]

[color=Red]初步判断:问题出在server-a的ftp客户端程序上[/color]

[list][*][font=楷体_GB2312]于是在其他网段(办公地)开了个虚拟机,安装了一个和server-a一样版本的操作系统,从虚拟机上再次尝试ftp,问题依旧,[color=Red]果然是server-a的ftp客户端程序问题![/color][/font][/list][size=3]
[color=Blue]【问题处理】[/color]

[/size][color=DarkRed]1、开ftp命令的诊断模式,看ftp协议到底在干嘛[/color]
引用:
$ ftp -d 123.123.123.123
Connected to 123.123.123.123.
220 (vsFTPd 2.0.5)
---> AUTH GSSAPI                        [color=Magenta]//卡在这里,过了NNN久,大约10分钟,看来是客户端发出的"AUTH GSSAPI"命令出了问题[/color]
421 Timeout.
---> AUTH KERBEROS_V4
No control connection for command: Illegal seek
KERBEROS_V4 rejected as an authentication type
Name (123.123.123.123:ftpuser): ftpuser                   [color=Magenta]//输入后就断开连接了[/color]      
---> USER ftpuser
No control connection for command: No such file or directory
Login failed.
---> SYST
No control connection for command: No such file or directory
ftp> 


[color=DarkRed]2、抓包
[/color]
[attach]228107[/attach]
看来是ftp客户端程序与ftp服务器端程序在协商AUTH方面出了问题。

[color=DarkRed]3、man ftp[/color]
在server-a的帮助手册页中看到,ftp命令会发出AUTH命令,使用本地所支持的验证类型,尝试与ftp服务器端协商验证问题。如果该验证类型被服务器接受,接着就通过ADAT命令处理相应的验证协议。

看来只要不让ftp命令使用这个功能即可

[color=DarkRed]4、让ftp进行不验证的连接[/color]
引用:
# ftp -d -u 服务器b
Connected to 123.123.123.123.
220 (vsFTPd 2.0.5)
---> SYST
530 Please login with USER and PASS.
ftp> user
(username) itms
---> USER itms
331 Please specify the password.
Password: 
---> PASS XXXX
230 Login successful.
ftp> ls    
---> PASV
227 Entering Passive Mode (123,123,123,123,51,43,54)       [color=Red]新问题出现了,被动模式连接超时[/color]
ftp: connect: Connection timed out
ftp> 


[color=DarkRed]5、这个问题好办,让ftp使用主动模式即可[/color]
继续看帮助,得知用passive指令看切换主动和被动模式

要深入了解ftp的主动和被动模式的区别,可参考:[url=http://bbs.chinaunix.net/thread-574966-1-1.html]http://bbs.chinaunix.net/thread-574966-1-1.html
引用:
ftp> passive
Passive mode off.
ftp> ls
---> PORT 123,123,123,123,87,227
200 PORT command successful. Consider using PASV.
---> LIST
150 Here comes the directory listing.
-rwxr-xr-x    1 ftp      ftp           684 Dec 26 10:38 CAP.env
drwxr-xr-x    7 ftp      ftp           256 Dec 28 03:53 CAP_HOME
....



[size=3][color=Blue]【案例总结】[/color][/size]

[color=Red]终于解决了这个号称绝症的问题,总结起来其实很简单:
1、让客户端程序不使用AUTH进行ftp连接:
[/color][indent][list][color=Red]
[*]使用ftp的-u选项[/color][/list][/indent][color=Red]
2、用主动模式传递数据:
[/color][indent][list][color=Red]
[*]连接上后使用passive指令切换主动和被动模式[/color][/list][/indent][color=Red]
但最关键的是在于处理问题的整个分析过程,希望对大家有所帮助。

[/color][align=center][color=blue]独乐乐不如众乐乐,点此推荐与众多CUer分享此文:[/color][font=宋体][url=http://blog.chinaunix.net/u2/star.php?blogid=12442]http://blog.chinaunix.net/u2/star.php?blogid=12442[/font][/align]

[ 本帖最后由 yuhuohu 于 2008-1-13 21:19 编辑 ]








 ilinch 回复于:2007-12-29 12:06:22

谢谢 支持
有时候我遇到问题 完全摸不着头脑该从那里入手
解决问题的能力是其次 
思路才是最重要的


 plgmelodyboy 回复于:2007-12-29 13:28:52

hei,guy ,the method you gave us is so nice ,think for your kindly


 我爱臭豆腐 回复于:2007-12-29 22:29:16

使用sftp不行吗?还是用sftp方便一些.


 jupiters 回复于:2007-12-29 22:39:32

顶,多谢lz


 yuhuohu 回复于:2007-12-30 23:33:41

引用:原帖由 我爱臭豆腐 于 2007-12-29 22:29 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7788401&ptid=1036009]
使用sftp不行吗?还是用sftp方便一些. 



server-b是人家的生产系统。。。

偶 能动的只能是server-a和server-a的直连防火墙,当初简直是苦死了


 susbin 回复于:2007-12-31 09:48:12

“【案例总结】
...
1、让客户端程序不使用AUTH进行ftp连接:
        * 使用ftp的-u选项
..."

Solaris 上的 FTP Client 好像没有 “-u” 选项。


 yuhuohu 回复于:2007-12-31 17:31:41

引用:原帖由 susbin 于 2007-12-31 09:48 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7790961&ptid=1036009]
“【案例总结】
...
1、让客户端程序不使用AUTH进行ftp连接:
        * 使用ftp的-u选项
..."

Solaris 上的 FTP Client 好像没有 “-u” 选项。 



嘿嘿,高人,果然厉害。server-a是redhat


 死了都要爱 回复于:2008-01-01 22:10:17

好帖子啊,顶起来!!!


 glider126 回复于:2008-01-03 19:01:52

如果是linux的防火墙,开启iptalbes的ftp模块,肯定可以搞定的。


 maike_xiao 回复于:2008-01-03 22:14:30

思路是很重要啊,特别是经验多的工程师跟新手在遇到新问题时表现的更明显,深有感触~!
PS:版主的书还没有拜读,你有多余的可以送我本免费的,:)

[ 本帖最后由 maike_xiao 于 2008-1-3 22:15 编辑 ]


 kinney 回复于:2008-01-04 11:50:10

支持lz,支持bz


 ibearz 回复于:2008-01-13 20:02:24

请问你用什么东西抓得报文?


 yuhuohu 回复于:2008-01-13 21:16:44

引用:原帖由 maike_xiao 于 2008-1-3 22:14 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7804326&ptid=1036009]
思路是很重要啊,特别是经验多的工程师跟新手在遇到新问题时表现的更明显,深有感触~!
PS:版主的书还没有拜读,你有多余的可以送我本免费的,:) 




实在是不送的,老迈抱歉。


 yuhuohu 回复于:2008-01-13 21:17:19

引用:原帖由 ibearz 于 2008-1-13 20:02 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7845539&ptid=1036009]
请问你用什么东西抓得报文? 




没注意,随手抓了一个抓包软件,本来习惯用sniffer的


 twinklezcf 回复于:2008-01-14 09:03:18

从网络到系统,再到软件...都很熟啊...结论就是经验丰富,思路清晰.厉害!


 ibearz 回复于:2008-01-14 10:50:10

引用:原帖由 yuhuohu 于 2008-1-13 21:17 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7845871&ptid=1036009]



没注意,随手抓了一个抓包软件,本来习惯用sniffer的 



哦,我用Wireshark的,不过你那个看上去好像更简洁一点


 yuhuohu 回复于:2008-01-14 13:52:32

特意看了一下:etherdetect packet sniffer


 ibearz 回复于:2008-01-14 16:51:00

引用:原帖由 yuhuohu 于 2008-1-14 13:52 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7848574&ptid=1036009]
特意看了一下:etherdetect packet sniffer 


谢谢


 aximofu 回复于:2008-01-18 16:33:56

思路很清晰,谢谢




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=1036009
转载请注明作者名及原文出处