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

掃一掃
關注微信公眾號

使用SSH進行FTP轉發
2005-11-25   

有關SSH,一個經常被問起的問題是“我怎樣才能使用端口轉發加強FTP安全?”。很不幸,你得到的回答一般非常簡短,讓你仍然無所適從。在標準FTP協議中,所有的數據都是明文傳輸的,因此網絡上可能存在的嗅探器是一個極大的威脅。使用嗅探器,攻擊者很容易獲得你的帳戶和密碼。而在SSH的數據傳輸過程中,所有的數據以密文的形式傳輸的,所以SSH的端口轉發功能能夠很好地保護的帳戶密碼。
本文詳細地解釋你能夠使用SSH和FTP做什么,不能做什么,以及其原因。這里有FTP本身的復雜性造成的問題。除此之外,防火墻和網絡地址轉換(Network Address Translation)也給我們制造了不少困難。因為現在防火墻和網絡地址轉換(Network Address Translation)已經廣泛存在了,因此我們將對這些情況進行詳細的討論。不過,由于網絡環境千差萬別,我們無法覆蓋所有可能出現的問題,這就需要你自己舉一反三了。
1.FTP協議簡介
為了便于后面的討論,我們首先簡要地討論一下FTP協議(如果對FTP協議已經有了比較深入的了解,你可以略過這一節)。大多數的TCP服務是使用單個的連接,一般是客戶向服務器的一個周知端口發起連接,然后使用這個連接進行通訊。但是,FTP協議卻有所不同,它使用雙向的多個連接,而且使用的端口很難預計。一般,FTP連接包括:
一個控制連接(control connection)
這個連接用于傳遞客戶端的命令和服務器端對命令的響應。它使用服務器的21端口,生存期是整個FTP會話時間。
幾個數據連接(data connection)
這些連接用于傳輸文件和其它數據,例如:目錄列表等。這種連接在需要數據傳輸時建立,而一旦數據傳輸完畢就關閉,每次使用的端口也不一定相同。而且,數據連接既可能是客戶端發起的,也可能是服務器端發起的。
下面,我們通過一個FTP客戶程序看一下控制連接。這里,我們需要使用debug模式(ftp -d)才能顯示客戶發出的FTP協議命令。在客戶程序的輸出信息中,這些協議命令是以--->開頭的,例如:
---> USER nixe0n
在命令發出之后,服務器會發出響應,響應信息以數字開頭,例如:
530 Login incorrect.
下面,我們和FTP服務器建立一個連接,使用用戶名nixe0n登錄,在會話過程中發出兩次目錄切換名,一次成功一次失敗,其中黑體是我們的輸入:
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協議中,控制連接使用周知端口21,因此使用SSH的標準端口轉發就可以這種連接進行很好的安全保護。相反,數據傳輸連接的目的端口通常實現無法知道,因此處理這樣的端口轉發非常困難。FTP協議使用一個標準的端口21作為ftp-data端口,但是這個端口只用于連接的源地址是服務器端的情況,在這個端口上根本就沒有監聽進程。FTP的數據連接和控制連接的方向一般是相反的,也就是說,是服務器向客戶端發起一個用于數據傳輸的連接。連接的端口是由服務器端和客戶端協商確定的。FTP協議的這個特征對SSH轉發以及防火墻和NAT的配置增加了很多困難。
除此之外,還有另外一種FTP模式,叫做被動模式(passive mod)。在這種模式下,數據連接是由客戶程序發起的,和剛才討論過的模式(我們可以叫做主動模式)相反。是否采取被動模式取決于客戶程序,在ftp命令行中使用passive命令就可以關閉/打開被動模式。
在了解了使用SSH轉發FTP連接的一些難點之后,我們將開始討論如何解決這些問題。
2.轉發控制連接
FTP的控制連接的一端是一個周知端口21,因此很容易通過SSH實現端口的轉發。通常,需要保護的FTP服務器上需要運行SSH服務,而且你需要在服務器上有一個合法帳戶以便通過SSH訪問FTP服務。
假設你已經登錄到一臺主機名為client的客戶主機,然后想通過安全的連接登錄到FTP服務器ftp.linuxaid.com.cn。要轉發FTP控制連接,首先要在client上運行一個SSH端口轉發命令:
[nixe0n@client nixe0n]ssh -L 2001:ftp.linuxaid.com.cn:21 ftp.linuxaid.com.cn
nixe0n@ftp.linuxaid.com.cn's password:
接著,就可以使用被轉發的端口登錄到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>
這里,我們需要注意兩個非常重要的問題:
在本地進行轉發,可能出現一些錯誤。
在確定轉發的目標時,建議不要使用localhost作為目標,因為有時使用這種地址可能出現一些莫名其妙的問題。假如在你的主機(client)上,有其它的網絡接口(例如:eth0),其地址為192.168.0.1,如果你想在本機上進行SSH進行FTP端口轉發:
[nixe0n@localhost nixe0n]$ssh -L 2001:localhost:21 localhost
nixe0n@localhost's password:
然后,使用ftp命令登錄到FTP服務器就可能出現一些錯誤:
[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>
出現這個問題是因為FTP服務器會試圖通過回環地址(lo:127.0.0.1)向client(eth0:192.168.0.1)發起連接造成的。本機的回環接口只能和本機的其它回環接口進行通訊,如果和其它的網絡接口(例如:eth0)通訊,就會返回"address not available"的錯誤。
客戶程序需要使用被動模式,被動模式對于解決NAT/防火墻造成的一些問題很有幫助。Linux系統的ftp命令在默認情況下使用這種模式。
3.FTP、防火墻和被動模式
前面我們講過,FTP協議的數據傳輸存在兩種模式:主動模式和被動模式。這兩種模式發起連接的方向截然相反,主動模式是從服務器端向客戶端發起;被動模式是客戶端向服務器端發起連接。但是如果服務器和客戶之間存在防火墻,主動模式經常會引起一些麻煩。設想,客戶位于防火墻之后,防火墻允許所有內部向外部的連接通過,但是對于外部向內部發起的連接卻存在很多限制。在這種情況下,客戶可以正常地和服務器建立控制連接,而如果使用主動模式,ls、put和get等數據傳輸命令就很難成功運行,因為防火墻會阻塞從服務器向客戶發起的數據傳輸連接。簡單包過濾防火墻把控制連接和數據傳輸連接完全分離開了,因此很難通過配置防火墻允許主動模式的FTP數據傳輸連接通過。如果防火墻允許ICMP或者TCP RST報文通過,客戶程序就會馬上返回connection refused錯誤信息;而如果防火墻只是做簡單的丟棄處理,會造成客戶程序掛起一段時間。
被動模式一般可以解決此類問題,因為在被動模式下,連接是由客戶端發起的餓。不過,這要看FTP服務器和客戶程序是否支持被動模式。命令行FTP客戶程序一般使用passive命令關/開被動模式。例如:
ftp>passive
Passive mode off
ftp>passive
Passive mode on
如果客戶程序不支持被動模式,它就會返回?Invaild command;如果客戶程序支持被動模式,而服務器不支持,就會返回"PASV:command not understood",PASV是一個FTP協議命令,使服務器進入到被動模式。
4.FTP和網絡地址轉換(Network Address Translation)
除了簡單包過濾防火墻之外,被動模式也可以解決使用網絡地址轉換(NAT)給FTP造成的一些問題。在轉發報文之前,進行網絡地址轉換的網關首先會改變報文的源地址和目的地址。網絡地址轉換能夠提高網絡的安全性,有助于解決IP地址資源不足問題。
4.1.客戶端網絡地址轉換問題
假設你的FTP客戶主機位于局域網內,通過一個網絡地址轉換(NAT)網關連入互聯網。在這種情況下,客戶程序可以毫無困難地和外部的FTP服務器建立控制連接,但是,如果使用主動模式建立數據傳輸連接,還是會出現問題。在主動模式下,客戶程序會忽略NAT網關,直接使用FTP協議的PORT命令告訴服務器與一個包含客戶主機私有地址的套接字建立連接,因此服務器無法向客戶主機發起連接。被動模式也可以很好地解決這個問題。
到此為止,我們羅列了三種需要使用FTP被動模式的情況:控制連接的轉發;客戶位于簡單包過濾防火墻之后;和客戶主機位于NAT之后。在這三種情況下,主動模式可能無法正常使用,因此我們建議盡量使用FTP被動模式。
4.2.服務器端網絡地址轉換問題
上面我們討論了客戶端NAT問題。如果FTP服務器位于NAT網關之后,并且你正在通過SSH轉發FTP控制連接會怎么樣呢?很顯然,這種情況下麻煩更大。
首先,假設在沒有SSH轉發的情況下,服務器位于NAT網關之后會出現什么問題。這與前面討論的情況正好相反,在主動模式下,如果客戶主機位于NAT網關之后,客戶程序會使用FTP的PORT命令告訴服務器自己的私有IP地址,造成服務器無法建立連接;而如果服務器位于NAT網關之后,它就會通過FTP命令PASV告訴客戶程序自己未經轉換的地址,使客戶程序無法建立連接。在這種情況下,我們會想到可以使用主動模式來解決。但是,這種解決方式實際上沒有多大幫助。在網絡上,客戶主機位于NAT網關之后是非常普遍的,絕大多數FTP客戶程序的默認數據傳輸方式都是被動模式的。這樣,會對客戶造成很多不便,對提高服務器的訪問量非常不利。
因此,需要有其它的方法解決這個問題。現在的一些FTP服務器可以人工設置PASV命令的地址。wu-ftp,/etc/ftpaccess文件中使用如下命令來設置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網關解決這個問題。網關需要能夠識別位于應用層的FTP協議,能夠自動修改FTP協議的FTP控制報文。但是,如果使用SSH轉發FTP控制連接,因為控制連接被嵌入到了SSH會話通道中,使網關不能自動修改PASV的地址。這種情況下,你需要使用第一種方法。
5.使用默認數據傳輸端口
在FTP協議中,除了被動模式和主動模式之外,還有另外一種數據傳輸模式。如果客戶程序既不向服務器發出PASV命令也不發送PORT命令,FTP服務器就會使用FTP協議的數據傳輸端口(20)和客戶端的控制連接源端口建立一個數據傳輸連接。這就需要客戶程序在這個端口上監聽。在客戶程序上使用sendport命令可以關閉FTP協議的PORT控制指令,然后需要使用passive命令關閉被動模式。整個過程如下:
客戶程序從本地端口N初始化一個FTP控制連接。
用戶使用sendport命令和passive命令(某些客戶程序在默認情況下,被動模式是打開的)關閉主動模式和被動模式,然后使用數據傳輸指令,例如:ls、get等。這樣客戶程序就會在本地端口N上監聽FTP服務緝發起的數據傳輸連接。
服務器通過TCP例程(例如:getpeername())確定客戶端的端口N。然后從FTP數據傳輸端口(20)發起一個連接。
不過,這種方式有一個最大的缺點就是無法在很短的時間之內連續輸入數據傳輸命令,用戶經常會遇到"bind:Address Already in use等錯誤。這是TCP協議造成的。因此,這種模式并不常用。但是,它對于解決使用SSH轉發FTP數據連接的問題卻很有幫助。
6.轉發數據連接
前面我們提到了很多使用SSH轉發FTP數據連接會遇到的一些困難。現在,我們將討論如何使用SSH轉發FTP數據連接,這里我們將使用上一節介紹的數據傳輸模式。。注意:下面的討論是針對OpenSSH的。具體實現步驟如下:
在客戶段啟動SSH命令轉發FTP控制連接。使FTP客戶程序和轉發的端口建立連接。這里需要關閉被動模式。
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客戶的真正和代理數據端口。在客戶端,可以使用netstat命令:
client$netstat -t|grep 2001
tcp 0 0 client:2001 client:3310 ESTABLISHED
tcp 0 0 client:3310 client:2001 ESTABLISHED
可以看出FTP客戶程序是通過3310端口和SSH連接。
下面我們需要知道服務器端使用的端口,假設現在服務器只為你一個人服務,使用netstat,我們獲得以下輸出:
server$netstat|grep ftp
tcp 0 0 server:8250 server:ftp ESTABLISHED
tcp 0 0 server:ftp server:8250 ESTABLISHED
這樣,我們知道了3310端口被轉發到了服務器端的8250端口。因此,FTP服務器就會認為這是在這種模式下,客戶程序使用的數據傳輸端口(和控制連接共用)。下面,我們只要把這個端口轉發到客戶端就可以了。
在客戶端使用如下命令轉發遠程服務器的8250端口:
clent$ssh -f -n -R8250:localhost:3310 server sleep 10000&
接著,最好在服務器端使用如下命令:
server$ssh -f -n -L8250:localhost:3310 client sleep 10000&
最后,你可以使用FTP數據傳輸命令了。
7.結論
本文其實主要討論了使用SSH進行FTP轉發的一些困難,最后討論的轉發方法其實幾乎沒有多大實用價值:)。

