设置FTP被动模式的核心是让服务器在指定端口范围内监听数据连接,从而绕过防火墙对随机端口的限制,确保客户端能正常下载和上传文件。
很多人在配置FTP时遇到连接失败、上传下载中断,往往是因为模式选择不当,被动模式是解决这类问题的主流方案,尤其适合有防火墙或NAT转换的网络环境,下面直接告诉你如何设置,以及不同场景下的具体操作。
FTP被动模式怎么设置?完整操作指南
服务端配置:打开被动模式并指定端口范围
无论你使用哪种FTP服务器软件,第一步都是进入配置文件,开启被动模式并设置一个端口范围,这个范围必须保持连续,并且要在防火墙中放行。
以vsftpd(Linux常用)为例:
- 编辑配置文件
/etc/vsftpd/vsftpd.conf - 添加或修改以下参数:
pasv_enable=YES开启被动模式pasv_min_port=30000最小端口号pasv_max_port=31000最大端口号pasv_address=你的服务器公网IP如果服务器有公网IP,务必填写,否则客户端可能收到内网地址
- 保存文件,重启vsftpd服务:
systemctl restart vsftpd
以Windows IIS FTP为例:
- 打开IIS管理器,选择你的FTP站点
- 双击“FTP防火墙支持”
- 在“数据通道端口范围”中输入一个范围,比如
30000-31000 - 在“防火墙的外部 IP 地址”中填写服务器公网IP(如果使用NAT)
- 应用设置,重启FTP站点
端口范围怎么选? 1000个端口就够用,你可以根据并发连接数调整,如果连接数大,可以扩大范围,比如30000-40000,注意,这个范围要在防火墙中开放。
客户端配置:强制使用被动模式
大多数FTP客户端默认使用被动模式,但如果遇到连接问题,可以手动设置。
以FileZilla为例:
- 点击“编辑” -> “设置” -> “连接” -> “FTP”
- 在“传输模式”中选择“被动模式”
- 如果你在局域网内,可以勾选“使用外部IP地址”
以命令行为例:
- 在Windows命令行使用
ftp命令时,连接后输入passive命令(部分客户端支持) - 在Linux下使用
lftp,设置set ftp:passive-mode yes
防火墙与安全组放行
被动模式要求服务器开放控制端口(21)和数据端口范围,在云服务器上,需要同时配置安全组和服务器内部防火墙。
安全组规则示例(以简米云为例):
- 入方向:允许TCP 21端口(FTP控制)
- 入方向:允许TCP 30000-31000(FTP数据)
- 如果客户端使用公网,出方向规则通常不需要额外配置
服务器内部防火墙(以Linux iptables为例):
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 30000:31000 -j ACCEPT
完成以上配置,被动模式就能正常工作了,如果你在设置过程中遇到问题,别急,后面会专门讲排查方法。
FTP主动模式被动模式区别,你应该选择哪个
主动模式和被动模式的核心区别在于数据连接的建立方向。
主动模式(PORT)
客户端发送PORT命令,告诉服务器它正在监听某个端口,然后服务器主动连接该端口,这种方式在客户端有公网IP且防火墙允许入站连接时没问题,但如果客户端在NAT后面,服务器无法连接到客户端的内网IP,就会失败,客户端防火墙通常会阻止服务器发起的入站连接,导致连接超时。
被动模式(PASV)
客户端发送PASV命令,服务器开启一个随机端口等待客户端连接,数据连接由客户端发起,避免了服务器主动连接客户端的问题。绝大多数情况下,被动模式是更通用的选择,尤其是对于云服务器、家庭宽带等场景。
对比表格
| 特性 | 主动模式 | 被动模式 |
|---|---|---|
| 数据连接方向 | 服务器 -> 客户端 | 客户端 -> 服务器 |
| 对客户端要求 | 需要公网IP,防火墙开放入站端口 | 无特殊要求,仅需能发起出站连接 |
| 对服务器要求 | 无需额外配置 | 需开放数据端口范围,配置防火墙 |
| 适用场景 | 服务器与客户端在同一局域网,或客户端有公网IP | 客户端在NAT后,或使用云服务器时 |
| 安全性 | 服务器主动连接,可能被利用 | 服务器被动等待,相对安全 |
总结建议: 如果你不确定用哪个,直接选被动模式,行业共识认为,被动模式是目前FTP应用的默认选择,尤其当用户通过互联网访问时,只有在极少数情况下,比如服务器需要限制客户端IP,才会考虑主动模式。
不同操作系统下的FTP设置关键点
Windows Server设置FTP被动模式
除了IIS,你也可以使用FileZilla Server,在FileZilla Server中,配置被动模式端口范围非常直观,打开管理界面,选择“Edit” -> “Settings” -> “Passive mode settings”,勾选“Use custom port range”,填入起始和结束端口,并填写外部IP地址,注意,Windows防火墙必须允许这些端口的入站连接。
Linux设置FTP被动模式
除了vsftpd,还有Pure-FTPd、ProFTPD等,基本思路一致:开启被动模式,指定端口范围,配置防火墙,以Pure-FTPd为例,在/etc/pure-ftpd/pure-ftpd.conf中设置PassivePortRange 30000 31000,然后重启服务。
云服务器FTP被动模式设置
云服务器通常有安全组(如简米云、酷番云、百度云),你需要:
- 放行控制端口21和被动端口范围
- 如果是外网访问,确保服务器安全组入方向规则允许这些端口
- 如果服务器内部还有防火墙(如firewalld或iptables),也要放行
特别注意: 如果云服务器使用NAT映射(如弹性公网IP),必须设置pasv_address或外部IP地址,否则客户端收到的数据连接IP是内网IP,无法连接,这在云服务器ftp被动模式设置中非常关键。
FTP被动模式常见问题排查
客户端连接时提示“无法打开数据连接”
这种情况通常是因为服务器防火墙或安全组没有放行被动端口范围,检查步骤:
- 确认服务器已开启被动模式并指定了端口范围
- 确认防火墙中已放行该端口范围(包括云安全组和服务器内部防火墙)
- 如果服务器有多个网卡或NAT,检查
pasv_address配置是否正确 - 在客户端使用
telnet 服务器IP 被动端口测试端口是否可达
文件上传后大小为零或传输中断
一般是因为被动模式端口范围过小,或连接数超限,可以适当扩大端口范围,比如从1000个扩展到2000个,同时检查服务器连接数限制。
客户端连接缓慢
可能是被动模式端口范围冲突,或者服务器处理能力不足,尝试将端口范围设置在高位(如50000-60000),避免与系统服务冲突。
设置FTP被动模式并不复杂,核心就是两端配置:服务器开放指定端口范围,客户端选择被动模式,只要记住放行防火墙端口,并正确设置外部IP地址,FTP连接就能顺畅运行,如果你在配置中遇到问题,优先检查防火墙和安全组规则,这是最常出问题的地方。
FTP设置被动模式:常见问题解答
Q1:FTP被动模式端口范围应该设置多大?
A:取决于你的并发连接数,每个FTP数据连接使用一个端口,传输完成后端口释放,如果并发连接数通常不超过10,设置100个端口就够用,如果用户较多,建议设置1000个端口,比如30000-31000,端口范围越大,支持的并发越多,但对系统资源影响不大。
Q2:为什么我设置了被动模式,客户端还是显示“连接失败”?
A:最常见的原因是防火墙没有放行被动端口范围,请检查服务器内部防火墙(iptables/firewalld)以及云安全组是否都放行了对应的TCP端口,检查pasv_address是否设置正确,如果服务器使用NAT,必须填写公网IP,确认客户端是否确实使用了被动模式,某些客户端默认是主动模式,需要手动切换。
Q3:被动模式和主动模式哪个更安全?
A:被动模式相对更安全,因为数据连接由客户端发起,服务器是被动等待,减少了服务器对外发起连接的风险,但无论哪种模式,建议使用FTP over TLS(FTPS)加密传输,避免明文密码和数据泄露,业内专家指出,FTP本身协议不够安全,应在传输层之上增加加密。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/514747.html



