每当我vsftpd
在 上安装时centos
,我都只为用户设置 jail 环境,其余的是 的默认配置vsftpd
。我创建用户并尝试使用filezila
ftp 客户端进行连接,但无法使用被动模式进行连接。我总是将 更改transfer settings
为主动模式以成功连接到 ,ftp server
否则我会得到
Error: Failed to retrieve directory listing
那么有没有办法可以改变vsftp.conf
文件中的任何指令,然后我们就可以用被动模式连接到服务器?
答案1
要为 vsftpd 配置被动模式,您需要在 vsftpd.conf 中设置一些参数。
pasv_enable=Yes
pasv_max_port=10100
pasv_min_port=10090
这将启用被动模式并将其限制为使用 11 个端口进行数据连接。这很有用,因为您需要在防火墙上打开这些端口。
iptables -I INPUT -p tcp --destination-port 10090:10100 -j ACCEPT
如果测试一切正常,则使用以下命令保存防火墙状态:
service iptables save
这将更新/etc/sysconfig/iptables
文件。
要在 CentOS 7 中执行此操作,您必须使用新的firewalld,而不是 iptables:
找到你的区域:
# firewall-cmd --get-active-zones
public
interfaces: eth0
我的区域是“公共”的,因此我将我的区域设置为公共,添加端口范围,然后我们重新加载:
# firewall-cmd --permanent --zone=public --add-port=10090-10100/tcp
# firewall-cmd --reload
当你建立连接时会发生什么
您的客户端通过端口 21 连接到 vsftpd 服务器。
服务器响应客户端,告诉它从上面指定的范围中连接到哪个端口。
客户端在指定端口上建立数据连接并且会话继续。
有一个很好的解释不同的 ftp模式这里。
答案2
要启用被动模式,请在 vsftp.conf 中设置以下配置选项:
pasv_enable=YES
pasv_min_port=41361
pasv_max_port=65534
pasv_address=xxx.xxx.xxx.xxx
您当然可以更改起始和结束端口,并且应该用服务器的公共 IP 替换 xxx。
此外,您应该在防火墙中打开被动模式端口范围。在 centos 上,您可以ip_conntrack_ftp
在防火墙中加载模块来处理 ftp 连接。编辑/etc/sysconfig/iptables-config
并将 ip_conntrack_ftp 添加到 IPTABLES_MODULES 选项。然后重新启动 iptables:
/sbin/service iptables restart
答案3
旁边pasv_enable=YES
,指定 VSFTP 将运行 PASV 模式的端口范围:
pasv_min_port=50000
pasv_max_port=50999
pasv_enable=YES
不要忘记配置iptables允许在这些端口上传输数据包:
iptables -I INPUT -p tcp --dport 50000:50999 -j ACCEPT
答案4
通常,不是 ftp 服务器 vsftpd,而是 iptable 之类的防火墙阻止使用被动模式(阻止数据传输所需的 tcp 连接)。