fail2ban 怎么干活:盯日志、数次数、拉黑名单
fail2ban 的原理。第一步,盯着服务的日志文件;第二步,用正则表达式匹配失败记录,比如 SSH 登录失败的行;第三步,同一个 IP 在设定时间内失败次数超了阈值,就调用防火墙把它封掉,封到时间自动解。
这套机制里最核心的概念叫 jail,一个 jail 管一类服务。每个 jail 里配三样东西:监控哪个日志、用什么过滤器匹配、超限之后采取什么动作。一个 fail2ban 可以同时开好几个 jail,SSH 一个、Web 登录一个、数据库一个,各封各的,互不打扰。
它封 IP 靠的是防火墙,iptables、nftables、firewalld 都能指挥,装的时候会自动探测系统里现成的,一般不用操心。
安装和最小配置:先把 SSH 保护起来
dnf install fail2banapt install fail2ban配置文件在 /etc/fail2ban 目录,jail.conf 是默认模板,升级时会被覆盖,别直接改。正确做法是建一个 jail.local,把要改的项写进去,优先级更高,还能跟着升级走。
最小配置保护 SSH,把这些写进 jail.local:
[sshd]enabled = trueport = 2222maxretry = 3findtime = 600bantime = 3600逐项解释:enabled 打开这个 jail;port 改成你实际的 SSH 端口,默认 22 的话这行可以省;maxretry 允许失败三次;findtime 是六百秒内统计;bantime 是封一小时。连起来读就是:十分钟内失败三次,封一小时。
改完启动并设为开机自启:
systemctl enable --now fail2ban注意启动前先确认 ignoreip 白名单,默认只放行本机,千万记得把自己的运维 IP 加进去,不然第一个被封的很可能就是你自己。
查看状态和手动操作:封了谁、封到几点
服务跑起来之后,日常查看就一条命令:
fail2ban-client status先看有哪些 jail 在运行,每个 jail 当前封了几个 IP。想看某个 jail 的明细,带上 jail 名:
fail2ban-client status sshd输出里会列出被封的 IP 列表、每个 IP 还剩多少封禁时间、累计封了多少回。发现误伤了同事,手动放出来:
fail2ban-client set sshd unbanip 10.0.0.99反过来,遇到个明显不怀好意的 IP,想先下手为强,手动封:
fail2ban-client set sshd banip 攻击者地址还有个容易忘的点:改完 jail.local 不要 restart,用 reload,配置重载不丢现有的封禁名单:
fail2ban-client reload进阶玩法基础配置够用之后,有两个进阶技巧值得配上。
一个是 recidive jail。普通 jail 封一小时就放出来,有些 IP 放出来接着试,循环往复。recidive 盯着 fail2ban 自己的日志,谁被解封后又立刻犯事,直接超长待机封十天半个月,让爆破脚本知难而退。
另一个是给不同服务配不同策略。Web 后台登录失败一次就该警觉,maxretry 设 3、bantime 设一天;数据库只允许内网访问,端口压根不对外,加 jail 只是多一层保险。策略按暴露面分配,暴露越多管得越严。
常见问题
- 第一个是端口配错,SSH 改了端口 jail 里没同步,过滤白跑,封了个寂寞,登进去看看 status 里的当前失败数就知道有没有在工作。
- 第二个是日志路径不对,有的发行版 SSH 日志走 journald 没有明文文件,过滤器找不到日志, jail 直接不生效, backend 改成 systemd 模式。
- 第三个,忘了配 ignoreip,自己人被封在门外,云服务器还能控制台连。
- 第四个,防火墙规则被清理工具误伤,封禁凭空失效,排查时从防火墙侧确认规则还在不在
配完 fail2ban,每天花十秒看它自己的日志:
journalctl -u fail2ban --since today正常干活的日志长这样:先有 Found 匹配到失败记录,攒够次数后出现 Ban,把哪个 IP 封了明明白白。只看到 Found 迟迟不 Ban,说明阈值没到或者过滤器匹配不对;连 Found 都没有,说明日志没读到,检查日志路径或者 backend 设置
小结
fail2ban 防爆破,这套配置抄走:
- 原理三步:盯日志、正则匹配失败、超阈值调防火墙封 IP
- jail.local 里配 [sshd],enabled、port、maxretry、findtime、bantime 五项足够起步
- ignoreip 先加白名单,自己的 IP 千万别忘了
- fail2ban-client status 看封禁列表,banip 和 unbanip 手动增减
- 改配置用 reload 不用 restart,封禁名单不丢
- recidive jail ,策略按服务暴露面分配
热门跟贴