FTP被动模式并不是服务器先发起连接,而是客户端主动连接服务器,这是很多网络管理者容易混淆的地方。
FTP被动模式是服务器先发起连接吗?带你深挖工作原理
在FTP协议中,控制连接始终由客户端发起,当使用主动模式时,服务器主动连接客户端的数据端口;而在被动模式中,客户端发送PASV命令后,服务器返回一个IP和端口,然后客户端再发起数据连接,从数据连接建立的角度看,客户端才是发起方,之所以有人误以为“服务器先发起连接”,是因为在信息交互顺序上,服务器先返回了端口信息,这容易被误解为主动提供连接,服务器只是被动等待连接。
为了更清晰,我们对比主动模式与被动模式的数据连接建立过程:
- 主动模式:客户端打开端口监听,服务器通过20端口主动连接客户端。
- 被动模式:客户端发送PASV,服务器返回地址和端口,客户端连接服务器。
由此可见,被动模式下服务器永远不会主动发起连接,行业共识认为,理解这点对于正确配置FTP服务至关重要。
用一次FTP会话验证被动模式
打开命令行,输入以下命令观察典型交互(假设服务器IP为192.168.1.100):
ftp 192.168.1.100
Connected to 192.168.1.100.
220 Welcome to FTP server
User: yourname
331 Password required
Password:
230 User logged in
ftp> passive
Passive mode on.
ftp> ls
227 Entering Passive Mode (192,168,1,100,39,170)
服务器返回的“227 Entering Passive Mode”中,最后两个数字代表端口号,在这里是39256+170=10154,然后客户端会主动连接这个端口,整个过程中,服务器只是告诉你它准备好了,请你来连接,无论从哪一步看,发起数据连接的都是客户端。
FTP被动模式和主动模式区别:哪个更适合你的场景?
选择模式时,主要考虑网络防火墙和NAT环境,以下是两者的核心差异:
| 特性 | 主动模式 | 被动模式 |
|---|---|---|
| 数据连接发起方 | 服务器主动连接客户端 | 客户端主动连接服务器 |
| 客户端防火墙要求 | 需要开放随机高端口供服务器连接 | 只需开放出站连接,通常无限制 |
| 服务器防火墙要求 | 只需开放20和21端口 | 需要开放21端口及一个数据端口范围 |
| 穿越NAT | 困难,因为服务器连接客户端私有地址 | 更容易,因为客户端连接服务器公网地址 |
| 安全性 | 服务器可能被利用扫描客户端端口 | 服务器需要开放更多端口,但可控制范围 |
适用场景推荐:
- 被动模式:多数互联网场景,客户端在NAT或防火墙后。
- 主动模式:服务器在防火墙后,且客户端网络环境允许。
较新版本的FTP客户端默认使用被动模式,如FileZilla、WinSCP等,如果你在局域网内搭建FTP,两种模式皆可,但被动模式更省心。
不同场景下的选择指南
- 公司内网向公网提供FTP服务:客户端遍布各地,绝大多数在防火墙后,必须使用被动模式,否则,服务器无法主动连接客户端。
- 服务器在内网,客户端也在内网:两种模式都可用,但主动模式需要为服务器开放20端口,被动模式需要为服务器开放一个端口范围,从安全角度,被动模式更容易控制,因为你可以精确限制端口范围。
- 云服务器场景:云服务器通常有安全组,被动模式更推荐,你需要放行21端口和一个数据端口范围,如果使用主动模式,安全组无法控制客户端端口,容易产生隐患。
FTP被动模式配置步骤:服务器端和客户端操作
无论使用哪种服务器软件,核心是设置被动模式端口范围并开放防火墙。
Linux vsftpd配置被动模式
- 编辑vsftpd配置文件,通常位于
/etc/vsftpd/vsftpd.conf。 - 添加以下参数:
pasv_enable=YES pasv_min_port=10000 pasv_max_port=10100 pasv_address=你的服务器公网IP(如果在内网,填写公网IP或留空) - 重启vsftpd服务:
systemctl restart vsftpd。 - 在防火墙中开放端口范围:
firewall-cmd --add-port=10000-10100/tcp --permanent firewall-cmd --reload
Windows IIS或FileZilla Server配置
- FileZilla Server:进入“编辑”->“设置”->“被动模式设置”,勾选“使用自定义端口范围”,填写范围,如50000-50100。
- 然后在Windows防火墙中添加入站规则,允许该范围TCP端口。
客户端设置
以FileZilla为例,默认已启用被动模式,如需切换,在“站点管理器”中找到传输设置,选择“被动模式”,大部分客户端无需额外设置。
如何验证配置是否正确
在客户端使用ftp命令连接后,先执行passive打开被动模式,然后执行ls,观察服务器返回的端口号是否在你设置的范围之内,如果连接成功,说明配置生效,如果出现“无法打开数据连接”等错误,检查防火墙是否放行了该端口范围,以及服务器日志中是否有相关错误。
FTP被动模式端口范围选择与防火墙规则
端口范围的选择直接影响并发连接数和安全性,原则是:端口数量略大于最大并发数据连接数,但不宜过大,以减少被攻击面。
常见端口范围示例:
- 小型站点:10000-10100(100个端口,足够10-20个并发用户)
- 中型站点:50000-50100(100个端口,避开系统服务端口)
- 如果并发用户很多,可以适当扩大范围,但不要超过1000个端口,否则管理困难。
防火墙规则:
- 必须开放控制端口21。
- 数据端口范围单独开放,并限制来源IP可借助安全组或防火墙策略。
- 如果使用云服务商,安全组规则中针对源IP做限制,只允许可信客户端IP访问端口范围。
注意,如果服务器在NAT后面,需要设置pasv_address参数为公网IP,否则客户端会尝试连接内网地址,如果服务器有多个公网IP,也可以指定
pasv_address为其中一个。
FTP被动模式与安全:你需要知道的坑
被动模式虽然方便,但开放一个端口范围增加了攻击面,业内专家指出,必须限制端口范围的大小,并配合防火墙严格管控,一些恶意扫描会尝试连接随机端口,合理设置pasv_min_port和pasv_max_port,避免使用系统常用端口(如1024以下)。
另一个安全问题是:如果服务器返回的pasv_address设置错误,客户端可能连接到一个错误的IP,导致数据泄露,在内网传输时,pasv_address可以留空,让服务器自动使用本机IP;公网环境必须正确填写公网IP。
FTP被动模式中,数据连接由客户端发起,服务器只是被动响应,理解这一点,能帮助你正确配置防火墙,避免连接失败,选择被动模式还是主动模式,取决于网络环境,多数情况下被动模式更灵活,被动模式的关键在于服务器开放一个可控的端口范围,并确保防火墙规则正确。
关于FTP被动模式服务器先发起连接的常见问题
问:FTP被动模式服务器先发起连接是什么意思?
答:这是一个常见的误解,被动模式下服务器先返回一个端口,然后客户端主动连接这个端口,所以连接发起方是客户端,不是服务器,这个误解可能源于对“发起”这个词的理解不同,但技术上讲,发起网络连接的一方始终是发送SYN包的一方,也就是客户端。
问:被动模式配置需要注意什么?
答:关键点包括设置合适的端口范围、在防火墙中开放对应端口、如果服务器在NAT后需设置pasv_address参数,客户端通常无需特殊配置,确保端口范围不与其他服务冲突,并控制范围大小以降低风险。
问:为什么我的FTP被动模式连接失败?
答:可能原因有:防火墙未开放数据端口范围、服务器pasv_address设置错误(内网环境)、客户端网络禁止出站连接,检查服务器日志和防火墙规则是常用的排查路径,如果使用云服务器,检查安全组入站规则是否允许了端口范围。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/526973.html



