FTP 与 21 端口
21 是 FTP 的控制通道端口,登录、切换目录与传输命令都在这里交互;真正的数据由另一条连接承载:主动模式使用服务端 20 端口发起连接,被动模式则由服务端给出一个随机高位端口等待客户端连接。整个过程默认明文,抓包即可还原口令与文件内容,因此新系统建议改用 SFTP;确需保留时至少启用 TLS 并关闭匿名访问。
基本信息
| 服务 | FTP 服务端(vsftpd、ProFTPD、IIS FTP 等) |
|---|---|
| 协议 | TCP(控制通道 21,数据通道另开) |
| 规范 | RFC 959;加密扩展见 RFC 4217 |
| 权限要求 | 监听 21 需 root;虚拟用户按目录授权 |
| 常见客户端 | lftp、curl、FileZilla、资源管理器 |
| 安全等级 | 不建议公网明文使用 |
典型使用场景
- 内网批量分发安装包与配置文件,用脚本化客户端自动上传下载
- 日志与备份文件回传:设备或应用把文件推到指定目录
- 老旧设备固件上传与配置下载,这些设备往往只支持 FTP
- 第三方按约定目录交换数据文件,接口简单但需要固定目录与账号
- 历史系统改造过渡期,先用受限 FTP 承接,再逐步迁移到 SFTP
主动与被动模式对照
| 模式 | 数据连接方向 | 常见卡点 |
|---|---|---|
| 主动 PORT | 服务端 20 主动连客户端高位口 | 客户端防火墙或 NAT 拦截入向连接 |
| 被动 PASV | 客户端连服务端给出的高位口 | 服务端防火墙未放行被动端口范围 |
| 带 TLS 的显式加密 | 控制通道先明文后升级 | 客户端与服务端加密支持不一致 |
| 隐式加密 | 连接即加密,使用独立端口 | 端口与模式配置错位导致连不上 |
连通性探测与调试
连通性探测与调试
curl -v ftp://192.0.2.10/ --user anonymous:test@example.com # 试探是否允许匿名登录
lftp -u user,pass -p 21 192.0.2.10 -e 'ls; bye' # 脚本化列目录
ftp -d 192.0.2.10 # -d 打印每条命令与响应码
watch -n 1 'ss -tnp | grep :21' # 另开终端观察控制连接状态vsftpd 加固要点
vsftpd 加固要点
anonymous_enable=NO # 关闭匿名访问
local_enable=YES
write_enable=YES
ssl_enable=YES # 启用 TLS
pasv_min_port=30000 # 固定被动端口范围,便于防火墙放行
pasv_max_port=30100
pasv_address=203.0.113.10 # 服务端在 NAT 后时必须填写对外地址必须保留 FTP 时,请启用 TLS、禁用匿名、固定被动端口范围并只对管理网段开放;否则改用 SFTP,避免口令与文件内容在链路上明文传输。
被动模式应答里的地址与端口由服务端给出:服务端位于 NAT 之后且未配置对外地址时,客户端会尝试连接内网地址而超时,这是外网 FTP 最常见的故障原因。
排障时分开看两条连接:控制通道一旦建立就会一直存在,传输失败往往发生在数据通道;先抓包确认数据连接的目标地址与端口,再决定是改防火墙还是改被动模式配置。