Iptables

使用限制性防火牆規則處理基於 SSL 的 FTP 的正確方法?

  • October 18, 2015

如果沒有 SSL,FTP 可以在有狀態的防火牆上正常工作,例如 netfilter ( iptables) +nf_conntrack_ftp核心模組,如下所示:

# modprobe nf_conntrack_ftp
# iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# iptables -A INPUT -p tcp --dport 21 -j ACCEPT

問題是,當使用 SSL 時,FTP 連接跟踪模組無法工作,因為它無法監視會話以發現為數據交換選擇的會話埠。因此無法動態打開該埠。

是否有正確的方法可以使啟用 SSL 的 FTP 伺服器正常工作,而無需禁用防火牆?

有關資訊,我使用vsftpd配置ssl_enable=YES選項。

SSL 和 FTP 有幾種模式:

  • 隱式 SSL,即從一開始的 SSL(通常是埠 990),而不是純文字。在這種情況下,您不會在防火牆處獲得有關動態數據埠的明文資訊,因此不能將通信限制在僅這些埠。
  • 在登錄前使用“AUTH TLS”命令顯式 SSL 以啟用 SSL,但在登錄後不使用 CCC 以禁用 SSL。在這裡,您遇到與隱式 SSL 相同的問題,即您無法讀取正在使用的數據埠。
  • 與以前一樣顯式 SSL,但在登錄後使用 CCC 命令。在這種情況下,登錄受 SSL 保護,但控制連接的其餘部分使用純文字。數據傳輸仍然可以通過 SSL 保護。您必須在客戶端啟用此模式,例如ftp:ssl-use-cccwith lftp。無法在 ftp 伺服器上強制執行此模式。

如果由於相關命令已加密而無法獲得確切的數據埠,您至少可以減少防火牆的限制:

  • 在主動模式 ftp 中,伺服器將從埠 20 發起數據連接,因此您可以有一個允許這些連接的 iptables 規則,即類似於 iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT並另外接受已建立的連接。
  • 在被動模式 ftp 中,您可以限制vsftpdwithpasv_max_portpasv_min_portsettings 提供的埠範圍,並添加匹配規則,例如iptables -A INPUT -p tcp --dport min_port:max_port -j ACCEPT. 這不是很嚴格,但至少比禁用防火牆更嚴格。

引用自:https://unix.stackexchange.com/questions/150425