中国青基会
RSS
热门关键字:  None  linux+moodle安装  mac  rhel5  199
当前位置 : Nixsky>UNIX>Solaris>列表

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

来源:bbs.chinaunix.net 作者: 时间:2008-01-10 点击:

  老老实实,脚踏实地,从基础分析,解决ftp绝症案例分享.

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

  点此推荐:http://blog.chinaunix.net/u2/star.php?blogid=12442

  【背景描述】

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

  server-a----firewall.......firewall----server-b(123.123.123.123)

  |

  其他网段机器(办公地)

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

  【问题现象】

  服务器b ftp client -----> 服务器a的ftp server OK

  服务器a ftp client -----> 服务器b的ftp server:卡住鸟!,如下所示

  QUOTE:

  $ ftp -d 123.123.123.123

  Connected to 123.123.123.123.

  220 (vsFTPd 2.0.5) //卡在这里,过了NNN久,大约10分钟

  421 Timeout.

  No control connection for command: Illegal seek

  KERBEROS_V4 rejected as an authentication type

  Name (123.123.123.123:ftpuser): ftpuser //输入后就断开连接了

  No control connection for command: No such file or directory

  Login failed.

  No control connection for command: No such file or directory

  ftp>

  【问题分析】

  首先怀疑可能防火墙配置有问题

  先google一把,找出几篇同样问题的贴,然而没有答案。

  互ping,OK(判断网络连接没问题)

  从server-a telnet到server-b没问题(判断各级防火墙功能没问题)

  server-b自己连自己的ftp服务没问题(判断服务器端没问题)

  与server-b同一防火墙的设备连server-b的ftp服务没问题(判断server-b直连的防火墙没问题)

  其他网段机器连server-b的ftp服务没问题(判断中间防火墙没问题)

  其他网段机器连server-a的ftp服务没问题(判断server-a端的防火墙没问题)

  server-a连与它同一防火墙的设备的ftp服务没问题(判断server-a的ftp客户端工作性没问题)晕死鸟,各种分析到此为止,莫非此题无解?

  一怒之下,把各级防火墙的相关访问策略全部Permit all,结果问题依旧。

  初步判断:问题出在server-a的ftp客户端程序上

  于是在其他网段(办公地)开了个虚拟机,安装了一个和server-a一样版本的操作系统,从虚拟机上再次尝试ftp,问题依旧,果然是server-a的ftp客户端程序问题!

  【问题处理】

  1、开ftp命令的诊断模式,看ftp协议到底在干嘛

  QUOTE:

  $ ftp -d 123.123.123.123

  Connected to 123.123.123.123.

  220 (vsFTPd 2.0.5)

  ---> AUTH GSSAPI //卡在这里,过了NNN久,大约10分钟,看来是客户端发出的"AUTH GSSAPI"命令出了问题

  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 //输入后就断开连接了

  ---> 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>

  2、抓包

  

  

  

  

  看来是ftp客户端程序与ftp服务器端程序在协商AUTH方面出了问题。

  3、man ftp

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

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

  4、让ftp进行不验证的连接

  QUOTE:

  # 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) 新问题出现了,被动模式连接超时

  ftp: connect: Connection timed out

  ftp>

  5、这个问题好办,让ftp使用主动模式即可

  继续看帮助,得知用passive指令看切换主动和被动模式

  要深入了解ftp的主动和被动模式的区别,可参考:http://bbs.chinaunix.net/thread-574966-1-1.html

  QUOTE:

  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

  ....

  【案例总结】

  终于解决了这个号称绝症的问题,总结起来其实很简单:

  1、让客户端程序不使用AUTH进行ftp连接:

  使用ftp的-u选项

  2、用主动模式传递数据:

  连接上后使用passive指令切换主动和被动模式

  但最关键的是在于处理问题的整个分析过程,希望对大家有所帮助。

  独乐乐不如众乐乐,点此推荐与众多CUer分享此文:http://blog.chinaunix.net/u2/star.php?blogid=12442

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册