Fail2ban自定义封禁时长,调整IP封禁策略
Fail2ban 默认封禁时长是 10 分钟,很多场景下这个时间太短,攻击者很快就能重试。
本文直接解决如何自定义封禁时长、调整 IP 封禁策略的问题,适合刚接触服务器安全的新手,跟着操作就能把封禁时间改成你需要的小时、天甚至永久。
先确认 Fail2ban 装好并找到配置文件
修改之前,先确认服务在运行。
执行 systemctl status fail2ban,看到 active (running) 即可。
如果没装,Ubuntu/Debian 用 apt install fail2ban,CentOS/RHEL 用 yum install fail2ban。
Fail2ban 的默认配置文件在 /etc/fail2ban/jail.conf,但不要直接改它,因为升级时会被覆盖。
正确做法是在同目录新建 jail.local,只写需要覆盖的配置。
cd /etc/fail2ban
sudo cp jail.conf jail.local
如果已有 jail.local,直接编辑它。
修改 bantime 参数控制封禁时长
打开 jail.local,找到 [DEFAULT] 段落,这里设置的是全局默认值。
核心参数是 bantime,单位是秒。
sudo vi /etc/fail2ban/jail.local
在 [DEFAULT] 下添加或修改:
bantime = 86400
findtime = 600
maxretry = 3
bantime = 86400表示封禁 24 小时(86400 秒)。findtime = 600表示 10 分钟内累计失败次数。maxretry = 3表示失败 3 次触发封禁。
如果想永久封禁,可以设置 bantime = -1。但要注意,永久封禁可能误伤自己,建议先用较长时长如 604800(7 天)测试。
为特定服务单独调整封禁策略
全局设置会影响所有 jail。
如果只想改 SSH 的封禁时长,在 jail.local 里找到 [sshd] 段落,单独写 bantime:
[sshd]
enabled = true
bantime = 604800
这样 SSH 封禁 7 天,其他服务仍用全局值。优先级:jail 内的设置覆盖 [DEFAULT]。
重载配置并检查生效
改完保存退出,重载 Fail2ban:
sudo fail2ban-client reload
查看当前某个 jail 的封禁时长:
sudo fail2ban-client get sshd bantime
应该返回你设置的值。
如果报错,用 sudo fail2ban-client -t 测试配置文件语法。
手动验证封禁效果与解封
想马上看到效果,可以手动封一个测试 IP:
sudo fail2ban-client set sshd banip 203.0.113.1
然后查看封禁列表:
sudo fail2ban-client status sshd
在 Banned IP list 里能看到刚才的 IP。
解封用:
sudo fail2ban-client set sshd unbanip 203.0.113.1
注意:手动封禁的 IP 不受 bantime 自动解封控制,需手动解除。
几个容易踩的坑
- 单位是秒,不是分钟。写
bantime = 10只会封 10 秒,不是 10 分钟。 - 改了 jail.conf 没改 jail.local。升级后配置丢失,白忙一场。
- 忘记 reload。修改后必须
fail2ban-client reload,否则不生效。 - 防火墙冲突。如果同时用 firewalld 或 ufw,确认 Fail2ban 的 banaction 与防火墙匹配,否则封禁可能不成功。
- 永久封禁风险。
bantime = -1前务必确认自己的 IP 不会因输错密码被误封。
常见疑问
问:bantime 设置后多久生效?
重载后立即生效,但已经封禁的 IP 不会重新计时,新触发的封禁才用新时长。
问:怎么查看当前所有 jail 的封禁情况?
sudo fail2ban-client status 列出所有 jail,再跟 jail 名查看详情。
问:封禁时间到了会自动解封吗?
会。Fail2ban 自动解除到期封禁,除非手动封禁或设置 bantime = -1。
调整 Fail2ban 自定义封禁时长并不复杂,关键是改对文件、用对单位、重载后验证。
建议先从 24 小时开始,观察日志再决定是否延长。