通過外網埠對映訪問FTP
首先了解,FTP使用兩個埠進行通訊。一個作為控制埠(登陸用),一個作為資料傳輸埠。
主動模式:客戶端請求21 20兩個固定埠進行連線。所以如果要經過外網對映用主動模式通訊的話除非把外網埠21對映為內網的21,外網的20對映為內網的20才行。
被動模式:客戶端連線到伺服器21埠後,伺服器返回一個任意>1024的埠給客戶端,客戶端連線此資料埠。
情景描述:
公司內網有一臺Linux系統FTP伺服器。
公網地址為X.X.X.X ,現在對映公網埠 12000 到內網主機Y.Y.Y.Y的21埠。
這時通過外網的被動模式訪問可以登入FTP,但不能執行ls命令或者下載檔案。原因,資料埠沒有做對映。在使用ftp連線的時候,可以選擇被動模式然後連線12000埠,但是並不能設定資料埠
問題:
FTP可以指定埠進行連線,這個埠是控制埠。
但被動模式是返回一個任意的大於1024的埠比如8888給客戶端連線。
客戶端這時候連線8888,不能連線成功,因為連的是外網地址,外網地址的8888並沒有對映到內網地址的8888。
然後卡在這裡因為每次都不確定,這次把外網的8888對映到內網的8888,但下次通訊不一定是8888啊。
思路: 要確定FTP資料埠使用固定的。
配置 /etc/vsftpd/vsftpd.conf
pasv_enable=yes (Default:
YES ) 設定是否允許pasv模式
pasv_promiscuous=no (Default: NO ) 是否遮蔽對pasv進行安全檢查,(當有安全隧道時可禁用)
pasv_max_port=10240
pasv_min_port=1024 (Default: 0 (use any port) ) pasv使用的最小埠
pasv_address (Default: (none - the address is taken from the incoming connected socket) ) pasv模式中伺服器傳回的ip地址