熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

SSH進階(二):FTP轉發

2013-11-13 16:06:56  來源: Oracle 

  簡介
  FTP協議簡介
  轉發控制連接
  FTP防火牆和被動模式
  FTP和網絡地址轉換(Network Address Translation)
  
  客戶端網絡地址轉換問題
  服務器端網絡地址轉換問題
  
  使用默認數據傳輸端口
  轉發數據連接
  結論
  
  簡介
  
  有關SSH一個經常被問起的問題是我怎樣才能使用端口轉發加強FTP安全?很不幸你得到的回答一般非常簡短讓你仍然無所適從在標准FTP協議中所有的數據都是明文傳輸的因此網絡上可能存在的嗅探器是一個極大的威脅使用嗅探器攻擊者很容易獲得你的帳戶和密碼而在SSH的數據傳輸過程中所有的數據以密文的形式傳輸的所以SSH的端口轉發功能能夠很好地保護的帳戶密碼
  
  本文詳細地解釋你能夠使用SSH和FTP做什麼不能做什麼以及其原因這裡有FTP本身的復雜性造成的問題除此之外防火牆和網絡地址轉換(Network Address Translation)也給我們制造了不少困難因為現在防火牆和網絡地址轉換(Network Address Translation)已經廣泛存在了因此我們將對這些情況進行詳細的討論不過由於網絡環境千差萬別我們無法覆蓋所有可能出現的問題這就需要你自己舉一反三了
  
  FTP協議簡介
  
  為了便於後面的討論我們首先簡要地討論一下FTP協議(如果對FTP協議已經有了比較深入的了解你可以略過這一節)大多數的TCP服務是使用單個的連接一般是客戶向服務器的一個周知端口發起連接然後使用這個連接進行通訊但是FTP協議卻有所不同它使用雙向的多個連接而且使用的端口很難預計一般FTP連接包括
  
  一個控制連接(control connection)
  
  這個連接用於傳遞客戶端的命令和服務器端對命令的響應它使用服務器的端口生存期是整個FTP會話時間
  
  幾個數據連接(data connection)
  
  這些連接用於傳輸文件和其它數據例如目錄列表等這種連接在需要數據傳輸時建立而一旦數據傳輸完畢就關閉每次使用的端口也不一定相同而且數據連接既可能是客戶端發起的也可能是服務器端發起的
  
  下面我們通過一個FTP客戶程序看一下控制連接這裡我們需要使用debug模式(ftp d)才能顯示客戶發出的FTP協議命令在客戶程序的輸出信息中這些協議命令是以>開頭的例如
  
  > USER nixen
  
  在命令發出之後服務器會發出響應響應信息以數字開頭例如
  
   Login incorrect
  
  下面我們和FTP服務器建立一個連接使用用戶名nixen登錄在會話過程中發出兩次目錄切換名一次成功一次失敗其中黑體是我們的輸入
  
  ftp d
  Connected to
   FTP server ready
  Name (:nixen): nixen
  > USER nixen
   Password required for nixen
  Password:
  > PASS XXXX
   User nixen logged in
  > SYST
   UNIX Type: L
  Remote system type is UNIX
  Using binary mode to transfer files
  ftp> cd one
  > CWD one
   CWD command successful
  ftp> cd tmp
  > CWD tmp
   tmp: No such file or directory
  ftp> bye
  > QUIT
  You have transferred bytes in files
  Total traffic for this session was bytes in transfers
   Thank you for using the FTP service on
  
  在FTP協議中控制連接使用周知端口因此使用SSH的標准端口轉發就可以這種連接進行很好的安全保護相反數據傳輸連接的目的端口通常實現無法知道因此處理這樣的端口轉發非常困難FTP協議使用一個標准的端口作為ftpdata端口但是這個端口只用於連接的源地址是服務器端的情況在這個端口上根本就沒有監聽進程FTP的數據連接和控制連接的方向一般是相反的也就是說是服務器向客戶端發起一個用於數據傳輸的連接連接的端口是由服務器端和客戶端協商確定的FTP協議的這個特征對SSH轉發以及防火牆和NAT的配置增加了很多困難
  
  除此之外還有另外一種FTP模式叫做被動模式(passive mod)在這種模式下數據連接是由客戶程序發起的和剛才討論過的模式(我們可以叫做主動模式)相反是否采取被動模式取決於客戶程序在ftp命令行中使用passive命令就可以關閉/打開被動模式
  
  在了解了使用SSH轉發FTP連接的一些難點之後我們將開始討論如何解決這些問題
  
  轉發控制連接
  
  FTP的控制連接的一端是一個周知端口因此很容易通過SSH實現端口的轉發通常需要保護的FTP服務器上需要運行SSH服務而且你需要在服務器上有一個合法帳戶以便通過SSH訪問FTP服務
  
  假設你已經登錄到一台主機名為client的客戶主機然後想通過安全的連接登錄到FTP服務器要轉發FTP控制連接首先要在client上運行一個SSH端口轉發命令
  
  [nixen@client nixen]ssh L ::
  nixcns password:
  
  接著就可以使用被轉發的端口登錄到
  
  [nixen@clinet nixen]ftp localhost
  Connected to localhost
   FTP server ready
  Name:foo
  Password:
   User foo logged in
  ftp>
  
  這裡我們需要注意兩個非常重要的問題
  
  在本地進行轉發可能出現一些錯誤
  
  在確定轉發的目標時建議不要使用localhost作為目標因為有時使用這種地址可能出現一些莫名其妙的問題假如在你的主機(client)上有其它的網絡接口(例如eth)其地址為如果你想在本機上進行SSH進行FTP端口轉發
  
  [nixen@localhost nixen]$ssh L :localhost: localhost
  nixen@localhosts password:
  
  然後使用ftp命令登錄到FTP服務器就可能出現一些錯誤
  
  [nixen@localhost nixen]ftp localhost
  Connected to localhost
   localhost FTP server ready
  Name[localhost:nixen]:nixen
   Password required for nixen
  Password:
   User nixen logged in
  ftp>ls
   PORT command successful
   Cant build data connection:Cannot assign requested address
  ftp>
  
  出現這個問題是因為FTP服務器會試圖通過回環地址(lo:)向client(eth:)發起連接造成的本機的回環接口只能和本機的其它回環接口進行通訊如果和其它的網絡接口(例如eth)通訊就會返回address not available的錯誤
  
  客戶程序需要使用被動模式被動模式對於解決NAT/防火牆造成的一些問題很有幫助Linux系統的ftp命令在默認情況下使用這種模式
  
  FTP防火牆和被動模式
  
  前面我們講過FTP協議的數據傳輸存在兩種模式主動模式和被動模式這兩種模式發起連接的方向截然相反主動模式是從服務器端向客戶端發起被動模式是客戶端向服務器端發起連接但是如果服務器和客戶之間存在防火牆主動模式經常會引起一些麻煩設想客戶位於防火牆之後防火牆允許所有內部向外部的連接通過但是對於外部向內部發起的連接卻存在很多限制在這種情況下客戶可以正常地和服務器建立控制連接而如果使用主動模式lsput和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 understoodPASV是一個FTP協議命令使服務器進入到被動模式
  
  FTP和網絡地址轉換(Network Address Translation)
  
  除了簡單包過濾防火牆之外被動模式也可以解決使用網絡地址轉換(NAT)給FTP造成的一些問題在轉發報文之前進行網絡地址轉換的網關首先會改變報文的源地址和目的地址網絡地址轉換能夠提高網絡的安全性有助於解決IP地址資源不足問題
  
  客戶端網絡地址轉換問題
  
  假設你的FTP客戶主機位於局域網內通過一個網絡地址轉換(NAT)網關連入互聯網在這種情況下客戶程序可以毫無困難地和外部的FTP服務器建立控制連接但是如果
From:http://tw.wingwit.com/Article/program/Oracle/201311/17826.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.