熱詞搜索:

上一篇:如何使用SSH的Port Forwarding加密不安全的服務
下一篇:SSH 實戰

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
成人免费在线视频| 日韩一区中文字幕| 欧美系列亚洲系列| 在线看国产日韩| 制服.丝袜.亚洲.中文.综合| 在线一区二区三区四区| 久久丁香综合五月国产三级网站| 亚洲午夜久久久久久久久久久| 亚洲国产一区二区a毛片| 欧美日韩一区久久| 国产亚洲综合性久久久影院| 亚洲欧美日韩久久| 久久国产视频网| 久久久久国产精品厨房| 亚洲亚洲人成综合网络| 337p亚洲精品色噜噜| 国产激情一区二区三区四区| 精品视频在线看| 蜜桃视频在线观看一区二区| 一区二区三区视频在线看| 国产一区二区剧情av在线| 精品国产一区二区三区四区四 | 成人av片在线观看| 一本久久a久久精品亚洲| 欧美少妇xxx| 日本欧美一区二区三区乱码 | 欧美在线免费视屏| 久久99深爱久久99精品| 亚洲欧美另类在线| www久久精品| 久久99精品国产麻豆不卡| 99久久99久久免费精品蜜臀| 欧美三级电影网| 国产激情一区二区三区桃花岛亚洲| 麻豆精品一区二区| 欧美精品免费视频| 成人ar影院免费观看视频| 欧美老肥妇做.爰bbww| 欧美一级久久久久久久大片| 中文字幕一区三区| 日韩欧美成人午夜| 麻豆精品视频在线观看免费| 国产精品欧美极品| 国产精品亚洲一区二区三区在线| 狠狠色伊人亚洲综合成人| 国产亚洲成年网址在线观看| 91久久精品午夜一区二区| 精品一区二区国语对白| 日韩精品五月天| 欧美岛国在线观看| 欧美久久久久久久久中文字幕| av在线播放一区二区三区| 亚洲视频一二三区| 欧美欧美午夜aⅴ在线观看| 免费高清在线视频一区·| 欧美tickling网站挠脚心| 韩国一区二区三区| 美腿丝袜一区二区三区| 免费美女久久99| 日本成人在线视频网站| 免费在线观看日韩欧美| 麻豆中文一区二区| 经典三级视频一区| 粉嫩13p一区二区三区| 亚洲国产一区二区在线播放| 洋洋成人永久网站入口| 亚洲精选视频在线| 日韩美女视频一区二区在线观看| 在线91免费看| 日韩欧美国产三级电影视频| 欧美精品一区二区三| 国产午夜精品久久久久久免费视| 日本一区二区动态图| 99久久精品国产一区| 精品国精品国产| 国产日韩v精品一区二区| 在线看国产日韩| 欧美精品在线观看播放| 日韩美女天天操| 亚洲欧洲精品一区二区三区| 亚洲另类一区二区| 日韩极品在线观看| 国产精品主播直播| 91国偷自产一区二区开放时间| 欧美性感一类影片在线播放| 日韩欧美激情四射| 亚洲欧洲av色图| 天堂va蜜桃一区二区三区| 狠狠v欧美v日韩v亚洲ⅴ| 91亚洲精品久久久蜜桃| 国产一区二区三区不卡在线观看 | 亚洲无线码一区二区三区| 美女在线观看视频一区二区| 高清不卡在线观看| 欧美美女bb生活片| 中文字幕欧美一区| 蜜臀精品一区二区三区在线观看| 国产91丝袜在线播放九色| 7777精品伊人久久久大香线蕉经典版下载 | 136国产福利精品导航| 午夜一区二区三区在线观看| 欧美色图天堂网| 欧美刺激脚交jootjob| 亚洲女爱视频在线| 国产精华液一区二区三区| 7777女厕盗摄久久久| 亚洲综合精品自拍| 亚洲日本一区二区| 喷水一区二区三区| 色综合色狠狠综合色| 国产丝袜美腿一区二区三区| 一区二区三区欧美久久| 波多野结衣一区二区三区| 精品国产欧美一区二区| 亚洲成人精品影院| 91老师片黄在线观看| 国产精品久久午夜| 亚洲视频在线观看三级| 国产美女精品在线| 欧美一区二区三区四区在线观看| 欧美成人精品1314www| 亚洲国产精品一区二区www| 国产·精品毛片| 国产午夜精品久久久久久久 | 6080国产精品一区二区| 一二三四社区欧美黄| 欧美xxxx老人做受| 五月天一区二区| 欧美裸体一区二区三区| 亚洲18色成人| 在线播放国产精品二区一二区四区| 亚洲综合一区在线| 欧美性色综合网| 亚洲影院久久精品| 欧美日韩午夜影院| 日韩在线播放一区二区| 91精品午夜视频| 精品一区二区久久| 中文字幕+乱码+中文字幕一区| 丁香一区二区三区| 国产精品初高中害羞小美女文| 99久久精品国产网站| 一区二区成人在线视频 | 99久久久久久99| 亚洲精品菠萝久久久久久久| 欧美日韩一区小说| 激情综合色播激情啊| 国产欧美日韩不卡| 色先锋资源久久综合| 午夜精品久久久久久久久| 欧美成人女星排行榜| av亚洲产国偷v产偷v自拍| 亚洲免费观看高清完整版在线观看| 99精品国产热久久91蜜凸| 亚洲成人av中文| 精品国产乱码久久久久久久久| 大白屁股一区二区视频| 欧美三片在线视频观看| 天天av天天翘天天综合网| 亚洲精品在线免费观看视频| 大胆欧美人体老妇| 午夜精品视频在线观看| 国产日韩精品一区二区三区在线| 91免费版pro下载短视频| 日韩在线一二三区| 国产无遮挡一区二区三区毛片日本| 91视频在线看| 久久国产精品99久久人人澡| 1区2区3区国产精品| 日韩欧美国产一区二区三区| 色婷婷久久久亚洲一区二区三区 | 欧美高清激情brazzers| 国产精品自在在线| 日本色综合中文字幕| 中文字幕人成不卡一区| 日韩欧美一区二区久久婷婷| 99久久综合色| 极品瑜伽女神91| 婷婷中文字幕一区三区| 国产精品麻豆视频| 欧美xxxx老人做受| 在线成人午夜影院| 在线观看日韩一区| www.亚洲色图.com| 国产美女一区二区| 男人的j进女人的j一区| 伊人性伊人情综合网| 亚洲国产高清aⅴ视频| 欧美不卡一区二区三区| 精品视频在线免费看| 91浏览器入口在线观看| 99久久er热在这里只有精品66| 国产精品1024久久| 国产精品亚洲第一区在线暖暖韩国| 亚洲成人午夜电影| 亚洲另类在线视频| 一区二区三区在线免费观看| 亚洲欧美综合网| 亚洲视频中文字幕| 亚洲欧洲在线观看av|