fail2ban 防 SSH 爆破:从安装到封禁策略的完整配置
把一台云服务器放到公网后,几乎立刻就会迎来 SSH 爆破扫描:日志里成串出现来自不同 IP 的密码尝试,用户名从 root、admin 到 test 轮着试。这类攻击大多是自动化脚本在广撒网,单次尝试成本极低,但只要有一台服务器还在用弱口令,就可能被撞开。fail2ban 正是为此而生的工具:它实时盯着系统日志,发现某个 IP 在短时间内连续登录失败,就自动把这个 IP 封禁一段时间,让爆破脚本无功而返。
安装并不复杂。在 Debian/Ubuntu 上用 apt 安装 fail2ban 即可,RHEL 系则用 dnf 安装并启用 epel 源。安装完成后不要直接改 /etc/fail2ban/jail.conf 这个默认文件,因为软件升级会覆盖它;正确做法是在同目录下新建 jail.local,只写自己要改的几项,其余沿用默认配置。这样既清晰,也便于日后维护。
最核心的是 sshd 这个 jail。先把它启用,然后设定三个关键参数:findtime 是统计窗口,例如 10 分钟;maxretry 是窗口内允许的最大失败次数,例如 5 次;bantime 是封禁时长,例如 1 小时。意思是:10 分钟内失败 5 次,就封 1 小时。这个组合对正常用户很友好——偶尔输错几次密码不会被封,而爆破脚本几分钟内就能触发封禁。封禁动作默认用防火墙规则实现,无需额外装组件。
只封一小时够不够?对持续爆破的 IP,可以把 bantime 逐步加长。fail2ban 支持递增封禁:同一 IP 反复触发,封禁时间按倍数增长,最高可设到数周。配合递增选项,同一来源反复触发时封禁时间会越拉越长。同时建议把 ignoreip 设上自己常用的办公 IP 或跳板机 IP,避免把自己锁在门外。调好参数后先测试,确认正常登录不受影响再放手运行。
只靠 fail2ban 还不够,它应该是一道防线,而不是全部。更彻底的做法是关掉密码登录、只允许 SSH 密钥登录,并把 root 禁止直接登录。这样即使爆破脚本换 IP 卷土重来,也没有口令可猜。fail2ban 负责挡住噪音、降低日志量和系统负载,密钥登录负责兜底,两者配合才是完整方案。
日常运维也有几个常用命令。fail2ban-client status sshd 可以查看当前 jail 的状态和已封禁 IP 列表;fail2ban-client set sshd unbanip <IP> 可以手动解封某个 IP,适合误封后的紧急恢复;日志则在 /var/log/fail2ban.log 里,能看到每一次封禁和解封的记录。定期翻一翻这份日志,还能发现哪些网段在持续扫描。
最后提醒两点。第一,改完配置一定要用 fail2ban-client reload 或重启服务让配置生效,只改文件不重载等于没改。第二,封禁策略要和业务场景匹配:面向公众的服务要留足容错,避免正常用户因几次输错就被长时间封禁;而纯管理端口则可以收得更紧。把 fail2ban 配好,再配上密钥登录,一台服务器的 SSH 入口就基本告别了裸奔状态。
- 点赞
- 收藏
- 关注作者
评论(0)