如何配置 Fail2ban 防止 Vultr VPS 被暴力破解 SSH?

文章导读
Fail2ban 是 Linux 服务器防御 SSH 暴力破解的标准工具,通过监控日志自动封禁恶意 IP。在 Vultr VPS 上配置时,需区分 Ubuntu 与 CentOS 的日志路径,并优先 whitelist 管理 IP 防止误封。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

Fail2ban 是 Linux 服务器防御 SSH 暴力破解的标准工具,通过监控日志自动封禁恶意 IP。在 Vultr VPS 上配置时,需区分 Ubuntu 与 CentOS 的日志路径,并优先 whitelist 管理 IP 防止误封。

先说结论:Fail2ban 适合所有暴露 SSH 端口的 Vultr VPS,配置核心在于创建 jail.local 文件而非修改默认配置,且必须确认日志路径与防火墙后端匹配。

  • 适合场景:Ubuntu/Debian 或 CentOS/Rocky 系统,SSH 端口对外开放且使用密码或密钥认证。
  • 优先准备:记录当前管理 IP 加入白名单,确认系统日志路径(Ubuntu 为/var/log/auth.log,CentOS 为/var/log/secure)。
  • 验收标准:服务状态 active (running),fail2ban-client status sshd 显示已加载规则,尝试失败登录后可见封禁记录。

命令速用版

以下命令适用于大多数基于 Debian/Ubuntu 的 Vultr 实例,CentOS 用户需调整包管理器与日志路径。

# 安装 Fail2ban
sudo apt update && sudo apt install fail2ban -y

# 创建本地配置文件(勿直接修改 jail.conf)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# 重启服务使配置生效
sudo systemctl restart fail2ban

# 查看 SSH 防护状态
sudo fail2ban-client status sshd

为什么会这样

Fail2ban 不直接拦截连接,而是通过读取系统日志识别失败模式并调用防火墙封禁 IP。其工作原理是监控→检测→封禁→解封的循环,依赖日志文件的实时写入。

当 SSH 服务记录多次密码验证失败时,Fail2ban 的过滤器(filter)会匹配该行为,若在规定时间(findtime)内达到设定次数(maxretry),则触发动作(action)调用 iptables、nftables 或 firewalld 丢弃该 IP 数据包。封禁时长由 bantime 参数控制,过期后自动解封。

分步处理

配置过程需严格遵循本地化配置文件原则,避免系统更新覆盖设置。

1. 安装与初始化

Ubuntu/Debian 系统使用 apt 安装,CentOS/RHEL 需先启用 EPEL 仓库后使用 yum 或 dnf 安装。安装完成后服务通常默认启动,但需确认状态。

2. 配置 jail.local

编辑/etc/fail2ban/jail.local,找到或创建 [sshd] 区块。必须设置 enabled = true 以启用防护。根据系统类型设置 logpath,Ubuntu 为/var/log/auth.log,CentOS 为/var/log/secure。

3. 调整关键参数

如何配置 Fail2ban 防止 Vultr VPS 被暴力破解 SSH?

设置 maxretry = 3 至 5,避免正常输错密码被误封。设置 bantime = 3600(1 小时)或更长。务必在 [DEFAULT] 或 [sshd] 中设置 ignoreip,填入本机办公网络 IP 或 Vultr 内网段,防止管理中断。

4. 防火墙后端适配

新系统可能使用 nftables 而非 iptables。在 [DEFAULT] 段添加 backend = auto 或 backend = systemd,确保 Fail2ban 能正确写入防火墙规则。

怎么验证是否生效

配置完成后需通过状态命令与日志观察确认防护运行正常。

1. 检查服务状态

执行 sudo systemctl status fail2ban,确认状态为 active (running)。

2. 查看防护详情

执行 sudo fail2ban-client status sshd,输出应显示 Currently failed 与 Total failed 计数,以及 Banned IP list 列表。

3. 观察实时日志

执行 sudo tail -f /var/log/fail2ban.log,尝试多次错误密码登录,若看到 Ban 记录即表示规则生效。

如何配置 Fail2ban 防止 Vultr VPS 被暴力破解 SSH?

常见坑

配置 Fail2ban 时容易因路径错误或白名单遗漏导致防护失效或自我封锁。

1. 日志路径错误

CentOS 系统默认日志为/var/log/secure,若配置为/var/log/auth.log 则无法读取日志,导致不封禁。需根据发行版校验路径。

2. 误封管理 IP

未设置 ignoreip 白名单,且 maxretry 过低,可能导致管理员因手误被锁在门外。建议先加白名单再调低重试次数。

3. 防火墙后端不匹配

若系统使用 firewalld 或 nftables,而 Fail2ban 默认调用 iptables,规则可能不生效。需在配置中指定 backend 或使用对应的 action 配置。

常见问题

被封禁的 IP 如何手动解封?

使用 fail2ban-client 命令指定 jail 名称与 IP 即可解封。执行 sudo fail2ban-client set sshd unbanip 192.0.2.1,将 IP 替换为实际被封地址。

CentOS 和 Ubuntu 配置有什么区别?

主要区别在于包管理器与日志路径。CentOS 需安装 epel-release 且日志路径为/var/log/secure,Ubuntu 直接用 apt 且日志路径为/var/log/auth.log。

封禁时间设置多久合适?

生产环境建议设置为 1 小时至 24 小时。过短无法起到威慑作用,过长可能误伤动态 IP 用户。可根据日志攻击频率调整 bantime 参数。

参考来源

  • 如何使用 fail2ban 防止暴力破解服务器安全实战
  • 怎么使用 Fail2ban 防止暴力破解 SSH 账户的进阶防护教程
  • 配置 Fail2Ban 防 SSH 暴力破解!
  • LINUX 下如何配置 fail2ban_防止 LINUX 服务器被暴力破解的自动化工具