Fail2ban 的作用:实时扫描日志,识别重复失败的登录尝试后,自动向防火墙(如 iptables、firewalld、nftables)下发规则临时封禁恶意 IP,从而:
降低暴力破解成功率(把攻击者“踢出”);
减少日志/告警噪声;
减轻服务器负载与带宽浪费。
工作原理
fail2ban 监控指定日志文件(/var/log/auth.log、/var/log/secure 等);
根据 filter(正则规则)匹配失败记录;
达到设定阈值(maxretry)与时间窗口(findtime)后触发 action,如添加 iptables 规则封禁 IP(ban);
在 bantime 到期后自动解除封禁(或永久封禁,视配置而定)。
安装
Ubuntu / Debian
sudo apt update
sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
#检查服务状态:
sudo systemctl status fail2ban
推荐基本配置
不要直接改 fail2ban.conf,应在 /etc/fail2ban/jail.d/ 下放自定义文件或编辑 jail.local。
创建 /etc/fail2ban/jail.d/common.local 示例:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 123.123.123.123 ; 白名单(替换为你信任的 IP)
bantime = 1h ; 封禁 1 小时(可改为 86400 秒或 -1 永久)
findtime = 10m ; 在 10 分钟内统计失败次数
maxretry = 5 ; 失败 5 次触发封禁
backend = auto
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
ignoreip 请加入可信管理 IP,避免误封你自己;
bantime、findtime、maxretry 可根据业务与暴力破解频率调优;
backend 默认为 auto,足以满足大多数场景。
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 3
注意
误封管理主机:一定要配置 ignoreip,以及把内部跳板机 IP 加到白名单。
误判复现排查:用 sudo fail2ban-client set
日志文件旋转:确保日志轮转后 fail2ban 仍能读取(通常 fail2ban 已支持 signal 热重载)。
封禁太激进会影响客户访问:对外服务的策略要慎重,生产环境常用更长的 findtime 与 maxretry,或只封禁恶意特征明显的 IP。
查看当前封禁列表:
sudo fail2ban-client status sshd
手动解除封禁:
sudo fail2ban-client set sshd unbanip 1.2.3.4
卸载
Debian/Ubuntu 系列(APT/Dpkg)
1:卸载软件但保留配置文件
sudo apt remove fail2ban
2:卸载并删除配置文件
sudo apt purge fail2ban
3:清理无用依赖
sudo apt autoremove
4:使用 dpkg 卸载(适用于手动安装的 .deb 包)
sudo dpkg --remove fail2ban
验证卸载结果
dpkg -l | grep fail2ban
💡 提示:卸载时建议同时清理无用依赖与配置文件,以避免系统冗余。对于容器化部署(Docker/K8s),需额外清理镜像、卷和网络资源以彻底释放空间。
