在 RackNerd VPS 上防御扫描攻击,最推荐安装 Fail2ban 并启用 SSH 监狱规则,适用于 Linux 系统日志可读取的场景,风险边界是配置错误可能导致管理员自身 IP 被误封。
先说结论:Fail2ban 通过监控日志自动封禁恶意 IP,适合大多数 Linux VPS 基础防护,但需确保防火墙服务正常运行。
- 先判断:确认 VPS 系统类型及日志路径,Ubuntu 通常在 /var/log/auth.log,CentOS 通常在 /var/log/secure。
- 优先做:创建 jail.local 配置文件而非直接修改 jail.conf,避免软件更新覆盖配置。
- 再验证:使用 fail2ban-client status 命令查看监狱状态,确认规则已加载且无报错。
命令速用版
以下命令适用于基于 Debian 或 Ubuntu 的系统,CentOS 或 AlmaLinux 用户需将包管理器替换为 yum 或 dnf。
apt update && apt install fail2ban -y
systemctl enable fail2ban && systemctl start fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
为什么会这样
Fail2ban 防御的核心机制是日志分析与防火墙联动,而不是直接拦截网络包。
当攻击者尝试暴力破解 SSH 或其他服务时,会在系统日志中留下失败记录。Fail2ban 定期扫描这些日志,一旦某个 IP 在指定时间内失败次数超过阈值,就会调用防火墙命令将该 IP 加入拒绝列表。这种方式不影响正常用户的连接体验,只在检测到异常行为后介入。
分步处理
第一步是安装软件包,确保系统源可用。第二步是配置监狱规则,重点是指定正确的日志路径和封禁时长。第三步是重启服务使配置生效。
编辑 /etc/fail2ban/jail.local 文件,找到 [sshd] 部分,确保 enabled = true。如果需要修改封禁次数,调整 maxretry 参数,例如设置为 5 次。设置 bantime 为封禁时长,单位是秒,例如 3600 代表一小时。
保存文件后,执行 systemctl restart fail2ban 重启服务。如果使用的是 firewalld 而不是 iptables,需在 jail.local 中指定 banaction = firewallcmd-ipset 或相应后端,否则封禁规则可能无法写入防火墙。
怎么验证是否生效
运行 fail2ban-client status sshd 查看 SSH 监狱状态,输出中应包含 Currently failed 和 Total failed 计数。
查看日志文件 /var/log/fail2ban.log,确认没有 ERROR 级别的报错信息。尝试使用错误密码从另一台机器连接 SSH,连续多次失败后,使用该机器 IP 执行 iptables -L -n 或 firewall-cmd `--list-all`,应能看到该 IP 出现在拒绝列表中。
常见坑
配置时未将管理员当前 IP 加入 ignoreip 白名单,导致配置测试期间自己被锁在门外。防火墙后端不匹配,例如系统使用 nftables 但 Fail2ban 配置为 iptables,导致封禁命令执行失败。日志轮转后路径变化,需确保 fail2ban 监控的是当前活跃的日志文件。
常见问题
配置错误被锁定了怎么办
通过 VPS 服务商的控制台使用 VNC 或 Web Shell 登录服务器,执行 fail2ban-client unban IP 地址 解除封禁,或暂时停止 fail2ban 服务。
Fail2ban 能防御 DDoS 攻击吗
不能,Fail2ban 主要针对应用层日志分析,DDoS 攻击通常发生在网络层,会耗尽带宽或连接数,需在防火墙或上游清洗。
需要为每个服务单独配置吗
是的,每个服务对应一个监狱配置,例如 vsftpd、apache-auth 等,需在 jail.local 中分别启用并指定对应的日志路径。
参考来源
Fail2ban Official Documentation, Configuration Guide, https://github.com/fail2ban/fail2ban