fail2ban是linux下防御ssh暴力破解最实用的自动防护工具,通过实时分析/var/log/auth.log等日志识别异常登录,自动调用防火墙封禁恶意ip;需安装后创建jail.local配置文件,启用[sshd]并设maxretry=3、findtime=600、bantime=1h、ignoreip白名单及正确logpath,再重启服务并用fail2ban-client验证。

Fail2Ban 是 Linux 服务器对抗暴力破解最实用的自动防御工具,它不靠堵端口、改端口这种“掩耳盗铃”的方式,而是通过实时分析日志(如 /var/log/auth.log),识别异常登录行为,自动调用防火墙规则封禁恶意 IP。整个过程无需人工干预,配置得当后几乎“一劳永逸”。
安装与基础启动
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 = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.5—— 填入你常用运维 IP 或内网段,避免被误封 -
logpath = /var/log/auth.log—— 明确指定日志路径(Ubuntu/Debian 默认位置)
适配不同环境的关键细节
配置生效前,需确认几个易忽略但决定成败的点:
-
防火墙后端匹配:新系统多用
nftables,在[DEFAULT]段添加backend = systemd或backend = auto,确保封禁动作能正确写入规则 -
SSH 登录方式建议:若仍用密码登录,务必设置强密码;更推荐提前切换为密钥认证,并在
/etc/ssh/sshd_config中设PasswordAuthentication no,从源头降低风险 -
日志路径校验:CentOS/RHEL 系统日志路径是
/var/log/secure,务必同步修改logpath,否则 Fail2Ban “看不见”攻击
验证与日常管理
配置保存后重启服务:sudo systemctl restart fail2ban,然后立即验证效果:
- 查当前封禁情况:
sudo fail2ban-client status sshd(显示已封 IP 数量及列表) - 实时观察日志:
sudo tail -f /var/log/fail2ban.log,看到 Ban 记录即表示生效 - 手动解封某个 IP:
sudo fail2ban-client set sshd unbanip 192.0.2.100 - 测试是否响应正常:可故意输错 SSH 密码 3 次,再尝试连接,应被拒绝(注意避开
ignoreip范围)
不复杂但容易忽略——Fail2Ban 的价值不在“装上”,而在“配准”。一次合理配置,就能让成百上千次自动化暴力尝试全部失效,真正把主动权拿回自己手里。











