fail2ban是日志驱动的入侵响应工具,通过分析auth.log等日志识别SSH等服务的暴力破解行为,触发iptables封禁IP;配置启用[sshd]、调优maxretry/bantime/findtime后重启即可生效。

fail2ban 是 Linux 系统中防范 SSH、FTP、Web 登录等服务暴力破解最常用且有效的工具,它通过实时分析日志(如 /var/log/auth.log),自动识别异常登录尝试,并调用 iptables(或 nftables)封禁攻击者 IP。配置得当,能显著降低被撞库、爆破的风险。
fail2ban 的核心工作逻辑
fail2ban 不是防火墙本身,而是一个“日志驱动的入侵响应守护进程”:
- 持续监控指定服务的日志文件(例如 SSH 的失败登录记录)
- 按预设规则(filter)匹配“失败行为”,比如连续 5 次密码错误
- 达到阈值后,调用 jail 配置中的
action(默认为 iptables 封禁)加入临时黑名单 - 封禁时长由
bantime控制,可设为永久(-1)或若干秒(如3600表示 1 小时)
快速部署 fail2ban(以 Ubuntu/Debian 为例)
安装与基础启用只需几步:
- 执行
sudo apt update && sudo apt install fail2ban - 复制默认配置为本地可编辑版本:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local - 编辑
jail.local,确保[sshd]段启用:enabled = true - 可调整关键参数(在
[sshd]下):maxretry = 3(3 次失败即触发)bantime = 7200(封禁 2 小时)findtime = 600(10 分钟内累计达 maxretry 才封) - 重启服务:
sudo systemctl restart fail2ban
验证是否生效 & 常用管理命令
部署后别急着离开,立即检查状态和日志:
- 查看整体状态:
sudo fail2ban-client status - 查看 SSH 监控详情:
sudo fail2ban-client status sshd(会显示当前封禁 IP 数及列表) - 手动解封某个 IP:
sudo fail2ban-client set sshd unbanip 192.168.1.100 - 查看实时日志(调试用):
sudo tail -f /var/log/fail2ban.log - 确认 iptables 规则已插入:
sudo iptables -L INPUT -n | grep f2b-(应看到类似f2b-sshd的自定义链)
进阶建议:提升防护鲁棒性
基础配置够用,但生产环境建议补充以下实践:
-
禁用密码登录,改用密钥认证:从源头杜绝暴力破解可能,
PermitRootLogin no和PasswordAuthentication no写入/etc/ssh/sshd_config后重载sudo systemctl reload sshd - 限制 SSH 访问来源(白名单优先):在 iptables 或云平台安全组中,只放行可信 IP 段访问 22 端口
-
启用 recidive jail(防反复攻击):对多次被封的 IP 加长封禁时间,需在
jail.local中启用[recidive]并设置bantime = 604800(7 天) -
日志轮转配合:确保
logrotate正常工作,避免 fail2ban 因日志切分丢失上下文;检查/etc/logrotate.d/fail2ban










