加固 Linux FTP 服务器安全,核心目标是:减少攻击面、避免明文传输、限制权限、加强审计。下面按“推荐程度 + 实操要点”给你一套完整方案。
最安全的 FTP 方案:不用 FTP
# 直接用系统用户
sftp user@server
✅ 强烈推荐
如果你只是做文件传输,这是最优解。
# /etc/vsftpd.conf
anonymous_enable=NO
禁止匿名用户访问,防止被扫描利用。
root_login=NO
或限制系统用户:
echo "root" >> /etc/ftpusers
chroot_local_user=YES
allow_writeable_chroot=YES
✅ 防止用户浏览 /etc、/root 等敏感目录
⚠ 注意:目录权限不能过松
chmod 755 /home/user
防止随机端口被扫描:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
防火墙放行:
firewall-cmd --add-port=30000-31000/tcp --permanent
firewall-cmd --reload
FTP 默认是 明文协议,必须配合:
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/ftp.pem
rsa_private_key_file=/etc/ssl/private/ftp.key
force_local_data_ssl=YES
force_local_logins_ssl=YES
生成证书:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/ftp.key \
-out /etc/ssl/certs/ftp.pem
客户端必须使用 FTPS(显式 TLS)
只允许指定用户登录:
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
echo "ftpuser" > /etc/vsftpd.userlist
passwd ftpuser
或禁用密码登录(若用 SFTP):
PasswordAuthentication no
iptables -A INPUT -p tcp --dport 21 -s 1.2.3.4 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j DROP
systemctl disable telnet
systemctl disable rsh
xferlog_enable=YES
log_ftp_protocol=YES # 调试阶段
查看日志:
/var/log/vsftpd.log
/var/log/xferlog
getenforce
如果是 enforcing:
setsebool -P ftp_home_dir on
| 方案 | 安全性 | 推荐度 |
|---|---|---|
| FTP(明文) | ❌ 极低 | 不推荐 |
| FTP + TLS | ✅ 中 | 可用 |
| SFTP(SSH) | ✅✅ 高 | ⭐⭐⭐⭐⭐ |
| SFTP + chroot | ✅✅✅ 最高 | 企业级 |
✅ 禁用匿名
✅ 禁用 root
✅ 启用 TLS
✅ chroot 用户
✅ 限制端口
✅ 防火墙限制 IP
✅ 日志开启
如果你愿意,我可以:
你现在的 FTP 软件和系统版本是什么?