以 ProFTPD 實現 FXP

什麼是 FXP?

大家可能聽過 FlashFXP這一套軟體,它可以被看作是站對站的 FTP 傳輸:
直接在兩個遠端 FTP 伺服器間傳檔,而不需要由客戶端經手。

或許有人把 FXP 當成一個既有的協定,但其實不然;
事實上,站對站傳輸是 FTP 暨有的功能,只是為了安全考量通常不被允許。

Site-to-site Transfers (站對站傳輸)

當進行站對站傳輸,客戶端同時登入兩台伺服器 (server A and server B)
之後開始安排檔案傳輸,首先告訴 server A 負責被動傳輸
而 server B 則負責主動傳輸

對 server A 而言,它將透過回應 PASV command 來回傳一組 address/port 給客戶端
客戶端則將這組 address/port 用 PORT command 傳給 server B
然後,客戶端將 RETR 與 STOR 分別送給兩台伺服器,傳輸就此開始
因此資料流並不會也不需要由客戶端經手

也因為如此,雙方的伺服器若有防火牆保護
則必須依需求開放 active & passive FTP data transfers

Example Site-to-site Transfer
(等我有時間再套色 @@” )
藍色代表給 server A 的命令,紅色代表給 server B 的命令.
亮白色則是傳給客戶端的訊息

TYPE I
200 Type set to I.
TYPE I
200 Type set to I.
PASV
227 Entering Passive Mode (1,2,3,4,130,161).
PORT 1,2,3,4,130,161
200 PORT command successful
STOR file.mp3
150 Opening BINARY mode data connection for file.mp3
RETR file.mp3
150 Opening BINARY mode data connection for file.mp3 (15000000 bytes)
226 Transfer complete.
226 Transfer complete.
Transferred: file.mp3 14.31 MB in 2.38 (6,147.06 KBps)
TYPE A
200 Type set to A.
PASV
227 Entering Passive Mode (5,6,7,8,168,183).
LIST
150 Opening ASCII mode data connection for file list
226 Transfer complete.
TYPE A
200 Type set to A.
PASV
227 Entering Passive Mode (1,2,3,4,130,162).
LIST
150 Opening ASCII mode data connection for file list
226 Transfer complete.
Transfer queue completed
Transferred 1 file totaling 14.31 MB in 3.42 (6,147.06 KBps)

安全議題

對 ProFTPD而言,預設不允許這樣的 site-to-site transfers
如果開放了這樣的功能,將可能招致一種叫做 “FTP bounce” 的攻擊

http://www.cert.org/advisories/CA-1997-27.html

要防範這種攻擊,以伺服器的觀點來講
control connection 與 data connection 的位址應該要相同
反之,data connection 則會被認為是外來客戶端,而被rejected

結論

對管理者而言,若要使 ProFTPD支援 site-to-site transfers
可以加入 AllowForeignAddress 這個組態設定

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *