国产一级一区二区_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另类| 麻豆传媒一区二区三区| 在线观看日韩一区| 国产成人免费av在线| 欧美影视一区在线| 欧美日韩国产免费一区二区| 综合欧美亚洲日本| 国产成人在线电影| 欧美一区二区久久| 亚洲一区二区三区四区中文字幕| 国产在线看一区| 欧美一区二区三区日韩视频| 午夜精品一区二区三区免费视频| 日本久久一区二区| 一区二区三区在线播放| 91视频一区二区| 亚洲另类色综合网站| 欧美日韩在线播放| 91老师片黄在线观看| 综合分类小说区另类春色亚洲小说欧美| 裸体在线国模精品偷拍| 盗摄精品av一区二区三区| 亚洲一区二区在线观看视频| 色综合亚洲欧洲| 亚洲日本va在线观看| 色综合久久99| 亚洲成人1区2区| 日韩一区二区三区免费看| 蜜桃视频第一区免费观看| 精品国产免费一区二区三区四区 | 日韩欧美电影一二三| 国产资源在线一区| 亚洲啪啪综合av一区二区三区| 精品综合免费视频观看| 欧美一区二区视频在线观看2020| 国产精品国产三级国产普通话蜜臀| 成人深夜福利app| 亚洲免费资源在线播放| 欧美日韩综合在线| 久久国内精品自在自线400部| 精品蜜桃在线看| 99精品黄色片免费大全| 亚洲成人高清在线| 国产视频一区二区在线观看| 亚洲综合在线电影| 日本不卡一区二区| 久久综合九色综合97婷婷 | 成人黄色免费短视频| 一区二区视频在线看| 欧美一区二区三区公司| 成人av电影在线观看| 天堂一区二区在线| 国产欧美精品一区aⅴ影院 | 日韩精品一卡二卡三卡四卡无卡| 久久精品亚洲精品国产欧美kt∨| 91成人看片片| 床上的激情91.| 三级亚洲高清视频| 一卡二卡欧美日韩| 国产精品女主播av| 欧美一区二区三区精品| 日本道精品一区二区三区| 韩国三级电影一区二区| 亚洲国产日日夜夜| 中文字幕欧美一| 久久久精品tv| 欧美一卡2卡三卡4卡5免费| 91麻豆免费看| 成人av资源下载| 国产在线精品免费av| 日韩电影在线观看一区| 亚洲精选在线视频| 国产精品理论在线观看| 久久久久久亚洲综合| 欧美v亚洲v综合ⅴ国产v| 欧美日韩精品免费观看视频| 色哟哟一区二区三区| 懂色av中文一区二区三区| 狠狠久久亚洲欧美| 韩国一区二区三区| 美女一区二区三区| 美女爽到高潮91| 秋霞av亚洲一区二区三| 免费高清在线视频一区·| 亚洲成人www| 香蕉成人啪国产精品视频综合网| 亚洲精选视频在线| 亚洲一二三区视频在线观看| 亚洲制服丝袜一区| 亚洲一区二区视频在线观看| 亚洲国产综合在线| 日韩精品免费专区| 美女视频第一区二区三区免费观看网站 | 日韩一区二区免费在线电影 | 成人欧美一区二区三区白人 | 国产综合久久久久影院| 水野朝阳av一区二区三区| 天天综合色天天综合| 性久久久久久久久| 日韩电影一区二区三区| 日韩影院精彩在线| 国产一区二区三区免费在线观看| 国产麻豆午夜三级精品| 福利一区二区在线| 99久久综合精品| jlzzjlzz国产精品久久| 国产亚洲欧洲997久久综合| 国产成人午夜视频| 亚欧色一区w666天堂| 欧美三级三级三级| 国产电影一区二区三区| 波多野结衣视频一区| 99久久精品免费观看| 色域天天综合网| 欧美一区二区三区系列电影| 337p日本欧洲亚洲大胆精品| 中文字幕乱码亚洲精品一区| 亚洲欧洲综合另类| 美女视频一区在线观看| 国产成人免费av在线| 日本丶国产丶欧美色综合| 欧美一级欧美一级在线播放| 91一区二区三区在线观看| 亚洲成人你懂的| 久久99九九99精品| 色悠久久久久综合欧美99| 91麻豆精品久久久久蜜臀| 欧美激情在线一区二区| 亚洲成人中文在线| 懂色av一区二区三区免费看| 欧美高清视频在线高清观看mv色露露十八 | 成人综合婷婷国产精品久久蜜臀| 在线国产电影不卡| 久久久久久综合| 亚洲超碰精品一区二区| 97久久超碰国产精品| 日韩欧美激情一区| 亚洲午夜av在线| 成人看片黄a免费看在线| 欧美不卡在线视频| 亚洲h精品动漫在线观看| 成人黄色一级视频| 欧美va在线播放| 视频一区二区国产| 在线观看区一区二| 中文字幕一区视频| 成人小视频免费在线观看| 欧美大片在线观看一区二区| 日韩中文字幕区一区有砖一区| 成人免费高清在线| 中文字幕不卡一区| 国产美女精品人人做人人爽 | 国产福利电影一区二区三区| 精品乱码亚洲一区二区不卡| 亚洲成人在线免费| 欧美亚洲丝袜传媒另类| 亚洲少妇中出一区| 91视频免费播放| 成人免费在线视频| av在线综合网| 欧美国产一区二区在线观看| 国内精品写真在线观看| 精品国产一区二区亚洲人成毛片| 三级在线观看一区二区 | 一区二区三区**美女毛片| 91视频国产资源| 欧美激情在线一区二区三区| 国产99久久久久久免费看农村| 精品国产免费一区二区三区四区| 久久国产精品露脸对白| 日韩精品一区二区三区中文不卡| 日韩电影一区二区三区| 日韩西西人体444www| 麻豆久久久久久| 久久久久国产精品人| 国产白丝精品91爽爽久久| 国产欧美日韩综合精品一区二区| 国产精品自拍毛片| 国产精品久久久久一区| 在线观看日韩av先锋影音电影院| 亚洲成av人在线观看| 欧美日韩一区二区三区免费看 | 欧美久久婷婷综合色| 久久爱www久久做| 欧美经典一区二区三区| 99re视频这里只有精品| 一区二区三区在线观看动漫 | 亚洲mv在线观看| 精品88久久久久88久久久| gogogo免费视频观看亚洲一| 一区二区不卡在线视频 午夜欧美不卡在| 欧美在线视频日韩| 麻豆91在线看| 日韩理论片在线| 日韩欧美一区二区免费| jlzzjlzz亚洲日本少妇| 五月天激情综合| 中文字幕av资源一区|