在 Linux 上搭建 FTP 服务器(如 vsftpd、ProFTPD、Pure-FTPd)时,防入侵的核心思路是:缩小攻击面 + 强化认证 + 限制权限 + 监控审计。下面按“实战可落地”的方式给你一套方案。
如果必须用 FTP,至少启用 TLS
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
# 限制用户
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=YES
# 日志
xferlog_enable=YES
log_ftp_protocol=YES
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
grep -v nologin /etc/passwd
给 FTP 用户加:
usermod -s /sbin/nologin ftpuser
示例(vsftpd 虚拟用户):
ufw allow 21/tcp
ufw allow 40000:50000/tcp # 被动端口
iptables -A INPUT -p tcp --dport 21 -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j DROP
apt install fail2ban
示例(/etc/fail2ban/jail.local):
[vsftpd]
enabled = true
port = ftp
filter = vsftpd
logpath = /var/log/vsftpd.log
maxretry = 5
bantime = 3600
ps aux | grep vsftpd
应为:
ftpuser / nobody
apt update && apt upgrade
/var/log/vsftpd.log/var/log/auth.log/var/log/fail2ban.log✅ 能用 SFTP 就别用 FTP
✅ 必须 FTP 就 FTPS + 虚拟用户 + fail2ban
❌ 不要开匿名 FTP
❌ 不要给 FTP 用户 shell
如果你愿意,可以告诉我:
我可以直接给你一份可复制的配置文件。