一、Fail2Ban 是做什么的
防 Nginx【1】 扫描、防 SSH 暴力破解
同一 IP 在一定时间内触发相应规则超过一定次数,就会自动封禁
二、Fail2Ban 的安装
以 Debian/Ubuntu【2】 为例:
sudo apt update
sudo apt install fail2ban -y
# 启动并开机自启
sudo systemctl enable --now fail2ban
# 确认服务启动成功
sudo systemctl status fail2ban
安装后的主配置文件在:/etc/Fail2Ban【3】/
三、主要文件/目录说明
- jail.conf【4】:官方默认配置模板
- jail.local【6】:全局自定义配置
- jail.d【7】/*.conf:存放一些规则
- filter.d【8】/*conf:存放一些策略
四、Nginx 配置示例
1. Filter:nginx-scan
文件:/etc/fail2ban/filter.d/nginx-scan.conf
# 作用:从 Nginx 访问日志中抓“扫敏感路径”的请求
[Definition]
# <HOST> 是 Fail2Ban 的特殊占位符,代表客户端 IP
# 访问敏感路径并返回 404 时,算一次失败
failregex = ^<HOST> - .* "(GET|POST|HEAD) /(wp-admin|wp-login\.php|phpinfo\.php|\.git(?:/|$)|\.env).*" 404
ignoreregex = (Googlebot|bingbot|ByteDanceSpider|AhrefsBot)
匹配依赖 access.log【9】 默认日志格式,如使用自定义格式需同步调整正则。
2. Jail:nginx-scan
文件:/etc/fail2ban/jail【5】.d/nginx-scan.conf
# 负责处理“扫敏感 URL”的行为
[nginx-scan]
# 启用这个 jail
enabled = true
# 一般 Web 流量用 80/443,这里用别名即可
port = http,https
# 对应 /etc/fail2ban/filter.d/nginx-scan.conf(去掉 .conf)
filter = nginx-scan
# 如果有多个站点,可以:
# - 统一放在 /www/wwwlogs/ 下,使用通配符 *.log
# - 或者多行写多个具体 log 文件
logpath = /www/wwwlogs/*.log
backend = auto
# “阈值逻辑”
# 在 600 秒(10 分钟)时间窗口内
findtime = 600
# 同一 IP 匹配到 5 次,就触发封禁
maxretry = 5
# 封禁时长:86400 秒 = 1 天
bantime = 86400
五、常用命令
1. 服务控制
- 启动:sudo systemctl【10】 start fail2ban
- 停止:sudo systemctl stop fail2ban
- 重启:sudo systemctl restart fail2ban
- 查看状态:sudo systemctl status fail2ban
2. 查看单个 jail 列表
- sudo fail2ban-client【11】 status
3. 查看单个 jail 状态
- sudo fail2ban-client status nginx-scan
4. 手动解封 IP
- sudo fail2ban-client set nginx-scan unbanip 1.2.3.4

Comments NOTHING