我正在使用带有主动 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_timeout
idle_session_timeout
vsftpd 配置文件。
答案3
将以下行添加到/etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p
tcp --dport 64000:65535 -j ACCEPT
重新启动iptables