如何提高Linux FTPServer的安全性
小樊
40
2025-12-28 19:28:20
Linux FTP Server 安全加固清单
一 协议与加密优先
- 优先选择加密传输:使用 FTPS(FTP over SSL/TLS) 或 SFTP(基于 SSH)。FTP 明文传输用户名与口令,风险高。若业务允许,建议直接采用 SFTP 替代 FTP。
- 启用 FTPS(以 vsftpd 为例):生成证书(生产用 CA 签发,测试可用自签),并在 /etc/vsftpd/vsftpd.conf 中启用并强制加密:
- 生成证书示例:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/certs/vsftpd.crt
- 关键配置:
- ssl_enable=YES
- allow_anon_ssl=NO
- force_local_data_ssl=YES
- force_local_logins_ssl=YES
- rsa_cert_file=/etc/ssl/certs/vsftpd.crt
- rsa_private_key_file=/etc/ssl/private/vsftpd.key
- 禁用不安全协议:ssl_sslv2=NO,ssl_sslv3=NO;如需兼容老客户端可保留 ssl_tlsv1=YES,更推荐仅启用 TLSv1.2+。
- 若采用 SFTP:基于 OpenSSH,通常无需额外 FTP 服务;可在 /etc/ssh/sshd_config 中禁用 root 登录、启用公钥认证、按需限制用户与来源 IP,重启 sshd 生效。
二 身份与访问控制
- 禁用匿名访问:设置 anonymous_enable=NO,避免未授权访问与滥用。
- 限制系统账号:将高权限账号(如 root 及 sudo 组)加入 /etc/vsftpd/ftpusers 或相应 PAM 配置,阻断其 FTP 登录。
- 强制目录隔离:启用 chroot_local_user=YES 将本地用户限制在其主目录;若需可写,使用 allow_writeable_chroot=YES(注意某些版本/场景下可写 chroot 存在风险,必要时改为仅对特定子目录授权)。
- 精细权限:为用户主目录设置 755,上传目录 775 并归属相应用户/组,避免越权与删除系统文件。
- 登录保护:实施强密码策略(大小写字母、数字、特殊字符,定期更换),并限制失败登录尝试。
三 网络与防火墙配置
- 被动模式端口范围:在 vsftpd.conf 中固定端口范围,便于防火墙放行:
- pasv_enable=YES
- pasv_min_port=40000
- pasv_max_port=50000
- 如对外服务,设置 pasv_address=服务器公网IP
- 防火墙放行(示例):
- firewalld:
- sudo firewall-cmd --permanent --add-service=ftp
- sudo firewall-cmd --permanent --add-port=21/tcp
- sudo firewall-cmd --permanent --add-port=20/tcp
- sudo firewall-cmd --permanent --add-port=40000-50000/tcp
- sudo firewall-cmd --reload
- UFW:
- sudo ufw allow 21/tcp
- sudo ufw allow 20/tcp
- sudo ufw allow 40000:50000/tcp
- 安全组/边界防火墙:仅允许可信 IP/网段 访问 21 与控制通道所需端口。
四 日志监控与入侵防护
- 启用日志:在 vsftpd.conf 中开启传输与登录日志,便于审计与取证:
- xferlog_enable=YES
- xferlog_file=/var/log/vsftpd.log
- 结合系统日志(如 auth.log)观察失败登录与异常行为。
- 入侵防护:部署 Fail2Ban 自动封禁暴力破解来源:
- 示例 jail.local 片段:
- [vsftpd]
- enabled = true
- port = 21,40000-50000
- filter = vsftpd
- logpath = /var/log/vsftpd.log
- maxretry = 3
- bantime = 3600
- 定期审计与基线检查:周期性核查配置、用户、权限与日志,开展漏洞扫描与渗透测试演练。
五 系统加固与维护
- 最小权限与隔离:启用 SELinux 或 AppArmor 对 vsftpd 进行域隔离与文件访问限制;按需设置布尔值(如 allow_ftpd_anon_write、allow_ftpd_full_access)与目录安全上下文。
- 服务与内核参数:仅开放必要服务,限制并发连接与速率,调整文件描述符与内核网络参数以抵御资源耗尽与连接洪泛。
- 持续更新与备份:通过包管理器及时更新 vsftpd/ProFTPD/Pure-FTPd 与依赖组件;对业务数据与配置定期备份与异地保存。
- 安全基线示例(vsftpd 关键项汇总):
- anonymous_enable=NO
- local_enable=YES
- write_enable=YES(按目录授权)
- chroot_local_user=YES
- allow_writeable_chroot=YES(或改为仅 upload 目录可写)
- pasv_enable=YES;pasv_min_port=40000;pasv_max_port=50000;pasv_address=公网IP
- ssl_enable=YES;allow_anon_ssl=NO;force_local_data_ssl=YES;force_local_logins_ssl=YES
- rsa_cert_file=/etc/ssl/certs/vsftpd.crt;rsa_private_key_file=/etc/ssl/private/vsftpd.key
- ssl_sslv2=NO;ssl_sslv3=NO;ssl_tlsv1=YES(更推荐仅启用 TLSv1.2+)
- xferlog_enable=YES;xferlog_file=/var/log/vsftpd.log