fail2ban是linux下防范暴力破解最常用有效的工具,通过监控auth.log等日志识别ssh多次失败登录,自动调用防火墙封禁ip;需配置jail.local而非jail.conf,启用sshd jail并设maxretry=3、bantime=1h等参数,配合非标端口、密钥认证等可进一步提升防护效果。

Fail2ban 是 Linux 系统中防范暴力破解最常用、最有效的工具之一。它通过实时监控日志(如 /var/log/auth.log 或 /var/log/secure),自动识别异常登录尝试(如 SSH 多次失败),并调用防火墙(iptables/nftables/firewalld)封禁对应 IP,有效阻断自动化攻击。
安装与基础服务启动
不同发行版安装方式略有差异:
- Ubuntu/Debian:
sudo apt install fail2ban - CentOS/RHEL 8+:
sudo dnf install fail2ban - CentOS 7:
sudo yum install epel-release && sudo yum install fail2ban
安装后默认配置文件位于 /etc/fail2ban/jail.conf,但不建议直接修改它。应新建 /etc/fail2ban/jail.local 覆盖关键参数,避免升级时被覆盖。
启用并启动服务:
sudo systemctl enable fail2bansudo systemctl start fail2ban- 检查状态:
sudo systemctl status fail2ban(确认 active (running))
SSH 暴力破解防护配置
这是最核心的防护场景。在 /etc/fail2ban/jail.local 中添加或修改以下内容:
[sshd] enabled = true filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 1h findtime = 10m action = %(action_mwl)s
说明:
-
maxretry = 3:10 分钟内(findtime)连续失败 3 次即触发封禁 -
bantime = 1h:封禁时长为 1 小时(支持1d、4w等写法) -
logpath需匹配实际日志路径(RHEL/CentOS 通常为/var/log/secure) -
action_mwl表示封禁 IP + 发送邮件告警(需已配置邮件服务);若无需邮件,可用action_ = %(action_)s
配置完成后执行 sudo fail2ban-client reload 生效。
查看状态与解封操作
日常运维中常用命令:
- 查看所有 jail 状态:
sudo fail2ban-client status - 查看 SSH jail 详细信息(含被封 IP):
sudo fail2ban-client status sshd - 手动解封某 IP:
sudo fail2ban-client set sshd unbanip 192.168.1.100 - 手动封禁某 IP(应急):
sudo fail2ban-client set sshd banip 192.168.1.100
注意:封禁规则由 fail2ban 自动管理 iptables/nftables 链(如 f2b-sshd),不要手动删除底层规则,否则会导致状态不一致。
进阶防护建议
提升防护有效性,可结合以下实践:
- 改用非标准 SSH 端口:大幅降低扫描量,配合 fail2ban 更高效
-
禁用密码登录,强制密钥认证:从根本上杜绝密码爆破(
PubkeyAuthentication yes+PasswordAuthentication no) -
限制 SSH 访问来源 IP:在防火墙或
sshd_config中使用AllowUsers或Match Address -
启用 recidive jail:对多次被封的“惯犯” IP 实施长期封禁(如 1 周),需在
jail.local启用并调高bantime)
fail2ban 不是银弹,但配置得当能显著提高系统抗暴力破解能力。关键是日志路径准确、阈值合理、定期检查封禁列表,避免误伤合法用户。











