首先了解,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 (Default: 0 (use any port) ) pasv使用的最大端口
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位址