FTPS 数据通道与 989 端口
989 是 FTPS(FTP over TLS)的数据通道端口,与 990 的控制通道配套:990 负责登录与命令交互,989 承载实际的文件内容传输,整条链路都在 TLS 保护下。隐式模式下服务端在 990 上直接协商 TLS,显式模式则先在 990 上做 AUTH TLS 再升级加密;两种模式的被动数据连接都会另开端口,防火墙需要成组规划。
基本信息
| 服务 | ftps-data(FTP 数据通道的 TLS 版本) |
|---|---|
| 端口/协议 | TCP 989 |
| 配套端口 | 990 为 FTPS 控制通道,20 与 21 为明文 FTP |
| 模式差异 | 隐式模式连接即 TLS,显式模式用 AUTH TLS 升级 |
| 权限要求 | FTP 业务用户;服务端配置需系统权限 |
| 安全等级 | 仅必要来源开放,优先用 SFTP 替代 |
典型使用场景
- 加密文件交换:在合规要求下替代明文 FTP
- 老系统对接:客户端支持 FTPS 但暂不支持 SFTP
- 主机商场景:为面板用户提供加密的建站文件传输
- 批量传输:脚本化上传下载并保留加密链路
- 排障对比:把控制通道与数据通道分开验证
验证与观察
验证与观察
curl -v --ftp-ssl --user alice:secret ftp://ftp.example.com:990/ # 显式 FTPS 登录并列目录
lftp -u alice,secret -e 'set ftp:ssl-force true; ls; bye' ftp.example.com:990
sudo ss -lntp | grep -E ':(989|990) ' # 核对监听端口
sudo tcpdump -n 'tcp port 989 and host 10.0.2.5' # 确认数据通道确实加密
# 被动模式还需放行服务端配置的数据端口段端口与模式对照
| 端口 | 角色 | 说明 |
|---|---|---|
| 990 | FTPS 控制通道 | 登录与命令,隐式模式下直接是 TLS |
| 989 | FTPS 数据通道 | 文件内容传输的加密连接 |
| 20 与 21 | 明文 FTP | 传统端口,不建议继续使用 |
| 动态段 | 被动数据端口 | 由服务端配置,需一并放行 |
运维要点
- 被动数据端口段尽量收窄,并把范围写进服务端配置与防火墙规则
- 证书续期要纳入例行检查,过期后所有客户端会同时连不上
- 能用 SFTP 就迁移,只保留单一端口,运维复杂度显著下降
- 把账号权限与目录范围一并配置,避免登录即可遍历整个文件系统
- 传输日志保留时间满足审计要求,必要时可还原文件流转过程
不少客户端默认走显式模式并复用控制连接端口,989 是否被实际使用取决于协商出的端口策略。排查时以抓包看到的数据连接为准,而不是只看端口是否在听。
FTPS 加密的是链路而不是协议本身,被动模式下数据端口段配置过宽会扩大暴露面。更彻底的方案是迁移到 SFTP,只保留一个端口。