配置 FTP 服务器的被动模式(Passive Mode,简称 PASV)是解决防火墙和 NAT 网络环境下连接问题的关键步骤,被动模式下,客户端发起数据连接,这通常能更好地穿透防火墙。
由于不同的 FTP 服务器软件配置方法不同,以下我将以最常见的 vsftpd(Linux 常用)和 FileZilla Server(Windows 常用)为例,详细说明如何配置被动模式。
vsftpd (Linux) 配置方法
vsftpd 是最常见的 Linux FTP 服务器,配置被动模式主要涉及三个参数:pasv_enable、pasv_min_port 和 pasv_max_port。
编辑配置文件
打开 vsftpd 的主配置文件:
sudo nano /etc/vsftpd.conf
添加或修改以下参数
确保以下配置存在且未被注释(去掉前面的 ):
# 启用被动模式 pasv_enable=YES # 设置被动模式端口范围(建议选择一个较大的、防火墙开放的端口范围) pasv_min_port=40000 pasv_max_port=50000 # 【重要】如果你服务器在 NAT 后面(如云服务器),必须指定公网 IP # 否则客户端会收到内网 IP,导致连接失败 pasv_address=你的公网IP地址
注意:
pasv_address仅在服务器有公网 IP 或位于 NAT 之后时需要设置,如果服务器直接拥有公网 IP,可以省略此行,vsftpd 会自动检测。
保存并重启服务
sudo systemctl restart vsftpd
防火墙开放端口
你需要在防火墙中开放 21(控制连接)和 40000-50000(数据连接)端口。
如果使用 UFW (Ubuntu/Debian):
sudo ufw allow 21/tcp sudo ufw allow 40000:50000/tcp sudo ufw reload
如果使用 firewalld (CentOS/RHEL):
sudo firewall-cmd --permanent --add-port=21/tcp sudo firewall-cmd --permanent --add-port=40000-50000/tcp sudo firewall-cmd --reload
FileZilla Server (Windows) 配置方法
FileZilla Server 的图形界面配置较为直观。
打开管理界面
启动 FileZilla Server Interface,连接到本地服务器。
配置被动模式端口范围
- 点击左侧菜单中的 “Edit” -> “Settings”。
- 在左侧选择 “Passive mode settings”。
-
勾选 “Use custom port range”。
- 设置端口范围,
- Minimum:
40000 - Maximum:
50000
- Minimum:
设置公网 IP(关键步骤)
- 在同一页面 “Passive mode settings” 中,找到 “External IP address”。
- 选择 “Use the following IP address”,并输入你的公网 IP 地址。
- 如果不设置此项,客户端可能会收到服务器的内网 IP(如 192.168.x.x),导致无法连接。
防火墙配置
确保 Windows 防火墙允许:
- 入站规则允许 TCP 端口 21。
- 入站规则允许 TCP 端口范围 40000-50000。
通用注意事项
为什么需要被动模式?
- 主动模式(PORT):服务器主动连接客户端的数据端口,大多数现代防火墙会阻止入站连接,导致失败。
- 被动模式(PASV):客户端主动连接服务器的数据端口,客户端更容易控制出站连接,因此更适用于 NAT 和防火墙环境。
端口范围选择
- 避免使用已知的系统保留端口(如 1-1024)。
- 建议范围:
40000-50000或50000-60000。 - 确保防火墙只开放这个特定范围,而不是整个 1-65535,以提高安全性。
测试连接
使用 FTP 客户端(如 FileZilla Client)进行测试:
- 设置连接类型为 “主动” 或 “被动”。
- 尝试列出目录或上传文件。
- 如果失败,检查:
- 服务器防火墙是否开放了数据端口范围。
pasv_address是否正确设置为公网 IP。- 云服务器安全组(如 AWS Security Group、简米云安全组)是否放行了相应端口。
安全建议
FTP 协议本身不加密,用户名和密码以明文传输,强烈建议:
- 使用 SFTP 替代 FTP:如果可能,使用基于 SSH 的 SFTP(端口 22),它更安全且无需额外配置被动模式。
- 如果使用 FTP,请启用 TLS/SSL:
- 在 vsftpd 中启用
ssl_enable=YES和force_local_data_ssl=YES。 - 在 FileZilla Server 中启用 TLS 证书。
- 在 vsftpd 中启用
这样可以确保数据传输和认证过程加密,防止中间人攻击。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/485155.html



