使用带有主动 ftp 的 FTPS(通过显式 TLS/SSL 的 FTP)?

使用带有主动 ftp 的 FTPS(通过显式 TLS/SSL 的 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

答案1

我遇到过这个问题。使用显式 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

答案2

您需要明确允许访问FTP 数据传入端口范围。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 秒后无法发起数据连接,则此解决方案会造成不便。如果您愿意,可以使用 24 小时,它将较少的无论如何都打开,而不是永久打开整个端口范围。您还可以使用如下序列:

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顶部附近。

还请检查accept_timeout和的参数data_connection_timeoutidle_session_timeoutvsftpd 配置文件

答案3

将以下行添加到/etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p 
                                            tcp --dport 64000:65535 -j ACCEPT

重新启动iptables

相关内容