Ubuntu下vsftp如何防止恶意攻击
小樊
46
2025-12-02 13:48:55
Ubuntu下 vsftpd 防恶意攻击实用清单
一 基础加固配置
- 禁用匿名访问:设置 anonymous_enable=NO,仅允许本地系统用户登录(local_enable=YES)。
- 启用用户白名单:开启 userlist_enable=YES,配合 userlist_deny=NO 与 /etc/vsftpd.user_list 仅放行指定账号;同时将禁止登录的账号加入 /etc/vsftpd/ftpusers。
- 限制目录访问:开启 chroot_local_user=YES 将用户锁定在其主目录;为降低风险,优先使用 no_writeable_chroot=YES(若必须可写,再考虑 allow_writeable_chroot,并严格管控上传内容)。
- 精细写权限:按需开启 write_enable=YES,仅对确需上传的目录授予写权限,避免全局可写。
- 传输日志:开启 xferlog_enable=YES 与 xferlog_std_format=YES,便于审计与追踪异常行为。
- 连接加密:启用 ssl_enable=YES,并配置证书与强制加密(见下文示例)。
二 加密与被动模式端口
- 生成自签名证书(示例):
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048
-keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
- 强制加密与证书路径(/etc/vsftpd.conf):
ssl_enable=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
- 被动模式端口范围(建议固定小段高位端口,便于防火墙放行):
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10009
- 防火墙放行(UFW):
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 10000:10009/tcp
三 访问控制与网络防护
- 限制来源 IP(UFW):仅允许可信网段访问 FTP 控制端口与被动端口段,例如:
sudo ufw allow from 203.0.113.0/24 to any port 21,10000:10009 proto tcp
- 端口与协议最小化:如非必要,避免对外暴露不必要端口;FTP 数据通道端口较多,使用被动模式并限定端口范围更易管控。
- 服务与内核防护:保持系统与 vsftpd 更新(sudo apt update && sudo apt upgrade);按需启用 fail2ban 对 /var/log/vsftpd.log 或 /var/log/auth.log 进行暴力破解封禁(示例 jail 针对 vsftpd 日志,maxretry 与 bantime 按业务调整)。
四 用户与权限管理
- 专用 FTP 账号:创建仅用于 FTP 的系统用户,并禁止 Shell 登录(例如使用 /usr/sbin/nologin 作为登录 Shell),减少被滥用的风险。
- 目录与所有权:为用户主目录设置合适的权限(如 755),上传目录可设为 775 并归属该用户与组,避免其他用户写入。
- 精细化访问控制:结合用户白名单、chroot 与目录权限,遵循“最小权限原则”。
五 监控与替代方案
- 日志与告警:持续监控 /var/log/vsftpd.log、/var/log/auth.log、/var/log/syslog,对频繁失败登录、异常 IP、异常时段与大量传输等迹象设置告警。
- 更安全的替代:若业务允许,优先采用 SFTP(基于 OpenSSH) 替代 FTP,天然加密、权限模型更完善;在 Ubuntu 上安装 openssh-server 即可提供 SFTP 服务。