1. 选择安全的FTP服务器软件
优先使用vsftpd(Very Secure FTP Daemon),它是Ubuntu默认的FTP服务器软件,以安全特性著称(如chroot jail、权限限制等),能有效降低被攻击的风险。
2. 配置vsftpd强化安全参数
编辑/etc/vsftpd.conf文件,通过以下关键配置限制访问和行为:
- 禁用匿名登录:
anonymous_enable=NO,避免未授权用户访问服务器文件; - 限制用户访问范围:
chroot_local_user=YES(将用户限制在自己的主目录)、allow_writeable_chroot=YES(允许主目录可写,避免权限冲突); - 启用写权限:
write_enable=YES(仅允许授权用户上传/下载文件); - 限制登录用户列表:通过
userlist_enable=YES和userlist_file=/etc/vsftpd.user_list指定允许登录的用户,未在列表中的用户无法登录。
3. 启用SSL/TLS加密传输
使用SSL/TLS加密FTP数据(控制连接和数据连接),防止数据在传输过程中被窃取或篡改:
- 生成SSL证书:使用OpenSSL生成自签名证书(生产环境建议使用Let’s Encrypt等CA颁发的证书):
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem - 配置vsftpd使用证书:在
/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 # 强制数据连接使用SSL force_local_logins_ssl=YES # 强制登录连接使用SSL ssl_tlsv1=YES # 仅使用TLSv1及以上安全协议 ssl_sslv2=NO ssl_sslv3=NO - 重启服务生效:
sudo systemctl restart vsftpd。
4. 配置防火墙限制访问
使用**UFW(Uncomplicated Firewall)**控制入站流量,仅允许必要的FTP端口:
- 允许FTP控制连接:
sudo ufw allow 21/tcp; - 允许被动模式端口范围(vsftpd被动模式需指定端口范围,避免动态端口被拦截):
sudo ufw allow 30000:31000/tcp(可根据需求调整范围); - 启用防火墙:
sudo ufw enable; - 验证规则:
sudo ufw status确认规则已生效。
5. 实施强密码策略
为用户账户设置复杂密码(包含大小写字母、数字、特殊字符,长度不少于8位),并定期更换(每3-6个月)。可使用passwd命令修改密码,或通过chage命令设置密码过期时间:
sudo chage -M 90 ftpuser # 强制用户90天内更换密码
6. 使用fail2ban防止暴力破解
安装fail2ban监控FTP登录尝试,自动封禁多次失败的IP地址:
- 安装fail2ban:
sudo apt install fail2ban; - 配置FTP防护:编辑
/etc/fail2ban/jail.local,添加:[vsftpd] enabled = true port = ftp filter = vsftpd logpath = /var/log/vsftpd.log bantime = 3600 # 封禁时间(秒),此处为1小时 maxretry = 5 # 5次失败后封禁 - 重启fail2ban:
sudo systemctl restart fail2ban。
7. 定期更新系统和软件
保持Ubuntu系统和vsftpd软件为最新版本,及时修复已知安全漏洞:
sudo apt update && sudo apt upgrade -y
建议开启自动更新(sudo apt install unattended-upgrades),确保系统持续安全。
8. 监控日志排查异常
定期检查vsftpd日志文件(/var/log/vsftpd.log),关注以下异常行为:
- 多次登录失败的IP地址;
- 非法访问尝试(如访问敏感目录);
- 异常的数据传输量(如突然的大文件上传/下载)。
可通过tail -f /var/log/vsftpd.log实时查看日志,或使用grep命令筛选关键信息(如grep "FAILED" /var/log/vsftpd.log)。
9. 用户权限精细化管理
- 创建专用FTP用户:避免使用root用户登录FTP,使用
adduser命令创建普通用户:sudo adduser ftpuser - 限制主目录权限:确保用户主目录权限为
755(所有者可读写执行,其他用户仅可读执行):sudo chown ftpuser:ftpuser /home/ftpuser sudo chmod 755 /home/ftpuser - 禁止shell登录:若用户仅需FTP访问,可将用户的shell设置为
/usr/sbin/nologin,防止通过SSH登录:sudo usermod -s /usr/sbin/nologin ftpuser
10. 考虑替代协议(可选)
若对安全性要求极高,建议使用**SFTP(SSH File Transfer Protocol)**替代FTP。SFTP通过SSH协议传输数据,无需额外配置FTP服务器,安全性更高(如SSH密钥认证、数据加密)。可通过openssh-server软件包快速部署:
sudo apt install openssh-server
配置SSH密钥认证(ssh-keygen生成密钥,ssh-copy-id复制到服务器),进一步提升安全性。