iptables 允许我通过 FTP 连接,但我无法获取目录列表

iptables 允许我通过 FTP 连接,但我无法获取目录列表

可能重复:
使用 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

答案1

您需要一条附加规则来允许“相关”连接。这是因为 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

答案2

只是为了打破差异:

主动 FTP:客户端连接到服务器上的端口 21。这是控制通道。获取文件或目录列表是数据传输,然后服务器尝试连接回客户端以发送它。考虑到大多数客户端都经过 NAT 和防火墙保护,这在当今几乎行不通。

被动 FTP:仍然需要有数据通道,但这一次,服务器将端口号发送回客户端,客户端发起其他通过该端口重新连接回服务器。

被动模式下数据连接超时的原因是数据端口仍被阻止。根据您的 FTP 服务器软件,您通常可以指定服务器发送的端口范围(例如:50000-50010)。然后,您还需要接受该端口范围内的入站连接。(请确保您还将同时连接的数量限制为与可用端口数量相同。)

我不熟悉 proftpd,但我认为它可以让你做你需要做的事情。

编辑Noodl 的答案是允许数据连接通过的最佳选择,但为了便于跟踪,您可能还是想具体说明端口范围。

答案3

尝试将您的客户端设置为使用被动 FTP,假设您正在使用 NAT,那么这应该可以工作。

在 filezilla 中的连接设置中,在命令行上我认为“被动”应该将其打开,在 ls/dir 命令之前执行该操作。

答案4

您可以使用 netfilter conntrack 模块:

modprobe nf_conntrack_ftp 

并在启动时加载,在 /etc/sysconfig/iptables-config 中:

IPTABLES_MODULES="nf_conntrack_ftp"

相关内容