Fail2ban必须安装并验证运行状态,配置jail.local设置ignoreip、bantime、findtime和backend,启用sshd防护并匹配真实日志路径,重启后通过fail2ban-client状态、实时日志或防火墙规则确认封禁生效。

Linux服务器暴露在公网时,每分钟都可能遭遇成百上千次SSH暴力破解尝试,必须让Fail2ban实时扫描日志、自动封禁恶意IP,否则靠人工响应永远追不上脚本攻击的速度。
安装Fail2ban并确保服务运行
Ubuntu/Debian执行:sudo apt update && sudo apt install -y fail2ban;CentOS/RHEL 8+执行:sudo dnf install -y fail2ban(EPEL已内置)。
安装后服务默认开机自启,但必须验证是否真在运行:sudo systemctl status fail2ban→输出含 active (running) 才算成功。若显示 inactive,立即执行 sudo systemctl enable --now fail2ban 启动并设为开机自启。
这一步跳过验证等于白装——很多服务器看似装了,实际服务根本没起来,攻击日志照常刷屏。
创建并编辑jail.local配置文件
切勿直接修改 /etc/fail2ban/jail.conf,升级时会被覆盖:执行 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local → sudo nano /etc/fail2ban/jail.local。
在 [DEFAULT] 区块下,必须设置以下四项:
① ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.5——把你的运维出口IP或内网段填进去,否则自己连不进服务器就只能重装系统。
② bantime = 1h——建议用1小时而非永久封禁(-1),避免误封后无法解封。
③ findtime = 600——10分钟时间窗口,太短易误判(如输错密码后立刻重试),太长则响应滞后。
④ backend = auto——新系统默认用nftables,不加这行会导致封禁命令失效,IP照连不误。
启用SSHD防护并确认日志路径
定位到 [sshd] 区块,确保以下两行存在且未被注释:
enabled = true——这是开关,不打开等于整个配置作废。
logpath必须严格匹配真实路径:logpath = /var/log/auth.log(Ubuntu/Debian)或 logpath = /var/log/secure(RHEL/CentOS)。
很多人卡在这一步:明明配了,却从不封IP。原因往往是日志路径写错,或者SSH根本没往这个文件里写失败记录——可先执行 sudo tail -n 5 /var/log/auth.log | grep "Failed password" 看是否有输出,没有就说明日志源头断了。
重启服务并验证封禁是否生效
方法一:重启+查状态
执行 sudo systemctl restart fail2ban → sudo fail2ban-client status sshd,输出中必须有 Currently banned: X(X ≥ 0),且无报错信息。
方法二:实时观察日志联动
新开终端执行 sudo tail -f /var/log/fail2ban.log,再从另一台机器用错误密码SSH连接一次,3秒内应看到 Found xxx.xxx.xxx.xxx 和 Ban xxx.xxx.xxx.xxx 两行记录。
方法三:检查防火墙规则是否真写入
若用iptables:执行 sudo iptables -L INPUT -n | grep f2b-;若用nftables:执行 sudo nft list chain inet fail2ban filter_input 2>/dev/null | grep sshd。没输出=封禁动作没落地,得回头查 backend 或 banaction 配置。


















