Skip to content

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 -y

Ubuntu / 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-multiport

2. 防护 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

⚠️ 注意事项

  1. 日志路径:确保 logpath 指向的 Nginx 日志文件路径正确,且 Fail2ban 有权读取。
  2. 防火墙状态:Fail2ban 依赖防火墙(如 firewalldiptables),请确保它们正在运行。
  3. 不要把自己封了:在测试前,务必将自己的公网 IP 加入 ignoreip 白名单。

🔗 参考资料

Released under the MIT License.