案例分享:伺服器間經歷N層防火牆后ftp絕症的處理全過程
哥們,看帖要推薦啊,點這裡:em27:
老老實實,腳踏實地,從基礎分析,解決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:卡住鳥!,如下所示
$ ftp 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協議到底在幹嘛
$ 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進行不驗證的連接
# 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
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
[ 本帖最後由 yuhuohu 於 2009-7-4 20:35 編輯 ]
《解決方案》
謝謝 支持
有時候我遇到問題 完全摸不著頭腦該從那裡入手
解決問題的能力是其次
思路才是最重要的
《解決方案》
DD
hei,guy ,the method you gave us is so nice ,think for your kindly
《解決方案》
使用sftp不行嗎?還是用sftp方便一些.
《解決方案》
頂,多謝lz
《解決方案》
原帖由 我愛臭豆腐 於 2007-12-29 22:29 發表 http://bbs.chinaunix.net/images/common/back.gif
使用sftp不行嗎?還是用sftp方便一些.
server-b是人家的生產系統。。。
偶 能動的只能是server-a和server-a的直連防火牆,當初簡直是苦死了
《解決方案》
「【案例總結】
...
1、讓客戶端程序不使用AUTH進行ftp連接:
* 使用ftp的-u選項
..."
Solaris 上的 FTP Client 好像沒有 「-u」 選項。
《解決方案》
原帖由 susbin 於 2007-12-31 09:48 發表 http://bbs.chinaunix.net/images/common/back.gif
「【案例總結】
...
1、讓客戶端程序不使用AUTH進行ftp連接:
* 使用ftp的-u選項
..."
Solaris 上的 FTP Client 好像沒有 「-u」 選項。
嘿嘿,高人,果然厲害。server-a是redhat
《解決方案》
好帖子啊,頂起來!!!
《解決方案》
你的防火牆是linux做的嗎?