由於公司的產品需要用到Proftpd以連接埠做VirtualHost,申請機房端的防火牆開放3020-3029
又因為防火牆算舊款設備,不像較新穎的機種有FTP追蹤的功能,導致使用者無法連線不然就是無法取得檔案列表,在參閱RFC並經過一番的測試後有以下心得!
若用主動模式大致上會遇到兩種情況:
1.客戶端有實體IP的狀況
2.客戶端為內部IP(如192.168.1.10)利用NAT連外的狀況
客戶端有實體IP的狀況
客戶端軟體設定為主動模式,由客戶端連線至伺服器的3021,產生控制連線
客戶端隨機產生一個大於1024的port,簡稱為D,並透過控制連線使用PORT指令通知伺服器端其產生的埠號
伺服器利用3020連到客戶端 D埠建立資料連線
這個狀況下可正常使用FTP功能
客戶端利用NAT連外的狀況
客戶端軟體設定為主動模式,由客戶端連線至伺服器3021,產生控制連線
客戶端隨機產生一個大於1024的port(但其IP為內部IP時 example:192.168.1.10),客戶端軟體應該就會跟你抱怨Response:500 Illegal PORT command,然後連線就斷了
第二種狀況雖然可以在客戶端的軟體(如filezilla)設定外部的IP(其他的客戶端軟體可能有不同的作法取得外部IP),但是由於資料連線是由伺服器送SYN至客戶端,對於NAT而言,不曉得如何把這個連線轉送給內部的哪一台電腦,導致資料連線無法建立。
被動模式
客戶端軟體設定為被動模式,由客戶端連線至伺服器的3021,產生控制連線
客戶端利用控制連線傳送PSVC通知伺服器端產生一個大於1024的連接埠,簡稱為P
客戶端連線至P埠,這時因為防火牆只開放3020 – 3029,所以湊巧建立資料連線的機率相當的低,因而出現無法取得檔案列表的問題
所以針對被動模式,只要限定伺服器產生的資料埠位於防火牆開放的埠就可以解決,對於使用者而言並不需要額外的設定。只要在proftpd.conf裡加上設定:PassivePorts 3020 3029,這樣伺服器接收到PSVC時只會用3020-3029這個範圍的連接埠進行監聽囉。
轉貼至http://beakdoosan.blogspot.tw/