1. 禁用匿名访问
匿名访问是FTP服务器最易被滥用的入口,需彻底关闭。编辑/etc/vsftpd.conf文件,将anonymous_enable=YES修改为anonymous_enable=NO,阻止未授权用户无需登录即可访问服务器。
2. 限制用户访问范围(Chroot Jail)
通过“Chroot Jail”将用户锁定在自己的主目录,防止其访问系统其他敏感区域。在/etc/vsftpd.conf中设置chroot_local_user=YES(强制所有本地用户chroot);若需允许部分用户访问系统目录,可创建/etc/vsftpd.chroot_list文件,将允许的用户添加其中,并设置chroot_list_enable=YES、chroot_list_file=/etc/vsftpd.chroot_list。同时,确保用户主目录不可写(chmod a-w /home/username),避免用户上传恶意文件。
3. 配置防火墙规则
使用ufw(Uncomplicated Firewall)限制FTP服务端口访问:允许默认的FTP控制端口21/tcp(sudo ufw allow 21/tcp);若启用被动模式(见下文),需开放动态端口范围(如50000:50100/tcp,sudo ufw allow 50000:50100/tcp);最后启用防火墙(sudo ufw enable)。防火墙能有效阻挡未经授权的IP地址访问FTP服务。
4. 启用SSL/TLS加密传输
FTP协议默认以明文传输数据,易被窃听或篡改。通过SSL/TLS加密可保护数据传输安全。首先生成自签名证书(或申请CA证书):sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/certs/vsftpd.pem;然后在/etc/vsftpd.conf中启用SSL:ssl_enable=YES、allow_anon_ssl=NO、force_local_data_ssl=YES、force_local_logins_ssl=YES、rsa_cert_file=/etc/ssl/certs/vsftpd.pem、rsa_private_key_file=/etc/ssl/private/vsftpd.pem。重启vsftpd服务使配置生效。
5. 使用Fail2Ban防范暴力破解
Fail2Ban可监控vsftpd日志,自动封禁多次登录失败的IP地址。安装Fail2Ban:sudo apt-get install fail2ban;创建FTP jail配置:sudo cp /etc/fail2ban/jail.local /etc/fail2ban/jail.local.bak,编辑/etc/fail2ban/jail.local,添加[vsftpd] section:enabled = true、port = ftp、filter = vsftpd、logpath = /var/log/vsftpd.log、maxretry = 3(允许的最大失败次数)、bantime = 600(封禁时间,单位秒);创建vsftpd过滤器:sudo nano /etc/fail2ban/filter.d/vsftpd.conf,添加failregex = ^%(__prefix_line)s(?:error:.*|user .* not logged in|.*denied for user <HOST>)$;重启Fail2Ban服务:sudo systemctl restart fail2ban。
6. 限制用户权限与并发连接
/sbin/nologin作为默认Shell,防止其通过FTP登录后执行系统命令。创建用户时添加-s /sbin/nologin参数(sudo useradd -m ftpuser -s /sbin/nologin),或修改现有用户的Shell:sudo usermod -s /sbin/nologin ftpuser。/etc/vsftpd.conf中设置max_clients=100(最大总连接数,根据服务器性能调整)、max_per_ip=5(每个IP的最大连接数),防止恶意用户占用过多资源。7. 定期更新与监控
sudo apt update && sudo apt upgrade vsftpd,修补vsftpd已知的安全漏洞。/var/log/vsftpd.log,关注异常登录(如频繁失败)、未授权访问等行为,及时采取措施(如封禁IP、修改密码)。8. 强制使用强密码
通过PAM(Pluggable Authentication Modules)设置密码复杂度要求,防止弱密码被破解。编辑/etc/pam.d/vsftpd文件,添加password requisite pam_pwquality.so retry=3 minlen=8 difok=4(retry=3表示允许3次尝试,minlen=8表示最小密码长度为8,difok=4表示新密码至少有4个字符与旧密码不同)。
9. 修改默认端口
将FTP默认控制端口21修改为非标准端口(如2123),减少自动化工具的扫描攻击。编辑/etc/vsftpd.conf,添加listen_port=2123;更新防火墙规则允许新端口(sudo ufw allow 2123/tcp);重启vsftpd服务。