国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關(guān)注微信公眾號(hào)

使用SSH進(jìn)行FTP轉(zhuǎn)發(fā)
2005-11-25   

有關(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ù)的帳戶密碼。
本文詳細(xì)地解釋你能夠使用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)行詳細(xì)的討論。不過(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è)想,客戶位于防火墻之后,防火墻允許所有內(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ò)配置防火墻允許主動(dòng)模式的FTP數(shù)據(jù)傳輸連接通過(guò)。如果防火墻允許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ù)器建立控制連接,但是,如果使用主動(dòng)模式建立數(shù)據(jù)傳輸連接,還是會(huì)出現(xiàn)問(wèn)題。在主動(dòng)模式下,客戶程序會(huì)忽略NAT網(wǎng)關(guān),直接使用FTP協(xié)議的PORT命令告訴服務(wù)器與一個(gè)包含客戶主機(jī)私有地址的套接字建立連接,因此服務(wù)器無(wú)法向客戶主機(jī)發(fā)起連接。被動(dòng)模式也可以很好地解決這個(gè)問(wèn)題。
到此為止,我們羅列了三種需要使用FTP被動(dòng)模式的情況:控制連接的轉(zhuǎn)發(fā);客戶位于簡(jiǎn)單包過(guò)濾防火墻之后;和客戶主機(jī)位于NAT之后。在這三種情況下,主動(dòng)模式可能無(wú)法正常使用,因此我們建議盡量使用FTP被動(dòng)模式。
4.2.服務(wù)器端網(wǎng)絡(luò)地址轉(zhuǎn)換問(wèn)題
上面我們討論了客戶端NAT問(wèn)題。如果FTP服務(wù)器位于NAT網(wǎng)關(guān)之后,并且你正在通過(guò)SSH轉(zhuǎn)發(fā)FTP控制連接會(huì)怎么樣呢?很顯然,這種情況下麻煩更大。
首先,假設(shè)在沒(méi)有SSH轉(zhuǎn)發(fā)的情況下,服務(wù)器位于NAT網(wǎng)關(guān)之后會(huì)出現(xiàn)什么問(wèn)題。這與前面討論的情況正好相反,在主動(dòng)模式下,如果客戶主機(jī)位于NAT網(wǎng)關(guān)之后,客戶程序會(huì)使用FTP的PORT命令告訴服務(wù)器自己的私有IP地址,造成服務(wù)器無(wú)法建立連接;而如果服務(wù)器位于NAT網(wǎng)關(guān)之后,它就會(huì)通過(guò)FTP命令PASV告訴客戶程序自己未經(jīng)轉(zhuǎn)換的地址,使客戶程序無(wú)法建立連接。在這種情況下,我們會(huì)想到可以使用主動(dòng)模式來(lái)解決。但是,這種解決方式實(shí)際上沒(méi)有多大幫助。在網(wǎng)絡(luò)上,客戶主機(jī)位于NAT網(wǎng)關(guān)之后是非常普遍的,絕大多數(shù)FTP客戶程序的默認(rèn)數(shù)據(jù)傳輸方式都是被動(dòng)模式的。這樣,會(huì)對(duì)客戶造成很多不便,對(duì)提高服務(wù)器的訪問(wèn)量非常不利。
因此,需要有其它的方法解決這個(gè)問(wèn)題。現(xiàn)在的一些FTP服務(wù)器可以人工設(shè)置PASV命令的地址。wu-ftp,/etc/ftpaccess文件中使用如下命令來(lái)設(shè)置PASV的地址(具體用法可以參考man ftpaccess):
passive address
例如:
passive address 10.0.0.32 10.0.0.0/8
passive address 192.168.1.6 0.0.0.0/0
除此之外,還可以使用智能化的NAT網(wǎng)關(guān)解決這個(gè)問(wèn)題。網(wǎng)關(guān)需要能夠識(shí)別位于應(yīng)用層的FTP協(xié)議,能夠自動(dòng)修改FTP協(xié)議的FTP控制報(bào)文。但是,如果使用SSH轉(zhuǎn)發(fā)FTP控制連接,因?yàn)榭刂七B接被嵌入到了SSH會(huì)話通道中,使網(wǎng)關(guān)不能自動(dòng)修改PASV的地址。這種情況下,你需要使用第一種方法。
5.使用默認(rèn)數(shù)據(jù)傳輸端口
在FTP協(xié)議中,除了被動(dòng)模式和主動(dòng)模式之外,還有另外一種數(shù)據(jù)傳輸模式。如果客戶程序既不向服務(wù)器發(fā)出PASV命令也不發(fā)送PORT命令,F(xiàn)TP服務(wù)器就會(huì)使用FTP協(xié)議的數(shù)據(jù)傳輸端口(20)和客戶端的控制連接源端口建立一個(gè)數(shù)據(jù)傳輸連接。這就需要客戶程序在這個(gè)端口上監(jiān)聽(tīng)。在客戶程序上使用sendport命令可以關(guān)閉FTP協(xié)議的PORT控制指令,然后需要使用passive命令關(guān)閉被動(dòng)模式。整個(gè)過(guò)程如下:
客戶程序從本地端口N初始化一個(gè)FTP控制連接。
用戶使用sendport命令和passive命令(某些客戶程序在默認(rèn)情況下,被動(dòng)模式是打開(kāi)的)關(guān)閉主動(dòng)模式和被動(dòng)模式,然后使用數(shù)據(jù)傳輸指令,例如:ls、get等。這樣客戶程序就會(huì)在本地端口N上監(jiān)聽(tīng)FTP服務(wù)緝發(fā)起的數(shù)據(jù)傳輸連接。
服務(wù)器通過(guò)TCP例程(例如:getpeername())確定客戶端的端口N。然后從FTP數(shù)據(jù)傳輸端口(20)發(fā)起一個(gè)連接。
不過(guò),這種方式有一個(gè)最大的缺點(diǎn)就是無(wú)法在很短的時(shí)間之內(nèi)連續(xù)輸入數(shù)據(jù)傳輸命令,用戶經(jīng)常會(huì)遇到"bind:Address Already in use等錯(cuò)誤。這是TCP協(xié)議造成的。因此,這種模式并不常用。但是,它對(duì)于解決使用SSH轉(zhuǎn)發(fā)FTP數(shù)據(jù)連接的問(wèn)題卻很有幫助。
6.轉(zhuǎn)發(fā)數(shù)據(jù)連接
前面我們提到了很多使用SSH轉(zhuǎn)發(fā)FTP數(shù)據(jù)連接會(huì)遇到的一些困難。現(xiàn)在,我們將討論如何使用SSH轉(zhuǎn)發(fā)FTP數(shù)據(jù)連接,這里我們將使用上一節(jié)介紹的數(shù)據(jù)傳輸模式。。注意:下面的討論是針對(duì)OpenSSH的。具體實(shí)現(xiàn)步驟如下:
在客戶段啟動(dòng)SSH命令轉(zhuǎn)發(fā)FTP控制連接。使FTP客戶程序和轉(zhuǎn)發(fā)的端口建立連接。這里需要關(guān)閉被動(dòng)模式。
client$ssh -f -n -L2001:localhost:21 server sleep 10000&
client$ ftp localhost 2001
Connected to localhost
220 server FTP server ready.
Password:
230 User res logged in.
ftp> sendport
Use of PORT cmds off.
ftp> passive
Passive mode off.
下面,我們還需要確定FTP客戶的真正和代理數(shù)據(jù)端口。在客戶端,可以使用netstat命令:
client$netstat -t|grep 2001
tcp 0 0 client:2001 client:3310 ESTABLISHED
tcp 0 0 client:3310 client:2001 ESTABLISHED
可以看出FTP客戶程序是通過(guò)3310端口和SSH連接。
下面我們需要知道服務(wù)器端使用的端口,假設(shè)現(xiàn)在服務(wù)器只為你一個(gè)人服務(wù),使用netstat,我們獲得以下輸出:
server$netstat|grep ftp
tcp 0 0 server:8250 server:ftp ESTABLISHED
tcp 0 0 server:ftp server:8250 ESTABLISHED
這樣,我們知道了3310端口被轉(zhuǎn)發(fā)到了服務(wù)器端的8250端口。因此,F(xiàn)TP服務(wù)器就會(huì)認(rèn)為這是在這種模式下,客戶程序使用的數(shù)據(jù)傳輸端口(和控制連接共用)。下面,我們只要把這個(gè)端口轉(zhuǎn)發(fā)到客戶端就可以了。
在客戶端使用如下命令轉(zhuǎn)發(fā)遠(yuǎn)程服務(wù)器的8250端口:
clent$ssh -f -n -R8250:localhost:3310 server sleep 10000&
接著,最好在服務(wù)器端使用如下命令:
server$ssh -f -n -L8250:localhost:3310 client sleep 10000&
最后,你可以使用FTP數(shù)據(jù)傳輸命令了。
7.結(jié)論
本文其實(shí)主要討論了使用SSH進(jìn)行FTP轉(zhuǎn)發(fā)的一些困難,最后討論的轉(zhuǎn)發(fā)方法其實(shí)幾乎沒(méi)有多大實(shí)用價(jià)值:)。

熱詞搜索:

上一篇:如何使用SSH的Port Forwarding加密不安全的服務(wù)
下一篇:SSH 實(shí)戰(zhàn)

分享到: 收藏
主站蜘蛛池模板: 沐川县| 林州市| 陵川县| 县级市| 石台县| 磐安县| 灵武市| 南康市| 方山县| 清水河县| 溧水县| 金坛市| 安溪县| 盐山县| 鄂伦春自治旗| 台东县| 龙州县| 沭阳县| 佳木斯市| 铜川市| 山阴县| 衡水市| 安康市| 嵊泗县| 西昌市| 收藏| 凤庆县| 南通市| 精河县| 论坛| 铅山县| 新巴尔虎右旗| 梧州市| 蒲城县| 舞钢市| 义乌市| 海丰县| 嘉峪关市| 河南省| 涟源市| 佛教|