Fail2Ban是日志驱动的智能守门人,通过监控auth.log等日志识别异常登录行为,调用iptables/nftables临时封禁IP;Ubuntu/Debian执行sudo apt install -y fail2ban即可安装启用,需配置jail.local中sshd的enabled、maxretry、findtime、bantime及ignoreip等参数,并验证日志路径与防火墙后端兼容性。

Fail2Ban 不是防火墙替代品,而是日志驱动的智能守门人——它不拦所有流量,只在确认某 IP 出现异常登录行为后,才调用系统防火墙临时封禁。对暴露在公网的 Linux 服务器来说,这是成本最低、效果最稳的基础防护手段。
安装与启动要一步到位
Ubuntu/Debian 系统执行一条命令即可完成安装并自动启用:
- sudo apt update && sudo apt install -y fail2ban
- 服务默认开机自启,运行 sudo systemctl status fail2ban 查看状态应为 active (running)
- 切勿直接编辑 /etc/fail2ban/jail.conf,而是复制生成本地配置:sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
SSH 防护核心参数必须调准
编辑 /etc/fail2ban/jail.local,定位到 [sshd] 区块,确保以下设置合理:
- enabled = true —— 开关必须打开
- maxretry = 3 —— 3 次失败即触发,兼顾安全与误操作容忍
- findtime = 600 —— 10 分钟内累计达上限才计数,避免时间窗口过短误判
- bantime = 1h —— 封禁 1 小时(支持 s/m/h/d 单位,慎用永久封禁)
- ignoreip 填入你常用运维 IP 或内网段,例如 127.0.0.1/8 ::1 192.168.1.0/24
- logpath 必须匹配真实路径:Ubuntu/Debian 用 /var/log/auth.log,CentOS/RHEL 改为 /var/log/secure
适配环境细节决定成败
几个易被跳过的点,直接影响 Fail2Ban 是否真正生效:
- 新系统多用 nftables,在 [DEFAULT] 段添加 backend = auto 或 backend = systemd,确保封禁指令能写入规则
- 若仍使用密码登录,务必设强密码;更推荐提前启用密钥认证,并在 /etc/ssh/sshd_config 中设 PasswordAuthentication no
- 确认 SSH 服务本身已重启且日志确实在写入——可执行 sudo tail -n 5 /var/log/auth.log 看是否有最新登录记录
验证与日常管理不能省略
配置保存后立即验证,避免“以为生效实则静默”:
- 重启服务:sudo systemctl restart fail2ban
- 查当前封禁情况:sudo fail2ban-client status sshd
- 实时观察动作:sudo tail -f /var/log/fail2ban.log,看到 ban 记录即表示链路通了
- 误封需解封:sudo fail2ban-client set sshd unbanip 192.0.2.100


















