fail2ban 安装配置:自动封禁爆破 IP
发布时间:2025-12-31 20:49       
更新时间:2026-01-01 08:01
fail2ban 干的事很具体:盯着日志里的失败登录,谁在短时间内反复试错,就用防火墙把对方的 IP 封一阵子。装好它,SSH 爆破日志能安静大半。
安装
CentOS 需要先装 EPEL 源:yum install -y epel-release && yum install -y fail2ban;Ubuntu 直接 apt install -y fail2ban,它对默认日志路径 /var/log/auth.log 已做好适配。装完 systemctl enable --now fail2ban。
写 jail 配置
不要改 jail.conf,官方约定升级会被覆盖,新建 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 2222
maxretry = 5
findtime = 600
bantime = 3600
port 要与实际 SSH 端口一致,改过端口的机器这里必须跟着改,否则封禁规则加不到正确的端口上。放 /etc/fail2ban/jail.d/sshd.local 效果等价,分文件的目录方式更好维护。
findtime 与 bantime 什么关系
上面这组的含义是:600 秒(10 分钟)内失败满 5 次,就封禁 3600 秒(1 小时)。findtime 是观察窗口,bantime 是处罚时长,前者短、后者长是常见配法。想让累犯加时,再加一行 bantime.increment = true,被封次数越多关得越久。
验证它真的在工作
从另一台机器故意连错五次密码,fail2ban-client status sshd 里立刻能看到那个 IP,journalctl -u fail2ban 同步出现 Ban 记录。封禁的落点是 firewalld 或 iptables 里插入的规则,刑满自动移除,不用手动清理。装完先跑一次手动测试,胜过上线后干等。日常查看就盯 status 这一条命令,封禁总数和名单都在。
封禁力度别一味求狠:bantime 拉到一周,遇到公司出口 IP 轮换的同事,误伤处理成本很高。生产环境常见的折中是 1 到 24 小时,配合 bantime.increment 让惯犯翻倍加时,安全与误伤兼顾。
误封了自己怎么救
fail2ban-client set sshd unbanip 你的出口IP 立即解封。更彻底的做法是把办公网固定 IP 写进 ignoreip,空格分隔可以写多个 IP 或网段,从此对自家网段免于封禁。实在进不去机器,就从云控制台的 VNC 通道登进去执行解封命令。解封步骤也值得写进值班手册,半夜处理的人不必现查命令。
提醒一句:fail2ban 依赖日志文件存在,改过 SSH 日志路径的机器,backend 参数也要对应调整,否则它盯错了地方,一条也封不出去。