在 CN2 VPS 上配置 Fail2Ban 防止 SSH 暴力破解,需要安装软件包、启用 sshd 防护规则并确保防火墙后端正常运作。此方案适用于大多数 Linux 发行版,但操作前必须确认拥有控制台访问权限,以防配置错误导致无法远程连接。
先说结论:Fail2Ban 能通过监控日志自动封禁多次尝试失败的 IP,是 SSH 基础防护的有效手段,但不能替代密钥认证。
- 先判断:确认 VPS 操作系统类型及防火墙工具(iptables 或 firewalld)。
- 优先做:配置 jail.local 文件开启 sshd jail,设置合理的 maxretry 和 bantime。
- 再验证:使用 fail2ban-client status 命令查看状态并测试触发封禁。
命令速用版
以下命令适用于 Debian/Ubuntu 系统,CentOS 需将 apt 替换为 yum 或 dnf。
apt update && apt install fail2ban -y
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
systemctl enable fail2ban && systemctl restart fail2ban
为什么会这样
SSH 服务默认监听 22 端口且暴露在公网,自动化脚本会持续尝试弱密码登录。Fail2Ban 的工作原理是读取认证日志文件,当发现同一 IP 在指定时间内失败次数超过阈值,便调用防火墙命令封禁该 IP 一段时间。
分步处理
步骤 1:安装 Fail2Ban
使用包管理器安装,避免直接下载源码以便后续维护。
步骤 2:配置文件初始化
不要直接修改 jail.conf,而是复制为 jail.local,防止软件升级覆盖配置。
步骤 3:编辑防护规则
在 jail.local 中找到 [sshd] 段落,确保 enabled = true。可根据需要调整 maxretry(允许失败次数)和 bantime(封禁时长,单位秒)。
步骤 4:重启服务
修改配置后必须重启服务才能生效。
怎么验证是否生效
执行 fail2ban-client status sshd 查看当前监听的 jail 状态和已封禁 IP 列表。查看 /var/log/fail2ban.log 确认是否有 Ban 动作记录。尝试使用错误密码多次登录,观察 IP 是否被阻断。
常见坑
1. 未白名单自身 IP:配置错误可能导致管理员 IP 被封禁,需在 jail.local 中设置 ignoreip。
2. 防火墙冲突:若 VPS 使用 firewalld 而 Fail2ban 默认配置为 iptables,封禁可能不生效,需调整 backend 设置。
3. 日志路径差异:CentOS 和 Ubuntu 的 SSH 日志路径不同(/var/log/secure vs /var/log/auth.log),需确认 logpath 配置正确。
常见问题
配置 Fail2Ban 会影响 CN2 线路速度吗?
不会影响。Fail2Ban 仅在检测到攻击时操作防火墙规则,不介入正常数据转发流程,对网络延迟和带宽无感知。
我不小心把自己封禁了怎么办?
通过 VPS 服务商提供的网页控制台(VNC 或 Web Shell)登录服务器,执行 fail2ban-client unban IP 命令解除封禁。
需要配合修改 SSH 端口吗?
建议配合。修改默认 22 端口可以减少大部分自动化扫描日志,降低 Fail2Ban 的处理压力,但安全性仍依赖密钥认证。
参考来源
- Fail2Ban Official Documentation, "Fail2Ban Wiki", https://fail2ban.org/wiki/index.php/Main_Page
- GitHub, "fail2ban/fail2ban", https://github.com/fail2ban/fail2ban