如何配置 vsftpd 以使用被动模式

Toq*_*eer 57 centos ftp vsftpd

每当我安装vsftpdcentos,我只为用户设置监狱环境,其余是vsftpd. 我创建了用户并尝试与filezilaftp 客户端连接,但无法使用被动模式连接。我总是transfer settings将活动模式更改为成功连接到ftp server否则我得到

 Error: Failed to retrieve directory listing
Run Code Online (Sandbox Code Playgroud)

那么有没有办法改变vsftp.conf文件中的任何指令,我们可以用被动模式连接到服务器?

use*_*517 97

要为 vsftpd 配置被动模式,您需要在 vsftpd.conf 中设置一些参数。

pasv_enable=Yes
pasv_max_port=10100
pasv_min_port=10090
Run Code Online (Sandbox Code Playgroud)

这将启用被动模式并将其限制为使用 11 个端口进行数据连接。这很有用,因为您需要在防火墙上打开这些端口。

iptables -I INPUT -p tcp --destination-port 10090:10100 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

如果在测试后一切正常,则使用以下命令保存防火墙的状态

service iptables save
Run Code Online (Sandbox Code Playgroud)

这将更新/etc/sysconfig/iptables文件。

要做到这一点,CentOS 7 你必须使用新的 firewalld,而不是 iptables:

找到您的区域:

# firewall-cmd --get-active-zones
public
  interfaces: eth0
Run Code Online (Sandbox Code Playgroud)

我的区域是“公共”,所以我将我的区域设置为公共,添加端口范围,然后我们重新加载:

# firewall-cmd --permanent --zone=public --add-port=10090-10100/tcp
# firewall-cmd --reload
Run Code Online (Sandbox Code Playgroud)

建立连接时会发生什么

  • 您的客户端在端口 21 上连接到 vsftpd 服务器。

  • 服务器响应客户端,告诉它从上面指定的范围连接到哪个端口。

  • 客户端在指定端口建立数据连接,会话继续。

这里对不同的 ftp模式有很好的解释。

  • 如果没有`pasv_address`,这对我不起作用。 (3认同)
  • 我花了很长时间才找到这个,vsftpd 指南都没有列出这个……太棒了 (2认同)

bra*_*n99 27

要启用被动模式,请在 vsftp.conf 中设置以下配置选项:

pasv_enable=YES
pasv_min_port=41361
pasv_max_port=65534
pasv_address=xxx.xxx.xxx.xxx
Run Code Online (Sandbox Code Playgroud)

您当然可以更改开始和结束端口,并将xxx替换为您服务器的公共IP。

此外,您应该在防火墙中打开被动模式端口范围。在 centos 上,您可以加载ip_conntrack_ftp模块来处理防火墙中的 ftp 连接。编辑/etc/sysconfig/iptables-configip_conntrack_ftp 并将其添加到 IPTABLES_MODULES 选项。然后重启iptables:

/sbin/service iptables restart
Run Code Online (Sandbox Code Playgroud)

  • `pasv_address` 是当其他所有东西都设置好但仍然不起作用时有什么用。 (4认同)
  • @fbmd 在尝试 pasv_address 之前,还应该检查 pasv_max 和 min_port 的顺序是否正确。我碰巧在 pasv_min_port 中配置了最大值,而 vsftpd 只是忽略了这一点。这是一个已知的无声缺陷/错误,它会在视觉上让您认为 pasv 端口配置正确,但事实并非如此。这发生在我身上,解决了我的问题。 (2认同)

qua*_*nta 7

在 旁边pasv_enable=YES,指定 VSFTP 将运行 PASV 模式的端口范围:

pasv_min_port=50000
pasv_max_port=50999
port_enable=YES
Run Code Online (Sandbox Code Playgroud)

不要忘记配置 iptables 允许在这些端口上传输数据包:

iptables -I INPUT -p tcp --dport 50000:50999 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)


小智 6

我必须执行以下步骤才能使 vsftp 被动模式在 CentOS 8 上工作:

在 vsftpd 配置中启用被动模式/etc/vsftpd/vsftpd.config

pasv_enable=Yes
pasv_min_port=50000
pasv_max_port=50999
Run Code Online (Sandbox Code Playgroud)

在firewalld中启用ftp服务:

firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
Run Code Online (Sandbox Code Playgroud)

正如另一篇文章中提到的,您必须加载内核模块“nf_conntrack_ftp”(CentOS 8 中已经存在这种情况)并在内核设置中启用“nf_conntrack_helper”

echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper
Run Code Online (Sandbox Code Playgroud)

添加此行/etc/sysctl.conf(或存在/etc/sysctl.d/10-nf_conntrack_helper.conf/etc/sysctl.d/)以进行重新启动持久设置:

net.netfilter.nf_conntrack_helper=1
Run Code Online (Sandbox Code Playgroud)

启用连接跟踪后,无需在本地防火墙中额外配置被动端口。