设置 vsftpd,挂在列表命令上

设置 vsftpd,挂在列表命令上

我安装了 vsftpd 并对其进行了配置。当我尝试使用 Transmit 连接到 ftp 服务器时,它设法连接但挂在 Listing "/" 上

然后,我收到一条消息,指出:无法检索“/”的文件列表。控制连接超时。

这与我的 iptables 有什么关系吗?我的规则如下:

*filter


#  Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT


#  Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


#  Allows all outbound traffic
#  You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT


# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-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


#  Allows SSH connections
#
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
#
-A INPUT -p tcp -m state --state NEW --dport 30000 -j ACCEPT


# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT


# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7


# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

答案1

您的服务器 iptables 配置不是(直接)问题。最有可能的是,服务器的 FTP 数据连接被阻止到达您的客户端计算机。默认情况下,FTP 使用所谓的“主动”模式,即服务器实际上尝试打开返回客户端的数据连接。消费者 NAT 路由器通常会阻止此操作,从而导致您注意到的连接超时。

将 FTP 客户端设置为使用“被动”模式,它应该可以工作。如果不行,请检查服务器上是否加载了nf_conntrack_ftp内核模块(旧内核称之为):ip_conntrack_ftp

sudo lsmod | grep conntrack_ftp

如果上述命令没有返回任何内容,则表示模块未加载,您需要加载它,如下所示:

sudo modprobe nf_conntrack_ftp

此外,您还需要确保模块在启动时加载,方法是将其nf_conntrack_ftp放入/etc/modules

内核模块nf_conntrack_ftp跟踪服务器上的 FTP 连接状态。这将允许来自客户端计算机的“被动”模式连接被 INPUT 链上的 RELATED 状态规则接受。

答案2

首先,确保 vsftpd 在主动模式和被动模式下都锁定到唯一的端口:

ftp_data_port=20
listen_port=21
pasv_min_port=64000
pasv_max_port=64321

现在修改你的 iptables 以确保这些端口可以穿越规则,然后你就应该设置好了。默认情况下,被动端口是随机的;通过设置上述内容并修复你的 iptables,你可以解决“双防火墙问题”,这样客户端就可以在任何地方工作了。

答案3

我不做 iptables,但从你展示的规则集可以清楚地看出,你需要更多地了解 FTP 的工作原理。

FTP 是一种“奇怪”的服务,因为它有一个控制端口和一个数据端口。仅打开端口 21 是不够的,那只是控制端口。数据端口取决于您使用的是主动还是被动 FTP 传输。

我不知道 iptables 如何工作,但您需要增强规则集,以便它也可以接受端口 20 上的 ftp 数据流量(如果您想使用标准 ftp 端口传输)

否则,您需要配置数据包过滤器以使用被动数据传输,并告诉您的客户端也使用该形式的通信/数据传输。

您会发现这个网站很有用:http://www.mdjnet.dk/ftp.html

答案4

如果在 ESTABLISHED,RELATED 输出上没有规则,它将不允许端口 20 ftp-data 返回数据。

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT

相关内容