可能重复:
允许使用IPTables的FTP
我有一个相当严格的iptables规则集,下面的规则允许我通过ftp连接
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
客户端可以正常连接,但事实就是如此,ftp客户端的以下输出可能会有所帮助:
Command: MLSD Error: Connection timed out Error: Failed to retrieve directory listing
当我停止IP表一切正常工作
CentOS版本5.5(最终版)
的proftpd-1.3.3c -3-
你需要一个额外的规则来允许“相关的”连接。 这是由于FTP协议使用一个端口的命令和另一个数据。
iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
此外,还有一个内核模块需要加载以跟踪相关的连接。 这就是所谓的ip_conntrack_ftp,但你如何加载它取决于你的发行版。
在hedrat-ish系统上,在/etc/sysconfig/iptables-config有一个ogle
只是为了打破差异:
主动FTP :客户端连接到服务器上的端口21。 这是控制通道。 获取文件或目录列表是数据传输,服务器然后尝试连接回客户端发送它。 鉴于大多数客户被NAT和防火墙的方式,这几天几乎从来没有工作。
被动FTP :还需要有一个数据通道,但是这次服务器将端口号发送回客户端,客户端启动另一个连接回到该端口上的服务器。
数据连接被动超时的原因是数据端口仍然被阻塞。 根据您的FTP服务器软件,您通常可以指定服务器发送的端口范围(例如:50000-50010)。 然后,您还需要接受该端口范围内的入站连接。 (请确保同时连接的数量与可用端口数量相同。)
我不熟悉proftpd,但我认为它可以让你做你需要做的。
编辑 Noodl的答案是允许通过数据连接的最好方法,尽pipe您可能想要详细说明端口范围,以便于跟踪。
尝试设置您的客户端使用被动FTP,假设您使用的NAT,应该工作。
在filezilla它的连接设置中,在命令行上我认为“被动”应该打开它,在ls / dir命令之前这样做。
您可以使用netfilter conntrack模块:
modprobe nf_conntrack_ftp
并且要在启动时加载,在/ etc / sysconfig / iptables-config中:
IPTABLES_MODULES="nf_conntrack_ftp"