F

Fail2ban安装及简单配置

Captain Linux 2020-01-17

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 unbanip 解封并查看日志定位原因。
日志文件旋转:确保日志轮转后 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),需额外清理镜像、卷和网络资源以彻底释放空间。

PREV:ubuntu系统彻底卸载mysql
NEXT:Ubuntu安装中文字体及自定义字体