服务器面向公网时,SSH 暴力破解和扫描攻击几乎每天都在发生。为防御此类攻击,很多人会使用 Fail2ban 配合防火墙规则自动封禁尝试登录失败的 IP。以下内容记录一次基于 Fail2ban 的 SSH 防护实战情况,并结合主动黑名单策略进行分析总结。


🛡️ Fail2ban 运行状态概览

在这台服务器中,Fail2ban 针对 SSH 配置了专用 jail,用于检测登录失败并进行封禁。状态信息如下:

Status for the jail: sshd
|- Filter
| |- Currently failed: 4
| |- Total failed: 2020
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 15722
|- Total banned: 15722
`- Banned IP list: ...

关键字段解释

  • Currently failed
    表示当前处于「失败累计中」的 IP 数量,这些 IP 还未被封禁,但已经有一定次数的失败登录记录,若继续尝试达到阈值就会自动进入封禁名单。
  • Total failed
    累积的 SSH 登录失败次数(例如密码输错、非法用户名等),用于统计攻击频率。
  • Currently banned / Total banned
    当前已封禁的 IP 数量,以及历史总封禁数量。在这台服务器中,当前已封禁的 IP 数量达到 15722。

⚡ 大规模黑名单策略

该服务器使用了「主动黑名单」思路,将从其他来源(如其他 VPS、威胁情报库等)收集的可疑或攻击性 IP 列表,直接导入 Fail2ban 或防火墙规则进行封禁,总数超过 1.5 万条。这种做法的特点是:

优势

  • 能显著减少扫描和暴力破解请求,极大降低 SSH 暴露风险。
  • 配合 Fail2ban 动态封禁功能,形成双重保护。

注意事项

  • 需要关注防火墙规则数量对系统性能的影响,若封禁列表规模极大,推荐使用 ipset 管理黑名单,性能更优。
  • 若对误封不敏感,可放心采用;若需要允许特定地区访问,建议结合 GeoIP 或白名单配置。

🔍 状态动态变化

在观察期间,Fail2ban 状态持续更新,反映出攻击的动态特征:

  • Currently failed 数量波动(如从 22 增加到 25,后又下降到 4),说明新的扫描 IP 正在不断出现。
  • Total failed 累积上升(如从 2013 到 2020),表示系统持续捕捉到失败登录尝试。
  • Currently banned 数量逐步增加(如从 15721 到 15722),意味着有新的攻击 IP 达到阈值被自动封禁。

✅ 总结

Fail2ban 配合主动大规模黑名单策略,能有效防御针对 SSH 的暴力破解和扫描攻击。

  • 系统能正常捕捉和处理日志,自动识别并封禁恶意 IP。
  • 黑名单策略可大幅减少无意义连接,减少报警和系统资源占用。
  • 若黑名单持续扩大,建议后期迁移至 ipset 或其他高性能机制,保持长期可维护性。

💬 额外提示

若需定期查看最近自动封禁的 IP、统计每日封禁趋势或生成封禁图表,可通过解析 /var/log/fail2ban.log 实现自动化分析,进一步提升可视化效果和安全运维效率。

Leave a Reply

Your email address will not be published. Required fields are marked *