使用限制性防火墙规则处理 SSL 上的 FTP 的正确方法是什么?

使用限制性防火墙规则处理 SSL 上的 FTP 的正确方法是什么?

如果没有 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 服务器正常工作?

有关信息,我vsftpdssl_enable=YES配置选项一起使用。

答案1

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并另外接受已建立的连接。
  • vsftpd在被动模式 ftp 中,您可以限制和设置提供的端口范围pasv_max_portpasv_min_port并添加匹配规则,例如iptables -A INPUT -p tcp --dport min_port:max_port -j ACCEPT.这不是非常严格,但至少比禁用防火墙更具限制性。

相关内容