FTP 服务端加固
FTP 的凭据与数据默认明文传输,攻击面又大,公网部署必须先把四件事做掉:关闭匿名登录、把账号锁在家目录、把被动模式端口范围固定下来方便放行、强制走加密。做完这四件事,绝大多数经典事故——匿名写文件、越权读取系统目录、被动端口随机导致防火墙规则失效、口令被抓包——都能规避。
基本信息
| 典型服务端 | vsftpd(Linux)、IIS FTP(Windows)、FileZilla Server |
|---|---|
| 配置文件 | vsftpd 为 /etc/vsftpd.conf |
| 生效方式 | 改完配置需重启服务或触发重载 |
| 加固优先级 | 禁匿名、锁目录、固定被动端口、强制加密 |
| 更优替代 | 能改就用 SFTP,无需额外端口与加密配置 |
关键配置项
| 配置项 | 建议值 | 作用 |
|---|---|---|
| anonymous_enable | NO | 关闭匿名登录 |
| local_enable | YES | 仅允许本机账号登录 |
| write_enable | 按需 | 只读分发场景直接关闭写入 |
| chroot_local_user | YES | 把账号限制在家目录内 |
| allow_writeable_chroot | NO | 避免家目录可写带来的越权风险 |
| pasv_min_port 与 pasv_max_port | 如 50000-50100 | 固定被动端口便于防火墙放行 |
| pasv_address | 公网地址或域名 | 修正 NAT 环境下的被动应答地址 |
| ssl_enable | YES | 启用 FTPS |
| force_local_logins_ssl | YES | 强制加密登录 |
| force_local_data_ssl | YES | 强制加密数据传输 |
加固后的回归验证
加固后的回归验证
nc -zv ftp.example.com 21 # ① 控制端口连通
lftp -u alice -e 'set ftp:ssl-force true; ls; bye' ftp.example.com # ② 强制加密能登录
lftp -u anonymous, ftp.example.com -e 'ls; bye' # ③ 匿名应被拒绝
nmap -Pn -p 21,50000-50100 ftp.example.com # ④ 被动端口范围可达典型使用场景
- 上线前安全基线检查:逐项对照配置项确认没有被默认值绕过
- 防火墙工单编写:从配置里读出真实的被动端口范围,而不是抄文档默认值
- NAT 环境排障:客户端能登录但列目录卡死,检查被动应答地址的修正配置
- 合规审计准备:确认明文协议已加密,或已给出迁移到加密通道的计划
- 账号权限收敛:确认每个账号被限制在必要的目录,且不需要写权限时已关闭
FTP 的凭据与数据默认明文,公网服务若未强制加密,等于把口令与文件暴露给链路上任何能抓包的人。新项目优先直接使用 SFTP:它能复用现有 SSH 通道与账号体系,不必再单独维护证书、被动端口与加密开关。