FTP 本身明文传输,账号密码、业务数据全部裸传,存在窃听、篡改、账号劫持风险,生产环境不建议直接使用原生 FTP,下面从协议选型、服务端配置、传输加密、网络、账号权限、审计、客户端几个维度说明安全加固手段。
一、优先替换加密协议(最核心)
原生 FTP:控制通道、数据通道均明文,严禁公网直接开放 21 端口
FTPS(FTP+TLS/SSL)
基于标准 FTP 协议,叠加 SSL/TLS 加密,端口 21(控制)+ 数据端口,区分显式
FTPES(21 端口)、隐式FTPS(990 端口)。
注意:要开启被动模式,防火墙放行被动端口段;部分老旧客户端兼容性差。
SFTP(SSH‑FTP)
基于 SSH 协议,端口 22,不是 FTP 协议,全部信道加密,密码、文件数据全程加密,推荐优先选用。
优势:防火墙配置简单,绝大多数 Linux 自带,Windows 可通过 OpenSSH、WinSCP 支持;不需要额外开放大量被动端口。
❌ 风险:普通 FTP 不要暴露公网,内网使用也尽量加密。
二、FTP/FTPS 服务端安全配置
1. 账号与权限最小化
禁止使用 root、管理员账号登录 FTP;使用独立业务账号。
chroot 禁锢家目录:用户只能访问自己的目录,禁止跳出到系统其他目录(vsftpd、proftpd 均支持)。
权限收紧:上传目录只给写入,不给执行权限;禁止修改系统文件。
禁用匿名 FTP,业务环境绝对关闭 anonymous 匿名访问。
密码策略:强密码,定期更换;可开启密钥认证(SFTP 优先密钥,关闭密码登录)。
2. TLS 加密配置(FTPS)
使用高版本 TLS,禁用 SSLv2、SSLv3、TLS1.0、TLS1.1,仅允许 TLS1.2/1.3
部署正规 CA 证书,不要使用自签名证书(生产);强制加密,禁止明文降级登录。
vsftpd 关键配置示例
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=NO
ssl_tlsv1_1=NO
ssl_tlsv1_2=YES
rsa_cert_file=/etc/pki/tls/certs/xxx.crt
rsa_private_key_file=/etc/pki/tls/private/xxx.key
三、网络层防护
防火墙策略
公网:尽量不开放 FTP21;如果必须 FTPS,仅放行业务源 IP 白名单,限制被动端口范围。
SFTP (22) 同样做源 IP 白名单,拒绝全网 0.0.0.0/0 访问。
不直接暴露 FTP 服务器到公网,通过堡垒机、反向代理、VPN 专线访问。
内网场景:划分独立 VLAN,禁止 FTP 服务器直接访问业务核心数据库。
关闭不需要的被动端口,限定被动端口区间,缩小防火墙放行范围。
四、传输与文件安全
传输前对重要文件做 MD5/SHA 校验,传输完成比对哈希,检测传输篡改。
敏感业务文件,建议先本地加密再上传,即使传输被截获,文件本身密文。
禁止直接传输明文密码配置文件、密钥文件。
开启传输日志,记录登录 IP、登录账号、上传下载、删除操作。
五、审计与运维加固
开启完整访问日志:登录时间、源 IP、操作行为、文件变更,定期审计,告警异常登录。
限制并发连接数,防止暴力破解、DOS 攻击。
暴力破解防护:fail2ban,对多次密码错误 IP 自动封禁。
定期升级 FTP 服务软件版本(vsftpd/proftpd),修复漏洞。
会话超时:设置空闲超时,闲置自动断开连接。
六、客户端侧安全
客户端不要使用普通 FTP 模式,强制选择 FTPS (FTPES) 或者 SFTP 协议。
优先使用密钥登录,避免明文保存密码;客户端不要把密码硬编码在脚本中。
脚本自动化场景:lftp 支持 FTPS,rclone 强烈推荐 SFTP 后端,避免 ftp 明文。
七、选型对比总结
最佳实践总结
业务环境优先使用 SFTP 替代 FTP,避免原生 FTP;
如果业务强依赖 FTP,必须部署 FTPS,强制 TLS 加密,关闭明文登录;
IP 白名单、最小权限、chroot 禁锢目录,关闭匿名;
部署 fail2ban 防暴力破解,完整日志审计;
敏感文件上传前做文件加密 + 哈希校验。
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