將 FTPS(通過顯式 TLS/SSL 的 FTP)與活動 ftp 一起使用?
我正在使用帶有活動 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.conf
accept_timeout
的參數data_connection_timeout
和idle_session_timeout
參數。