在 CentOS 系统上运行 VSFTPD 时,安全防护必须认真对待。尽管 FTP 是传统协议,但攻击手段层出不穷,不容小觑。以下经过实战检验的措施,能够有效加固 VSFTPD 的防线,提升服务器安全性。
1. 更新系统和软件
这是最基础也最容易被忽略的一步。老版本中可能隐藏着已知漏洞,新版通常已修复并发布补丁。因此,从执行一条命令开始:
sudo yum update
别嫌麻烦,这是性价比最高的安全加固手段。
2. 配置防火墙
防火墙如同守门员,可以选择 firewalld 或 iptables,按自己喜好来配置。
使用 firewalld
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --reload
使用 iptables
sudo iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 20 -m state --state ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 21 -j DROP
sudo service iptables sa ve
注意,这里仅放行 FTP 控制端口 21 的新建与已建立连接,其他流量直接丢弃,干净利落。
3. 启用被动模式
主动模式下,服务器会主动连接客户端的数据端口,容易给攻击者留下后门。被动模式则相反——由客户端主动发起数据连接,攻击面随之减少。配置也很简便:
编辑 /etc/vsftpd/vsftpd.conf:
sudo vi /etc/vsftpd/vsftpd.conf
找到或添加以下内容:
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=50100
指定一个端口范围,避免使用默认的大范围,从而控制暴露面。修改后重启服务:
sudo systemctl restart vsftpd
4. 启用 SSL/TLS 加密
明文传输的 FTP,密码与文件内容如同在大街上裸奔。加密必不可少。先生成自签名证书(生产环境建议使用正规 CA 签发的证书):
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/vsftpd.pem -out /etc/pki/tls/certs/vsftpd.pem
然后在 /etc/vsftpd/vsftpd.conf 中开启 SSL:
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/pki/tls/certs/vsftpd.pem
rsa_private_key_file=/etc/pki/tls/private/vsftpd.pem
此处特意禁用了 SSLv2 和 SSLv3,这两个协议存在严重漏洞,保留它们无异于自掘坟墓。重启服务:
sudo systemctl restart vsftpd
5. 限制用户访问
不必让所有系统用户都能通过 FTP 登录。将 FTP 用户的 shell 设置为 /sbin/nologin,使其只能从事 FTP 操作,无法登录 shell。编辑 /etc/passwd,找到对应用户,将 shell 字段改为该值即可。更细致的权限控制可以结合 chroot_local_user=YES,将用户限制在自己的家目录内。
6. 使用 Fail2Ban
暴力破解是 FTP 面临的最棘手攻击之一。Fail2Ban 能自动封禁频繁登录失败的 IP。安装方法:
sudo yum install fail2ban
复制默认配置进行修改:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo vi /etc/fail2ban/jail.local
找到 [vsftpd] 部分,启用并配置规则:
[vsftpd]
enabled = true
port = ftp
filter = vsftpd
logpath = /var/log/vsftpd.log
maxretry = 3
bantime = 600
即登录失败 3 次就封禁 10 分钟,这个参数已足够应对多数场景。启动并设为开机自启:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
7. 监控和日志
最后,务必定期检查日志。使用 tail -f 实时监控也是一种方式:
sudo tail -f /var/log/vsftpd.log
留意是否有异常登录、重复失败等信号。配合 Fail2Ban,基本能抵御绝大多数常见攻击。
将这些步骤逐一落实,VSFTPD 的安全性将显著提升。虽然都是些老生常谈的方法,但真正执行到每个细节,效果依然扎实可靠。
