




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第第頁使用SSH進(jìn)行FTP轉(zhuǎn)發(fā)使用SSH進(jìn)行FTP轉(zhuǎn)發(fā)
發(fā)表于:2023-06-23來源::點擊數(shù):標(biāo)簽:
有關(guān)SSH,一個經(jīng)常被問起的問題是“我怎樣才能使用端口轉(zhuǎn)發(fā)加強(qiáng)FTP安全?”。很不幸,你得到的回答一般非常簡短,讓你仍然無所適從。在標(biāo)準(zhǔn)FTP協(xié)議中,所有的數(shù)據(jù)都是明文傳輸?shù)?,因此網(wǎng)絡(luò)上可能存在的嗅探器是一個極大的威脅。使用嗅探器,攻擊者很容易
有關(guān)SSH,一個經(jīng)常被問起的問題是“我怎樣才能使用端口轉(zhuǎn)發(fā)加強(qiáng)FTP安全?”。很不幸,你得到的回答一般非常簡短,讓你仍然無所適從。在標(biāo)準(zhǔn)FTP協(xié)議中,所有的數(shù)據(jù)都是明文傳輸?shù)?,因此網(wǎng)絡(luò)上可能存在的嗅探器是一個極大的威脅。使用嗅探器,攻擊者很容易獲得你的帳戶和密碼。而在SSH的數(shù)據(jù)傳輸過程中,所有的數(shù)據(jù)以密文的形式傳輸?shù)?,所以SSH的端口轉(zhuǎn)發(fā)功能能夠很好地保護(hù)的帳戶密碼。
本文詳細(xì)地解釋你能夠使用SSH和FTP做什么,不能做什么,以及其原因。這里有FTP本身的復(fù)雜性造成的問題。除此之外,防火墻和網(wǎng)絡(luò)地址轉(zhuǎn)換(NetworkAddressTranslation)也給我們制造了不少困難。因為現(xiàn)在防火墻和網(wǎng)絡(luò)地址轉(zhuǎn)換(NetworkAddressTranslation)已經(jīng)廣泛存在了,因此我們將對這些情況進(jìn)行詳細(xì)的討論。不過,由于網(wǎng)絡(luò)環(huán)境千差萬別,我們無法覆蓋所有可能出現(xiàn)的問題,這就需要你自己舉一反三了。
1.FTP協(xié)議簡介
為了便于后面的討論,我們首先簡要地討論一下FTP協(xié)議(如果對FTP協(xié)議已經(jīng)有了比較深入的了解,你可以略過這一節(jié))。大多數(shù)的TCP服務(wù)是使用單個的連接,一般是客戶向服務(wù)器的一個周知端口發(fā)起連接,然后使用這個連接進(jìn)行通訊。但是,F(xiàn)TP協(xié)議卻有所不同,它使用雙向的多個連接,而且使用的端口很難預(yù)計。一般,F(xiàn)TP連接包括:
一個控制連接(controlconnection)
這個連接用于傳遞客戶端的命令和服務(wù)器端對命令的響應(yīng)。它使用服務(wù)器的21端口,生存期是整個FTP會話時間。
幾個數(shù)據(jù)連接(dataconnection)
這些連接用于傳輸文件和其它數(shù)據(jù),例如:目錄列表等。這種連接在需要數(shù)據(jù)傳輸時建立,而一旦數(shù)據(jù)傳輸完畢就關(guān)閉,每次使用的端口也不一定相同。而且,數(shù)據(jù)連接既可能是客戶端發(fā)起的,也可能是服務(wù)器端發(fā)起的。
下面,我們通過一個FTP客戶程序看一下控制連接。這里,我們需要使用debug模式(ftp-d)才能顯示客戶發(fā)出的FTP協(xié)議命令。在客戶程序的輸出信息中,這些協(xié)議命令是以開頭的,例如:
USERnixe0n
在命令發(fā)出之后,服務(wù)器會發(fā)出響應(yīng),響應(yīng)信息以數(shù)字開頭,例如:
530Loginincorrect.
下面,我們和FTP服務(wù)器建立一個連接,使用用戶名nixe0n登錄,在會話過程中發(fā)出兩次目錄切換名,一次成功一次失敗,其中黑體是我們的輸入:
ftp-d
Connectedto.
220FTPserverready.
Name(:nixe0n):nixe0n
USERnixe0n
331Passwordrequiredfornixe0n.
Password:
PASSXXXX
230Usernixe0nloggedin.
SYST
215UNIXType:L8
RemotesystemtypeisUNIX.
Usingbinarymodetotransferfiles.
ftpcdone
CWDone
250CWDcommandsuclearcase/"target="_blank">ccessful.
ftpcdtmp
CWDtmp
550tmp:Nosuchfileordirectory.
ftpbye
QUIT
221-Youhavetransferred0bytesin0files.
221-Totaltrafficforthissessionwas398bytesin0transfers.
221ThankyouforusingtheFTPserviceon.
在FTP協(xié)議中,控制連接使用周知端口21,因此使用SSH的標(biāo)準(zhǔn)端口轉(zhuǎn)發(fā)就可以這種連接進(jìn)行很好的安全保護(hù)。相反,數(shù)據(jù)傳輸連接的目的端口通常實現(xiàn)無法知道,因此處理這樣的端口轉(zhuǎn)發(fā)非常困難。FTP協(xié)議使用一個標(biāo)準(zhǔn)的端口21作為ftp-data端口,但是這個端口只用于連接的源地址是服務(wù)器端的情況,在這個端口上根本就沒有監(jiān)聽進(jìn)程。FTP的數(shù)據(jù)連接和控制連接的方向一般是相反的,也就是說,是服務(wù)器向客戶端發(fā)起一個用于數(shù)據(jù)傳輸?shù)倪B接。連接的端口是由服務(wù)器端和客戶端協(xié)商確定的。FTP協(xié)議的這個特征對SSH轉(zhuǎn)發(fā)以及防火墻和NAT的配置增加了很多困難。
除此之外,還有另外一種FTP模式,叫做被動模式(passivemod)。在這種模式下,數(shù)據(jù)連接是由客戶程序發(fā)起的,和剛才討論過的模式(我們可以叫做主動模式)相反。是否采取被動模式取決于客戶程序,在ftp命令行中使用passive命令就可以關(guān)閉/打開被動模式。
在了解了使用SSH轉(zhuǎn)發(fā)FTP連接的一些難點之后,我們將開始討論如何解決這些問題。
2.轉(zhuǎn)發(fā)控制連接
FTP的控制連接的一端是一個周知端口21,因此很容易通過SSH實現(xiàn)端口的轉(zhuǎn)發(fā)。通常,需要保護(hù)的FTP服務(wù)器上需要運行SSH服務(wù),而且你需要在服務(wù)器上有一個合法帳戶以便通過SSH訪問FTP服務(wù)。
假設(shè)你已經(jīng)登錄到一臺主機(jī)名為client的客戶主機(jī),然后想通過安全的連接登錄到FTP服務(wù)器。要轉(zhuǎn)發(fā)FTP控制連接,首先要在client上運行一個SSH端口轉(zhuǎn)發(fā)命令:
[nixe0n@clientnixe0n]ssh-L2023::21
nixe0n@'spassword:
接著,就可以使用被轉(zhuǎn)發(fā)的端口登錄到:
[nixe0n@nixe0n]ftplocalhost2023
Connectedtolocalhost
220FTPserverready.
Name:foo
Password:
230Userfoologgedin.
ftp
這里,我們需要注意兩個非常重要的問題:
在本地進(jìn)行轉(zhuǎn)發(fā),可能出現(xiàn)一些錯誤。
在確定轉(zhuǎn)發(fā)的目標(biāo)時,建議不要使用localhost作為目標(biāo),因為有時使用這種地址可能出現(xiàn)一些莫名其妙的問題。假如在你的主機(jī)(client)上,有其它的網(wǎng)絡(luò)接口(例如:eth0),其地址為,如果你想在本機(jī)上進(jìn)行SSH進(jìn)行FTP端口轉(zhuǎn)發(fā):
[nixe0n@localhostnixe0n]$ssh-L2023:localhost:21localhost
nixe0n@localhost'spassword:
然后,使用ftp命令登錄到FTP服務(wù)器就可能出現(xiàn)一些錯誤:
[nixe0n@localhostnixe0n]ftplocalhost2023
Connectedtolocalhost
220localhostFTPserverready.
Name[localhost:nixe0n]:nixe0n
331Passwordrequiredfornixe0n
Password:
230Usernixe0nloggedin
ftpls
200PORTcommandsuccessful.
425Can'tbuilddataconnection:Cannotassignrequestedaddress.
ftp
出現(xiàn)這個問題是因為FTP服務(wù)器會試圖通過回環(huán)地址(lo:)向client(eth0:)發(fā)起連接造成的。本機(jī)的回環(huán)接口只能和本機(jī)的其它回環(huán)接口進(jìn)行通訊,如果和其它的網(wǎng)絡(luò)接口(例如:eth0)通訊,就會返回"addressnotavailable"的錯誤。
客戶程序需要使用被動模式,被動模式對于解決NAT/防火墻造成的一些問題很有幫助。Linux系統(tǒng)的ftp命令在默認(rèn)情況下使用這種模式。
3.FTP、防火墻和被動模式
前面我們講過,F(xiàn)TP協(xié)議的數(shù)據(jù)傳輸存在兩種模式:主動模式和被動模式。這兩種模式發(fā)起連接的方向截然相反,主動模式是從服務(wù)器端向客戶端發(fā)起;被動模式是客戶端向服務(wù)器端發(fā)起連接。但是如果服務(wù)器和客戶之間存在防火墻,主動模式經(jīng)常會引起一些麻煩。設(shè)想,客戶位于防火墻之后,防火墻允許所有內(nèi)部向外部的連接通過,但是對于外部向內(nèi)部發(fā)起的連接卻存在很多限制。在這種情況下,客戶可以正常地和服務(wù)器建立控制連接,而如果使用主動模式,ls、put和get等數(shù)據(jù)傳輸命令就很難成功運行,因為防火墻會阻塞從服務(wù)器向客戶發(fā)起的數(shù)據(jù)傳輸連接。簡單包過濾防火墻把控制連接和數(shù)據(jù)傳輸連接完全分離開了,因此很難通過配置防火墻允許主動模式的FTP數(shù)據(jù)傳輸連接通過。如果防火墻允許ICMP或者TCPRST報文通過,客戶程序就會馬上返回connectionrefused錯誤信息;而如果防火墻只是做簡單的丟棄處理,會造成客戶程序掛起一段時間。
被動模式一般可以解決此類問題,因為在被動模式下,連接是由客戶端發(fā)起的餓。不過,這要看FTP服務(wù)器和客戶程序是否支持被動模式。命令行FTP客戶程序一般使用passive命令關(guān)/開被動模式。例如:
ftppassive
Passivemodeoff
ftppassive
Passivemodeon
如果客戶程序不支持被動模式,它就會返回?Invaildcommand;如果客戶程序支持被動模式,而服務(wù)器不支持,就會返回"PASV:commandnotunderstood",PASV是一個FTP協(xié)議命令,使服務(wù)器進(jìn)入到被動模式。
4.FTP和網(wǎng)絡(luò)地址轉(zhuǎn)換(NetworkAddressTranslation)
除了簡單包過濾防火墻之外,被動模式也可以解決使用網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)給FTP造成的一些問題。在轉(zhuǎn)發(fā)報文之前,進(jìn)行網(wǎng)絡(luò)地址轉(zhuǎn)換的網(wǎng)關(guān)首先會改變報文的源地址和目的地址。網(wǎng)絡(luò)地址轉(zhuǎn)換能夠提高網(wǎng)絡(luò)的安全性,有助于解決IP地址資源不足問題。
4.1.客戶端網(wǎng)絡(luò)地址轉(zhuǎn)換問題
假設(shè)你的FTP客戶主機(jī)位于局域網(wǎng)內(nèi),通過一個網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)網(wǎng)關(guān)連入互聯(lián)網(wǎng)。在這種情況下,客戶程序可以毫無困難地和外部的FTP服務(wù)器建立控制連接,但是,如果使用主動模式建立數(shù)據(jù)傳輸連接,還是會出現(xiàn)問題。在主動模式下,客戶程序會忽略NAT網(wǎng)關(guān),直接使用FTP協(xié)議的PORT命令告訴服務(wù)器與一個包含客戶主機(jī)私有地址的套接字建立連接,因此服務(wù)器無法向客戶主機(jī)發(fā)起連接。被動模式也可以很好地解決這個問題。
到此為止,我們羅列了三種需要使用FTP被動模式的情況:控制連接的轉(zhuǎn)發(fā);客戶位于簡單包過濾防火墻之后;和客戶主機(jī)位于NAT之后。在這三種情況下,主動模式可能無法正常使用,因此我們建議盡量使用FTP被動模式。
4.2.服務(wù)器端網(wǎng)絡(luò)地址轉(zhuǎn)換問題
上面我們討論了客戶端NAT問題。如果FTP服務(wù)器位于NAT網(wǎng)關(guān)之后,并且你正在通過SSH轉(zhuǎn)發(fā)FTP控制連接會怎么樣呢?很顯然,這種情況下麻煩更大。
首先,假設(shè)在沒有SSH轉(zhuǎn)發(fā)的情況下,服務(wù)器位于NAT網(wǎng)關(guān)之后會出現(xiàn)什么問題。這與前面討論的情況正好相反,在主動模式下,如果客戶主機(jī)位于NAT網(wǎng)關(guān)之后,客戶程序會使用FTP的PORT命令告訴服務(wù)器自己的私有IP地址,造成服務(wù)器無法建立連接;而如果服務(wù)器位于NAT網(wǎng)關(guān)之后,它就會通過FTP命令PASV告訴客戶程序自己未經(jīng)轉(zhuǎn)換的地址,使客戶程序無法建立連接。在這種情況下,我們會想到可以使用主動模式來解決。但是,這種解決方式實際上沒有多大幫助。在網(wǎng)絡(luò)上,客戶主機(jī)位于NAT網(wǎng)關(guān)之后是非常普遍的,絕大多數(shù)FTP客戶程序的默認(rèn)數(shù)據(jù)傳輸方式都是被動模式的。這樣,會對客戶造成很多不便,對提高服務(wù)器的訪問量非常不利。
因此,需要有其它的方法解決這個問題?,F(xiàn)在的一些FTP服務(wù)器可以人工設(shè)置PASV命令的地址。wu-ftp,/etc/ftpaccess文件中使用如下命令來設(shè)置PASV的地址(具體用法可以參考manftpaccess):
passiveaddress
例如:
passiveaddress2/8
passiveaddress/0
除此之外,還可以使用智能化的NAT網(wǎng)關(guān)解決這個問題。網(wǎng)關(guān)需要能夠識別位于應(yīng)用層的FTP協(xié)議,能夠自動修改FTP協(xié)議的FTP控制報文。但是,如果使用SSH轉(zhuǎn)發(fā)FTP控制連接,因為控制連接被嵌入到了SSH會話通道中,使網(wǎng)關(guān)不能自動修改PASV的地址。這種情況下,你需要使用第一種方法。
5.使用默認(rèn)數(shù)據(jù)傳輸端口
在FTP協(xié)議中,除了被動模式和主動模式之外,還有另外一種數(shù)據(jù)傳輸模式。如果客戶程序既不向服務(wù)器發(fā)出PASV命令也不發(fā)送PORT命令,F(xiàn)TP服務(wù)器就會使用FTP協(xié)議的數(shù)據(jù)傳輸端口(20)和客戶端的控制連接源端口建立一個數(shù)據(jù)傳輸連接。這就需要客戶程序在這個端口上監(jiān)聽。在客戶程序上使用sendport命令可以關(guān)閉FTP協(xié)議的PORT控制指令,然后需要使用passive命令關(guān)閉被動模式。整個過程如下:
客戶程序從本地端口N初始化一個FTP控制連接。
用戶使用sendport命令和passive命令(某些客戶程序在默認(rèn)情況下,被動模式是打開的)關(guān)閉主動模式和被動模式,然后使用數(shù)據(jù)傳輸指令,例如:ls、get等。這樣客戶程序就會在本地端口N上監(jiān)聽FTP服務(wù)緝發(fā)起的數(shù)據(jù)傳輸連接。
服務(wù)器通過TCP例程(例如:getpeername())確定客戶端的端口N。然后從FTP數(shù)據(jù)傳輸端口(20)發(fā)起一個連接。
不過,這種方式有一個最大的缺點就是無法在很短的時間之內(nèi)連續(xù)輸入數(shù)據(jù)傳輸命令,用戶經(jīng)常會遇到"bind:AddressAlreadyinuse等錯誤。這是TCP協(xié)議造成的。因此,這種模式并不常用。但是,它對于解決使用SSH轉(zhuǎn)發(fā)FTP數(shù)據(jù)連接的問題卻很有幫助。
6.轉(zhuǎn)發(fā)數(shù)據(jù)連接
前面我們提到了很多使用SSH轉(zhuǎn)發(fā)FTP數(shù)據(jù)連接會遇到的一些困難?,F(xiàn)在,我們將討論如何使用SSH轉(zhuǎn)發(fā)FTP數(shù)據(jù)連接,這里我們將使用上一節(jié)介紹的數(shù)據(jù)傳輸模式。。注意:下面的討論是針對OpenSSH的。具體實現(xiàn)步驟如下:
在客戶段啟動SSH命令轉(zhuǎn)發(fā)FTP控制連接。使FTP客戶程序和轉(zhuǎn)發(fā)的端口建立連接。這里需要關(guān)閉被動模式。
client$ssh-f-n-L2023:localhost:21serversleep10000
client$ftplocalhost2023
Connectedtolocalhost
220serverFTPserverready.
Password:
230Userresloggedin.
ftpsendport
UseofPORTcmdsoff.
ftppassive
Passivemodeoff.
下面,我們還需要確定FTP客戶的真正和代理數(shù)據(jù)端口。在客戶端,可以使
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三年級口算題集1000道
- 三年級口算題庫大全1000道
- 三年級口算題目匯編1000道
- 加工合同范本英文
- 主人和仆人合同范本
- 倉庫空調(diào)直銷合同范本
- 廠內(nèi)安裝監(jiān)控合同范本
- 2025陜西省建筑安全員B證考試題庫及答案
- 單位電改造合同范本
- 個人交易房合同范本
- 國有土地上房屋征收與補(bǔ)償條例 課件
- 安全文明施工管理(EHS)方案(24頁)
- 水廠項目基于BIM技術(shù)全生命周期解決方案-城市智慧水務(wù)講座課件
- 幼兒園繪本:《閃閃的紅星》 紅色故事
- 三年級學(xué)而思奧數(shù)講義.doc
- 投標(biāo)人基本情況一覽表格
- 鐵路建設(shè)項目施工企業(yè)信用評價辦法(鐵總建設(shè)〔2018〕124號)
- 叉形件加工設(shè)計與分析論文
- 高強(qiáng)螺栓質(zhì)保書
- 市政工程施工進(jìn)度網(wǎng)絡(luò)圖
- 鄒縣1000MW#7機(jī)組最大出力試驗報告
評論
0/150
提交評論