CN2 VPS 如何配置 Fail2Ban 防止 SSH 暴力破解攻击

文章导读
在 CN2 VPS 上配置 Fail2Ban 防止 SSH 暴力破解,需要安装软件包、启用 sshd 防护规则并确保防火墙后端正常运作。此方案适用于大多数 Linux 发行版,但操作前必须确认拥有控制台访问权限,以防配置错误导致无法远程连接。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 常见问题
  7. G 参考来源
A A

在 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 一段时间。

CN2 VPS 如何配置 Fail2Ban 防止 SSH 暴力破解攻击

分步处理

步骤 1:安装 Fail2Ban
使用包管理器安装,避免直接下载源码以便后续维护。

步骤 2:配置文件初始化
不要直接修改 jail.conf,而是复制为 jail.local,防止软件升级覆盖配置。

步骤 3:编辑防护规则
在 jail.local 中找到 [sshd] 段落,确保 enabled = true。可根据需要调整 maxretry(允许失败次数)和 bantime(封禁时长,单位秒)。

CN2 VPS 如何配置 Fail2Ban 防止 SSH 暴力破解攻击

步骤 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 配置正确。

CN2 VPS 如何配置 Fail2Ban 防止 SSH 暴力破解攻击

常见问题

配置 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