SSH進(jìn)階(二):FTP轉(zhuǎn)發(fā)
2024-07-21 02:37:10
供稿:網(wǎng)友
簡(jiǎn)介
1.FTP協(xié)議簡(jiǎn)介
2.轉(zhuǎn)發(fā)控制連接
3.FTP、防火墻和被動(dòng)模式
4.FTP和網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation)
4.1.客戶端網(wǎng)絡(luò)地址轉(zhuǎn)換問(wèn)題
4.2.服務(wù)器端網(wǎng)絡(luò)地址轉(zhuǎn)換問(wèn)題
5.使用默認(rèn)數(shù)據(jù)傳輸端口
6.轉(zhuǎn)發(fā)數(shù)據(jù)連接
7.結(jié)論
簡(jiǎn)介
有關(guān)SSH,一個(gè)經(jīng)常被問(wèn)起的問(wèn)題是“我怎樣才能使用端口轉(zhuǎn)發(fā)加強(qiáng)FTP安全?”。很不幸,你得到的回答一般非常簡(jiǎn)短,讓你仍然無(wú)所適從。在標(biāo)準(zhǔn)FTP協(xié)議中,所有的數(shù)據(jù)都是明文傳輸?shù)模虼司W(wǎng)絡(luò)上可能存在的嗅探器是一個(gè)極大的威脅。使用嗅探器,攻擊者很輕易獲得你的帳戶和密碼。而在SSH的數(shù)據(jù)傳輸過(guò)程中,所有的數(shù)據(jù)以密文的形式傳輸?shù)模許SH的端口轉(zhuǎn)發(fā)功能能夠很好地保護(hù)的帳戶密碼。
本文具體地解釋你能夠使用SSH和FTP做什么,不能做什么,以及其原因。這里有FTP本身的復(fù)雜性造成的問(wèn)題。除此之外,防火墻和網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation)也給我們制造了不少困難。因?yàn)楝F(xiàn)在防火墻和網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation)已經(jīng)廣泛存在了,因此我們將對(duì)這些情況進(jìn)行具體的討論。不過(guò),由于網(wǎng)絡(luò)環(huán)境千差萬(wàn)別,我們無(wú)法覆蓋所有可能出現(xiàn)的問(wèn)題,這就需要你自己舉一反三了。
1.FTP協(xié)議簡(jiǎn)介
為了便于后面的討論,我們首先簡(jiǎn)要地討論一下FTP協(xié)議(假如對(duì)FTP協(xié)議已經(jīng)有了比較深入的了解,你可以略過(guò)這一節(jié))。大多數(shù)的TCP服務(wù)是使用單個(gè)的連接,一般是客戶向服務(wù)器的一個(gè)周知端口發(fā)起連接,然后使用這個(gè)連接進(jìn)行通訊。但是,F(xiàn)TP協(xié)議卻有所不同,它使用雙向的多個(gè)連接,而且使用的端口很難預(yù)計(jì)。一般,F(xiàn)TP連接包括:
一個(gè)控制連接(control connection)
這個(gè)連接用于傳遞客戶端的命令和服務(wù)器端對(duì)命令的響應(yīng)。它使用服務(wù)器的21端口,生存期是整個(gè)FTP會(huì)話時(shí)間。
幾個(gè)數(shù)據(jù)連接(data connection)
這些連接用于傳輸文件和其它數(shù)據(jù),例如:目錄列表等。這種連接在需要數(shù)據(jù)傳輸時(shí)建立,而一旦數(shù)據(jù)傳輸完畢就關(guān)閉,每次使用的端口也不一定相同。而且,數(shù)據(jù)連接既可能是客戶端發(fā)起的,也可能是服務(wù)器端發(fā)起的。
下面,我們通過(guò)一個(gè)FTP客戶程序看一下控制連接。這里,我們需要使用debug模式(ftp -d)才能顯示客戶發(fā)出的FTP協(xié)議命令。在客戶程序的輸出信息中,這些協(xié)議命令是以--->開(kāi)頭的,例如:
---> USER nixe0n
在命令發(fā)出之后,服務(wù)器會(huì)發(fā)出響應(yīng),響應(yīng)信息以數(shù)字開(kāi)頭,例如:
530 Login incorrect.
下面,我們和FTP服務(wù)器建立一個(gè)連接,使用用戶名nixe0n登錄,在會(huì)話過(guò)程中發(fā)出兩次目錄切換名,一次成功一次失敗,其中黑體是我們的輸入:
ftp -d ftp.linuxaid.com.cn
Connected to ftp.linuxaid.com.cn.
220 ftp.linuxaid.com.cn FTP server ready.
Name (ftp.linuxaid.com.cn:nixe0n): nixe0n
---> USER nixe0n
331 PassWord required for nixe0n.
Password:
---> PASS XXXX
230 User nixe0n logged in.
---> SYST
215 UNIX Type: L8
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd one
---> CWD one
250 CWD command sUCcessful.
ftp> cd tmp
---> CWD tmp
550 tmp: No such file or Directory.
ftp> bye
---> QUIT
221-You have transferred 0 bytes in 0 files.
221-Total traffic for this session was 398 bytes in 0 transfers.
221 Thank you for using the FTP service on ftp.linuxaid.com.cn.
在FTP協(xié)議中,控制連接使用周知端口21,因此使用SSH的標(biāo)準(zhǔn)端口轉(zhuǎn)發(fā)就可以這種連接進(jìn)行很好的安全保護(hù)。
相反,數(shù)據(jù)傳輸連接的目的端口通常實(shí)現(xiàn)無(wú)法知道,因此處理這樣的端口轉(zhuǎn)發(fā)非常困難。FTP協(xié)議使用一個(gè)標(biāo)準(zhǔn)的端口21作為ftp-data端口,但是這個(gè)端口只用于連接的源地址是服務(wù)器端的情況,在這個(gè)端口上根本就沒(méi)有監(jiān)聽(tīng)進(jìn)程。FTP的數(shù)據(jù)連接和控制連接的方向一般是相反的,也就是說(shuō),是服務(wù)器向客戶端發(fā)起一個(gè)用于數(shù)據(jù)傳輸?shù)倪B接。連接的端口是由服務(wù)器端和客戶端協(xié)商確定的。FTP協(xié)議的這個(gè)特征對(duì)SSH轉(zhuǎn)發(fā)以及防火墻和NAT的配置增加了很多困難。
除此之外,還有另外一種FTP模式,叫做被動(dòng)模式(passive mod)。在這種模式下,數(shù)據(jù)連接是由客戶程序發(fā)起的,和剛才討論過(guò)的模式(我們可以叫做主動(dòng)模式)相反。是否采取被動(dòng)模式取決于客戶程序,在ftp命令行中使用passive命令就可以關(guān)閉/打開(kāi)被動(dòng)模式。
在了解了使用SSH轉(zhuǎn)發(fā)FTP連接的一些難點(diǎn)之后,我們將開(kāi)始討論如何解決這些問(wèn)題。
2.轉(zhuǎn)發(fā)控制連接
FTP的控制連接的一端是一個(gè)周知端口21,因此很輕易通過(guò)SSH實(shí)現(xiàn)端口的轉(zhuǎn)發(fā)。通常,需要保護(hù)的FTP服務(wù)器上需要運(yùn)行SSH服務(wù),而且你需要在服務(wù)器上有一個(gè)合法帳戶以便通過(guò)SSH訪問(wèn)FTP服務(wù)。
假設(shè)你已經(jīng)登錄到一臺(tái)主機(jī)名為client的客戶主機(jī),然后想通過(guò)安全的連接登錄到FTP服務(wù)器ftp.linuxaid.com.cn。要轉(zhuǎn)發(fā)FTP控制連接,首先要在client上運(yùn)行一個(gè)SSH端口轉(zhuǎn)發(fā)命令:
[nixe0n@client nixe0n]ssh -L 2001:ftp.linuxaid.com.cn:21 ftp.linuxaid.com.cn
nixe0n@ftp.linuxaid.com.cn's password:
接著,就可以使用被轉(zhuǎn)發(fā)的端口登錄到ftp.linuxaid.com.cn:
[nixe0n@clinet nixe0n]ftp localhost 2001
Connected to localhost
220 ftp.linuxaid.com.cn FTP server ready.
Name:foo
Password:
230 User foo logged in.
ftp>
這里,我們需要注重兩個(gè)非常重要的問(wèn)題:
在本地進(jìn)行轉(zhuǎn)發(fā),可能出現(xiàn)一些錯(cuò)誤。
在確定轉(zhuǎn)發(fā)的目標(biāo)時(shí),建議不要使用localhost作為目標(biāo),因?yàn)橛袝r(shí)使用這種地址可能出現(xiàn)一些莫名其妙的問(wèn)題。假如在你的主機(jī)(client)上,有其它的網(wǎng)絡(luò)接口(例如:eth0),其地址為192.168.0.1,假如你想在本機(jī)上進(jìn)行SSH進(jìn)行FTP端口轉(zhuǎn)發(fā):
[nixe0n@localhost nixe0n]$ssh -L 2001:localhost:21 localhost
nixe0n@localhost's password:
然后,使用ftp命令登錄到FTP服務(wù)器就可能出現(xiàn)一些錯(cuò)誤:
[nixe0n@localhost nixe0n]ftp localhost 2001
Connected to localhost
220 localhost FTP server ready.
Name[localhost:nixe0n]:nixe0n
331 Password required for nixe0n
Password:
230 User nixe0n logged in
ftp>ls
200 PORT command successful.
425 Can't build data connection:Cannot assign requested address.
ftp>
出現(xiàn)這個(gè)問(wèn)題是因?yàn)镕TP服務(wù)器會(huì)試圖通過(guò)回環(huán)地址(lo:127.0.0.1)向client(eth0:192.168.0.1)發(fā)起連接造成的。本機(jī)的回環(huán)接口只能和本機(jī)的其它回環(huán)接口進(jìn)行通訊,假如和其它的網(wǎng)絡(luò)接口(例如:eth0)通訊,就會(huì)返回"address not available"的錯(cuò)誤。
客戶程序需要使用被動(dòng)模式,被動(dòng)模式對(duì)于解決NAT/防火墻造成的一些問(wèn)題很有幫助。Linux系統(tǒng)的ftp命令在默認(rèn)情況下使用這種模式。
3.FTP、防火墻和被動(dòng)模式
前面我們講過(guò),F(xiàn)TP協(xié)議的數(shù)據(jù)傳輸存在兩種模式:主動(dòng)模式和被動(dòng)模式。這兩種模式發(fā)起連接的方向截然相反,主動(dòng)模式是從服務(wù)器端向客戶端發(fā)起;被動(dòng)模式是客戶端向服務(wù)器端發(fā)起連接。但是假如服務(wù)器和客戶之間存在防火墻,主動(dòng)模式經(jīng)常會(huì)引起一些麻煩。設(shè)想,客戶位于防火墻之后,防火墻答應(yīng)所有內(nèi)部向外部的連接通過(guò),但是對(duì)于外部向內(nèi)部發(fā)起的連接卻存在很多限制。在這種情況下,客戶可以正常地和服務(wù)器建立控制連接,而假如使用主動(dòng)模式,ls、put和get等數(shù)據(jù)傳輸命令就很難成功運(yùn)行,因?yàn)榉阑饓?huì)阻塞從服務(wù)器向客戶發(fā)起的數(shù)據(jù)傳輸連接。簡(jiǎn)單包過(guò)濾防火墻把控制連接和數(shù)據(jù)傳輸連接完全分離開(kāi)了,因此很難通過(guò)配置防火墻答應(yīng)主動(dòng)模式的FTP數(shù)據(jù)傳輸連接通過(guò)。假如防火墻答應(yīng)ICMP或者TCP RST報(bào)文通過(guò),客戶程序就會(huì)馬上返回connection refused錯(cuò)誤信息;而假如防火墻只是做簡(jiǎn)單的丟棄處理,會(huì)造成客戶程序掛起一段時(shí)間。
被動(dòng)模式一般可以解決此類問(wèn)題,因?yàn)樵诒粍?dòng)模式下,連接是由客戶端發(fā)起的餓。不過(guò),這要看FTP服務(wù)器和客戶程序是否支持被動(dòng)模式。命令行FTP客戶程序一般使用passive命令關(guān)/開(kāi)被動(dòng)模式。例如:
ftp>passive
Passive mode off
ftp>passive
Passive mode on
假如客戶程序不支持被動(dòng)模式,它就會(huì)返回?Invaild command;假如客戶程序支持被動(dòng)模式,而服務(wù)器不支持,就會(huì)返回"PASV:command not understood",PASV是一個(gè)FTP協(xié)議命令,使服務(wù)器進(jìn)入到被動(dòng)模式。
4.FTP和網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation)
除了簡(jiǎn)單包過(guò)濾防火墻之外,被動(dòng)模式也可以解決使用網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)給FTP造成的一些問(wèn)題。
在轉(zhuǎn)發(fā)報(bào)文之前,進(jìn)行網(wǎng)絡(luò)地址轉(zhuǎn)換的網(wǎng)關(guān)首先會(huì)改變報(bào)文的源地址和目的地址。網(wǎng)絡(luò)地址轉(zhuǎn)換能夠提高網(wǎng)絡(luò)的安全性,有助于解決ip地址資源不足問(wèn)題。
4.1.客戶端網(wǎng)絡(luò)地址轉(zhuǎn)換問(wèn)題
假設(shè)你的FTP客戶主機(jī)位于局域網(wǎng)內(nèi),通過(guò)一個(gè)網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)網(wǎng)關(guān)連入互聯(lián)網(wǎng)。在這種情況下,客戶程序可以毫無(wú)困難地和外部的FTP服務(wù)器建立控制連接,但是,假如