Fail2ban 安装与防护实战
Fail2ban 是一款非常实用的安全工具,它通过监控系统日志(如 /var/log/nginx/error.log 或 /var/log/secure)并根据预设规则(Filter)匹配恶意行为,自动调用防火墙(iptables/firewalld/nftables)封禁攻击者的 IP。
它是防止 SSH 暴力破解 和 Nginx 接口/密码爆破 的利器。
📥 安装 Fail2ban
CentOS / RHEL
需要先开启 EPEL 源:
bash
yum install epel-release -y
yum install fail2ban -yUbuntu / Debian
bash
apt update
apt install fail2ban -y⚙️ 核心配置
Fail2ban 的默认配置文件是 /etc/fail2ban/jail.conf,但建议通过创建 /etc/fail2ban/jail.local 来进行自定义配置,以免升级时被覆盖。
1. 基础全局配置
编辑 /etc/fail2ban/jail.local:
ini
[DEFAULT]
# 忽略的 IP(白名单),多个用空格隔开
ignoreip = 127.0.0.1/8 ::1
# 封禁时间(单位:秒),-1 为永久封禁
bantime = 1h
# 统计时间范围
findtime = 10m
# 最大重试次数
maxretry = 5
# 封禁动作(通常使用 iptables)
banaction = iptables-multiport2. 防护 Nginx 暴力破解
为了配合 Nginx 的 auth_basic 认证,我们可以开启 nginx-http-auth:
ini
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 24h🚀 启动与管理
bash
# 启动并设置开机自启
systemctl start fail2ban
systemctl enable fail2ban
# 查看运行状态
fail2ban-client status
# 查看特定监狱(Jail)的状态(如被封禁的 IP 列表)
fail2ban-client status nginx-http-auth
# 手动解封某个 IP
fail2ban-client set nginx-http-auth unbanip 1.2.3.4
# 手动封禁某个 IP
fail2ban-client set nginx-http-auth banip 1.2.3.4⚠️ 注意事项
- 日志路径:确保
logpath指向的 Nginx 日志文件路径正确,且 Fail2ban 有权读取。 - 防火墙状态:Fail2ban 依赖防火墙(如
firewalld或iptables),请确保它们正在运行。 - 不要把自己封了:在测试前,务必将自己的公网 IP 加入
ignoreip白名单。
