Fail2Ban防御HTTP暴力破解:基于Nginx日志的IP封禁策略

408 阅读2分钟

微信图片_20230808094553.pngFail2Ban是一款基于日志分析的入侵防御工具,通过监控Nginx访问日志实时检测HTTP暴力破解行为,并自动封禁恶意IP。该方案可有效防御WordPress登录爆破、API密钥穷举等常见攻击,显著降低服务器安全风险。

核心配置流程****

1. 安装与基础配置****

bash

 # Debian/Ubuntu系统
 sudo apt install fail2ban -y
  
 # CentOS/RHEL系统
 sudo yum install epel-release -y
 sudo yum install fail2ban -y

配置文件结构:

· /etc/fail2ban/jail.local(自定义规则)

· /etc/fail2ban/filter.d/(自定义过滤器)

2. 创建Nginx专用过滤器****

在/etc/fail2ban/filter.d/nginx-http-auth.conf中定义匹配规则:

ini

 [Definition]
 failregex = ^ -.*"(GETPOSTPUTDELETE).HTTP/1." 401 \d+ "-" .$
 ^ -.*"(GETPOSTPUTDELETE).HTTP/1." 403 \d+ ".?(wp-loginadminlogin).".$
 ignoreregex =

规则说明:

· 匹配401/403状态码的HTTP请求

· 针对WordPress登录页(wp-login)、通用管理路径(admin/login)等敏感URI

3. 配置封禁策略****

在/etc/fail2ban/jail.local中添加自定义jail:

ini

 [nginx-http-auth]
 enabled = true
 filter = nginx-http-auth
 logpath = /var/log/nginx/access.log
 maxretry = 5 # 5次失败后触发封禁
 findtime = 600 # 10分钟内计数
 bantime = 86400 # 封禁24小时
 action = iptables[name=HTTP, port=http, protocol=tcp]

4. 高级防护策略****

用户代理过滤****

扩展过滤器以检测异常User-Agent:

ini

|   | failregex += ^ -."(GET|POST).HTTP/1." 403 \d+ ".?."."(Mozilla/0|curl|python-requests).".*$ | | - | -------------------------------------------------------------------------------------------------------------------- |

自定义响应码检测****

针对特定业务场景添加规则:

ini

 failregex += ^ -."(POST).HTTP/1." 200 \d+ ".?api_key=.".*$ # 检测API密钥穷举

多日志源监控****

同时监控错误日志和访问日志:

ini

 logpath = /var/log/nginx/access.log
 /var/log/nginx/error.log

验证与维护****

1. 

测试规则

2. 

3. 

bash

4. 

5. 

 fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-http-auth.conf

6. 

7. 

查看封禁状态

8. 

9. 

bash

10. 

11. 

 fail2ban-client status nginx-http-auth
 iptables -L -ngrep HTTP # 检查防火墙规则

12. 

13. 

白名单管理
在/etc/fail2ban/jail.local中添加:

14. 

15. 

ini

16. 

17. 

 [DEFAULT]
 ignoreip = 127.0.0.1/8 192.168.1.0/24 # 信任IP段

18. 

通过该方案,Fail2Ban可自动将日均暴力破解尝试次数从数千次降至个位数,结合Nginx的limit_req模块使用效果更佳。建议每周审查封禁日志,避免误封合法爬虫或动态IP用户。