Iptables

將 FTPS(通過顯式 TLS/SSL 的 FTP)與活動 ftp 一起使用?

  • May 25, 2018

我正在使用帶有活動 ftp 的 vsftpd。我有模組“ip_conntrack_ftp”(在 /etc/sysconfig/iptables-config 中)並且埠 21 已打開。使用 FTP 連接有效,但 FTPS 無效。我可以登錄但沒有列表:

227 Entering Passive Mode
LIST -a

停止防火牆時它可以工作(我的意思是 ftp 伺服器本身上的 iptables)。我在http://www.experts-exchange.com/Software/Server_Software/File_Servers/FTP/Q_22418222.html中讀到無法將 FTPS 與活動 FTP 一起使用。這是真的?

我的 iptables 配置:

*filter
:INPUT DROP [15:2752]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [132:159725]
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/255.0.0.0 -i ! lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 990 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 989 -j ACCEPT
COMMIT

我遇到了這個問題。使用帶有顯式 TLS/SSL 的 FTP 時,您似乎需要打開埠的 ftp 數據傳輸範圍。嘗試以下操作:

iptables -A INPUT -p tcp --sport 1024: --dport 64000:65535 -m state --state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 64000:65535 --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT

您需要明確允許訪問ftp-data傳入埠範圍。Nic 的回答建議靜態打開整個範圍,但這可能開放了。此外,RELATED在這種情況下也沒用,因為conntrack_ftp模組無法窺探加密的控制連接。

我的建議是使用最近的比賽。嘗試以下操作:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state NEW -j in_new
iptables -A in_new -p tcp --sport 1024: --syn --dport 64000:65535 -m recent --name ftpdata --update --seconds 1800 --reap -j ACCEPT
iptables -A in_new -p tcp               --syn --dport ftp         -m recent --name ftpdata --set -j ACCEPT

--set規則將由控制連接匹配,並將源 ip 添加到ftpdata最近列表中。該--update規則將完成大部分有趣的工作:

  • 如果數據包的源地址在ftpdata列表中 ( --update) 並且源地址在過去 1800 秒 ( --seconds 1800) 內出現,則匹配。
  • 如果匹配,源地址的“最後一次看到”時間戳將被更新 ( --update)。
  • ftpdata在最後 1800 年中未出現的列表中的條目將被刪除 ( --reap)。

因此,在控制連接建立後ACCEPT,您有 1800 秒的時間來啟動數據連接。在那之後,您將需要重新打開控制連接以將源地址重新添加到ftpdata列表中。

如果 ftp 客戶端在其最後控制連接建立時間的 1800 秒後無法啟動數據連接,則此解決方案的不便之處。如果您願意,您可以使用 24h,無論如何,它的開放程度要比永久打開完整埠範圍要*少。*您還可以有一個序列,如:

iptables -A INPUT -m state --state ESTABLISHED -p tcp --dport ftp -m recent --set
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

每當建立的控制連接數據包進入時刷新源地址,但我更喜歡將--state RELATED,ESTABLISHED規則放在頂部附近。

還要檢查vsftpd.confaccept_timeout的參數data_connection_timeoutidle_session_timeout參數。

引用自:https://serverfault.com/questions/362224