記一次FTP服務故障分析

一、 概念理解

FTP的主動、被動模式讓人很煩,相信你認真看完下面的描述就不會再煩了!

 

由於歷史原因,FTP服務默認需要有2個端口20(數據端口),21(控制端口)

FTP服務的最初的工作過程是:Client請求Server21端口建立控制連接,然後Server主動用20端口去連Client建立數據連接,結果總是被Client的防火牆拒之門外。(主動模式)

 

Server畢竟是爲大多數人服務的,這樣低三下四又幹不成事固然不行,於是爲了解決服務端被拒之門外的問題,被動模式誕生了:Client請求Server21端口建立控制連接,然後Server告訴Client我開了哪幾個數據端口,你自己來連。(被動模式)

 

2種模式的區別總結爲一句話:前提都是Client去請求Server建立控制連接,不同的是誰來發起數據連接。

 

 

 

二、 故障分析案例

 

FTP服務器公網IP爲:124.x.x.x   內網IP192.168.1.85  服務端爲Vsftpd

故障如圖(連接超時):

wKiom1XrDhOyn4mMAAIBCJ-R8AM143.jpg


 

當我看到這個問題的時候,我並不知所措,也沒有仔細去分析連接的過程,我習慣性的用工具連接了一下,因爲我相信工具某些方面比人更強大,果然我用CuteFTP連接正常,於是我看工具連接的日誌,注意到了一句話:

wKioL1XrEI6Cn61sAACpoQNrSoQ169.jpg


這句話是什麼意思呢?爲什麼要替換呢?

我們來分析一下過程:

  1. ClientServer(公網IP)發出控制連接申請並通過賬號密碼驗證

  2. ClientServer發出PASV命令進入被動模式

  3. ServerClient返回的是監聽IP192.168.1.85)和數據傳輸端口(38*256+252=9980

  4. Client發現返回的IP192.168.1.85)和之前發出的連接(124.x.x.x)不同,Client自行修改IP爲正確的公網IP

  5. Client124.x.x.x9982端口發出數據連接申請,建立數據連接

 

這個分析完之後,我們再回過頭來看用命令連接時出現的問題,不難看出,是卡在了ClientServer端發出數據連接申請的時候了,爲什麼?因爲我們命令模式不是智能的,不會自己將Server返回的內網IP轉成公網IP,所以連192.168.1.85返回超時。

wKioL1XrESDjKlVRAABrv3ZyoaI506.jpg

 

 

然後分析的就是爲什麼會只返回內網IP

原來,公網IP並不是配在該服務端的,而是通過路由進行綁定的,例如雲主機上的“彈性IP”等,所以FTP服務端程序只知道存在一個內網的IP

解決辦法:配置文件寫入pasv_address=公網IP

# man  vsftpd.conf

wKioL1XrEV_CK6XPAAFKqEJYQnA015.jpg


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章