国产一级一区二区_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久久夜色精品国产_欧美色网一区二区
亚洲精品国产精品国自产在线 | 最新成人av网站| 国产伦精品免费视频 | 红桃视频国产一区| 欧美激情一区在线观看| 国产精品一二三| 亚洲精品视频免费在线观看| 免费亚洲电影在线| 亚洲自拍电影| 国产精品国产三级国产专区53| 亚洲第一色中文字幕| 欧美jjzz| 欧美亚洲视频在线观看| 久久精品一区二区国产| 在线欧美三区| 欧美亚洲不卡| 国产日韩亚洲| 亚洲国产专区校园欧美| 韩国欧美一区| 久久一综合视频| 久久综合激情| 亚洲激情偷拍| 久久午夜精品一区二区| 亚洲日产国产精品| 日韩视频精品在线| 欧美国产视频一区二区| 在线一区亚洲| 黄色亚洲网站| 国产精品视区| 欧美理论在线播放| 久久午夜精品| 亚洲视频狠狠| 亚洲国产日本| 国产一区二区三区日韩| 国产精品盗摄久久久| 久久综合狠狠| 国产精品美女久久久久久2018| 久久久久久自在自线| 欧美日韩成人在线观看| 亚洲综合电影一区二区三区| 国产精品久久午夜夜伦鲁鲁| 美女脱光内衣内裤视频久久网站| 中日韩高清电影网| 亚洲精品美女久久久久| 永久久久久久| 国产视频精品xxxx| 国产免费观看久久| 欧美成人午夜激情视频| 中文国产亚洲喷潮| 午夜免费在线观看精品视频| 最近看过的日韩成人| 亚洲人屁股眼子交8| 亚洲国产99| 欧美日韩不卡一区| 欧美人在线观看| 久久精品在线免费观看| 欧美一区观看| 99国产精品自拍| 免费成人激情视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久不射2019中文字幕| 亚洲尤物在线视频观看| 日韩天堂av| 国产精品久久久久婷婷| 中国日韩欧美久久久久久久久| 国语自产偷拍精品视频偷| 欧美h视频在线| 久久久水蜜桃| 鲁鲁狠狠狠7777一区二区| 久久九九99视频| 亚洲裸体在线观看| 国产麻豆一精品一av一免费| 欧美国产激情二区三区| 国产乱人伦精品一区二区| 亚洲乱码国产乱码精品精可以看| 亚洲清纯自拍| 99riav1国产精品视频| 亚洲精品一区二区在线观看| 亚洲精品乱码| 亚洲一区久久| 欧美在线网站| 久久伊人亚洲| 国产精品va在线| 新片速递亚洲合集欧美合集| 亚洲欧美国产制服动漫| 欧美在线看片a免费观看| 欧美一区二区三区男人的天堂 | 欧美午夜视频一区二区| 欧美日韩午夜剧场| 欧美日韩二区三区| 国产精品捆绑调教| 韩日精品在线| 日韩一二三在线视频播| 欧美一区二区三区播放老司机| 免费一区二区三区| 国产精品丝袜久久久久久app| 亚洲第一在线| 欧美一区二区三区视频| 欧美国产精品日韩| 国产一区二区三区免费在线观看| 亚洲精品视频在线播放| 久久精品免费看| 国产精品二区三区四区| 亚洲国产女人aaa毛片在线| 午夜一区二区三区不卡视频| 欧美精品久久天天躁| 国产真实乱偷精品视频免| 日韩午夜中文字幕| 久久久精品免费视频| 国产精品久久久久久久久久直播 | av72成人在线| 久久久久成人精品| 国产精品久久久久一区二区三区共| 激情偷拍久久| 先锋亚洲精品| 欧美日韩精品在线| 亚洲国产精品123| 久久久午夜视频| 国产日韩专区| 亚洲欧美在线一区| 欧美日韩在线电影| 日韩一区二区精品| 欧美激情一区二区在线| 精品69视频一区二区三区| 午夜精品视频| 国产精品久久久久一区二区| 99精品黄色片免费大全| 欧美大片在线影院| 亚洲国内欧美| 欧美激情按摩| 夜夜夜久久久| 国产精品www.| 亚洲主播在线播放| 国产精品美女久久久免费| 国产精品99久久久久久久女警| 欧美乱大交xxxxx| 一区二区欧美日韩视频| 欧美视频一区二区| 亚洲欧美日韩精品久久| 国产欧美一区二区色老头 | 欧美日韩免费高清| 99视频热这里只有精品免费| 欧美日韩午夜剧场| 亚洲欧美成人| 韩国av一区二区三区四区| 性欧美办公室18xxxxhd| 韩日欧美一区| 欧美精品一区二区三区四区| 国产精品你懂的| 亚洲社区在线观看| 国产精品久久久久一区二区| 亚洲欧美第一页| 国产一区二区三区视频在线观看| 久久精品成人欧美大片古装| 樱桃国产成人精品视频| 欧美国产日本高清在线| 99国产精品视频免费观看一公开| 欧美日韩成人网| 欧美一区免费| 亚洲黄网站黄| 国产精品人成在线观看免费| 久久婷婷一区| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 久久国产一二区| 亚洲国产精品电影| 国产精品成人久久久久| 久久精品卡一| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 国产嫩草影院久久久久| 久久免费观看视频| 日韩视频在线观看| 国模套图日韩精品一区二区| 欧美激情1区2区| 亚洲欧美视频一区| 亚洲激情精品| 国产丝袜一区二区三区| 欧美激情一区二区三区在线| 欧美一区二区三区免费视| 日韩亚洲国产欧美| 在线观看亚洲精品视频| 国产精品色一区二区三区| 欧美成人小视频| 久久不见久久见免费视频1| 日韩视频亚洲视频| 伊人夜夜躁av伊人久久| 国产精品男gay被猛男狂揉视频| 美国成人毛片| 久久久久久日产精品| 午夜精品一区二区三区四区 | 欧美日韩视频专区在线播放| 久久青青草综合| 欧美亚洲专区| 亚洲欧美中日韩| 亚洲一区二区三区高清| 亚洲精品一区中文| 亚洲第一偷拍| 亚洲丶国产丶欧美一区二区三区| 国产婷婷色一区二区三区四区| 国产精品第一区| 国产精品大片wwwwww|