限制 FTP 客戶端埠?
好的,所以我使用簡單的 linux ftp 客戶端從 ftp 伺服器下載/上傳文件。我有一個 iptables 防火牆,它阻止了大部分埠,我必須關閉防火牆才能使其工作。雖然埠 21 是開放的,但我想這解釋了為什麼下載有效,而不是上傳。以下命令與防火牆完美配合:
wget ftp://user:pass@server.com
當我實際連接到伺服器並嘗試將文件“放置”/上傳到伺服器時,我只是遇到了問題。這是當時使用的埠的範例 netstat 輸出,但它總是不同的。
netstat -a | grep ServerIP tcp 0 197520 myIP.:59622 ServerIP:ftp-data ESTABLISHED tcp 0 0 myIP.:40341 ServerIP:ftp ESTABLISHED
myIP 範圍內的兩個埠都被阻止,我無法猜測我必須打開哪些埠。Google搜尋也失敗了。其次,如果我在 iptables 上嘗試這樣的事情,它會給我一個錯誤:
-A INPUT -p tcp --match multiport --dport 40000:40500 -j ACCEPT iptables-restore v1.4.8: too many ports specified
其次,當我在配置文件中阻止埠之前有以下行時,為什麼我需要打開埠:
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
一個可能的原因是您使用了活動的 FTP。
FTP 有主動模式和被動模式。
積極的:
在主動模式 FTP 中,客戶端從一個隨機的非特權埠(N > 1023)連接到 FTP 伺服器的命令埠,即埠 21。然後,客戶端開始偵聽埠 N+1 並向 FTP 發送 FTP 命令 PORT N+1伺服器。然後,伺服器將從其本地數據埠(即埠 20)連接回客戶端的指定數據埠。
被動的:
為了解決伺服器啟動與客戶端的連接的問題,開發了一種不同的 FTP 連接方法。在客戶端使用命令告訴伺服器它處於被動模式之後,這被稱為被動模式或 PASV。在被動模式 FTP 中,客戶端啟動到伺服器的兩個連接,解決了防火牆過濾從伺服器到客戶端的傳入數據埠連接的問題。在打開 FTP 連接時,客戶端會在本地打開兩個隨機的非特權埠(N > 1023 和 N+1)。第一個埠在埠 21 上與伺服器聯繫,但不是隨後發出 PORT 命令並允許伺服器連接回其數據埠,而是客戶端將發出 PASV 命令。這樣做的結果是伺服器隨後打開了一個隨機的非特權埠(P > 1023) 並將 P 發送回客戶端以響應 PASV 命令。然後客戶端發起從埠 N+1 到伺服器埠 P 的連接以傳輸數據。
– Active FTP vs. Passive FTP,一個明確的解釋
這意味著您有兩個選擇:
- 簡單的選擇:使用被動模式
- 硬選項:允許來自埠 20 的傳入連接,來自您已經建立連接的任何主機。
我會選擇選項1