服务器面向公网时,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 实现自动化分析,进一步提升可视化效果和安全运维效率。