之前写过一篇关于如何在 Linux 系统上搭建 Vsftpd 的文章,由于文章中并没有探讨怎么样打开被动模式,导致在连接 FTP 的时候出现连接超时提示。如果您对在 Linux 搭建 Vsftpd 感兴趣的话,可以参考下这篇文章:深入浅出 Linux Vsftpd 创建多虚拟用户教程。

臭虫小明使用 FileZilla FTP Client 连接 Vsftpd FTP,在没有配置传输模式(主动模式、被动模式)时,出现了以下提示信息。我们可以手工设置传输模式为“主动模式”来解决这一问题。但由于客户端防火墙等原因,这种解决方法将不会始终有效。

状态: 正在连接  192.168 . 182.128 : 21 ...
状态: 连接建立,等待欢迎消息...
响应:  220  (vsFTPd  2.0 . 5 )
命令: USER bugxm_general
响应:  331  Please specify the password.
命令: PASS ******
响应:  230  Login successful.
命令: OPTS UTF8 ON
响应:  200  Always  in  UTF8 mode.
状态: 已连接
状态: 读取目录列表...
命令: PWD
响应:  257  "/"
命令: TYPE I
响应:  200  Switching to Binary mode.
命令: PASV
响应:  227  Entering Passive Mode ( 192 , 168 , 182 , 128 , 172 , 85 )
命令: LIST
错误: 连接超时
错误: 读取目录列表失败



解决方法

在服务端配置被动模式就可以从根源上解决这问题。

1,vi /etc/vsftpd/vsftpd.conf


pasv_enable=YES         #开启被动模式
pasv_min_port= 4000       #随机最小端口
pasv_max_port= 5000       #随机最大端口


2、加载内核 ip_conntrack_ftp 和 ip_nat_ftp(终端执行)

modprobe ip_conntrack_ftp
modprobe ip_nat_ftp



3.配置 iptables 开放 4000 到 5000 端口

vi /etc/sysconfig/iptables  在*filter下加入下

-A OUTPUT -p tcp --sport  4000 : 5000  -j ACCEPT

-A INPUT -p tcp --dport 4000:5000 -j ACCEPT



测试连接

状态: 正在连接  192.168 . 182.128 : 21 ...
状态: 连接建立,等待欢迎消息...
响应:  220  (vsFTPd  2.0 . 5 )
命令: USER bugxm_general
响应:  331  Please specify the password.
命令: PASS ******
响应:  230  Login successful.
命令: OPTS UTF8 ON
响应:  200  Always  in  UTF8 mode.
状态: 已连接
状态: 读取目录列表...
命令: PWD
响应:  257  "/"
命令: TYPE I
响应:  200  Switching to Binary mode.
命令: PASV
响应:  227  Entering Passive Mode ( 192 , 168 , 182 , 128 , 15 , 224 )
命令: LIST
响应:  150  Here comes the directory listing.
响应:  226  Directory send OK.
状态: 列出目录成功

到这里,问题就成功解决了。