一、核心概念区分
- 主动模式(PORT模式)
- 连接方向:服务器主动发起数据连接
- 核心问题:客户端防火墙可能拦截服务器发起的入站连接
- 典型场景:内网客户端访问公网服务器时易受阻
- 被动模式(PASV模式)
- 连接方向:客户端主动发起所有连接
- 核心优势:完美绕过客户端防火墙限制
- 典型场景:公网客户端访问内网服务器时的标准解决方案
二、主动模式连接流程详解
- 控制连接建立
- 客户端随机选择端口X(>1024)作为源端口
- 目标连接服务器21端口(命令端口)
- 示例:
客户端:54321 → 服务器:21
- 数据端口协商
- 客户端监听X+1端口,通过21端口发送
PORT X+1
命令 - 示例:
客户端监听54322端口等待数据连接
- 客户端监听X+1端口,通过21端口发送
- 服务器发起数据连接
- 服务器使用20端口(数据端口)连接客户端的X+1端口
- 示例:
服务器:20 → 客户端:54322
- 连接确认
- 客户端通过本地X+1端口与服务器20端口建立双向通信
防火墙冲突点:
客户端防火墙可能阻止来自服务器20端口的入站连接(如企业内网环境)。
三、被动模式连接流程详解
- 控制连接建立
- 客户端使用端口N(>1024)连接服务器21端口
- 示例:
客户端:65000 → 服务器:21
- 被动端口分配
- 客户端发送
PASV
命令,服务器随机选择端口P(>1024) - 服务器响应:
227 Entering Passive Mode (ip,port)
(实际响应包含IP和端口计算方式:P = 256*byte5 + byte6)
- 客户端发送
- 数据连接建立
- 客户端使用N+1端口连接服务器的P端口
- 示例:
客户端:65001 → 服务器:54321
防火墙适配性:
所有连接均由客户端发起,完美兼容仅允许出站连接的防火墙策略。
四、两种模式对比表
特性 | 主动模式 | 被动模式 |
---|---|---|
数据连接发起方 | 服务器 | 客户端 |
典型端口使用 | 服务器20/客户端随机端口 | 服务器随机端口/客户端随机端口 |
防火墙兼容性 | 需开放客户端高端口入站 | 仅需开放服务器高端口入站 |
安全风险 | 服务器暴露数据端口 | 客户端暴露数据端口(通常更可控) |
适用场景 | 严格受控内网环境 | 互联网环境/NAT穿越 |
五、防火墙配置指南
被动模式必备规则(以服务器防火墙为例):
- 允许入站:
任何端口 >1024 → 服务器:21
(控制连接) - 允许出站:
服务器:21 → 任何端口 >1024
(控制响应) - 允许入站:
任何端口 >1024 → 服务器:P(动态端口)
(数据连接) - 允许出站:
服务器:P → 任何端口 >1024
(数据传输)
实践建议:
- 在服务器端配置被动端口范围(如50000-51000)
- 通过
iptables
或云安全组限制端口访问 - 强制使用FTPS/SFTP替代明文FTP协议