在Web服务面临频繁的扫描攻击、暴力破解或DDoS试探时,Fail2Ban作为一款轻量级入侵防御工具,可通过动态封禁恶意IP,显著降低服务器风险。本文结合HTTP场景,解析其配置与优化策略。
1. Fail2Ban核心原理****
Fail2Ban通过监控系统日志(如Nginx/Apache访问日志),使用正则表达式匹配恶意行为(如高频404错误、暴力登录尝试),触发临时封禁规则(通过iptables/firewalld)。其优势在于:
· 实时响应:秒级检测并封禁攻击源。
· 低资源占用:无需额外代理或复杂架构。
· 可扩展性:支持自定义过滤规则与动作。
2. 典型HTTP攻击场景与检测规则****
·
场景1:高频404错误(目录扫描)
攻击者通过遍历URL路径探测漏洞。配置规则示例:
·
·
ini
·
·
| # /etc/fail2ban/filter.d/nginx-404.conf | ||
|---|---|---|
| [Definition] | ||
| failregex = ^ -.*"(GET | HEAD).*HTTP/1.[01]" 404 | |
| ignoreregex = |
·
匹配日志中连续404的IP,触发封禁。
·
·
场景2:暴力破解(如WordPress登录)
针对/wp-login.php的POST请求失败:
·
·
ini
·
·
| # /etc/fail2ban/filter.d/nginx-wp-brute.conf | |
|---|---|
| failregex = ^ -."(POST)./wp-login.php.*HTTP/1.[01]" 403 |
·
·
场景3:SQL注入特征匹配
检测日志中包含'、UNION SELECT等关键词的请求:
·
·
ini
·
·
| | failregex = ^ -."(GET|POST).('|UNION SELECT|--).*HTTP/1.[01]" | | - | ------------------------------------------------------------------------------- |
·
3. 配置Fail2Ban服务****
·
安装与依赖
在Ubuntu/CentOS上安装:
·
·
bash
·
·
| sudo apt install fail2ban # Debian/Ubuntu | |
|---|---|
| sudo yum install fail2ban # CentOS/RHEL |
·
确保系统已启用iptables/firewalld。
·
·
创建自定义Jail
编辑/etc/fail2ban/jail.local,添加HTTP相关规则:
·
·
ini
·
·
| [nginx-404] | |
|---|---|
| enabled = true | |
| filter = nginx-404 | |
| logpath = /var/log/nginx/access.log | |
| maxretry = 50 # 50次404后封禁 | |
| findtime = 600 # 10分钟内 | |
| bantime = 86400 # 封禁24小时 | |
| action = iptables[name=HTTP, port=http, protocol=tcp] | |
| [nginx-wp-brute] | |
| enabled = true | |
| filter = nginx-wp-brute | |
| logpath = /var/log/nginx/access.log | |
| maxretry = 10 | |
| bantime = 3600 |
·
·
重启服务
·
·
bash
·
·
| sudo systemctl restart fail2ban | |
|---|---|
| sudo fail2ban-client status # 查看运行状态 |
·
4. 优化与注意事项****
· 避免误封
· 排除合法爬虫(如Googlebot)的User-Agent或IP段。
· 调整maxretry和findtime,平衡安全与可用性。
· 日志轮转
确保logrotate配置不会中断Fail2Ban的日志监控。
· 多服务支持
对Apache,修改logpath为/var/log/apache2/access.log,并调整正则表达式。
5. 高级功能扩展****
· 自定义通知
通过action参数集成邮件或Slack告警,及时响应攻击。
· 白名单机制
在ignoreip中添加内部IP或CDN节点,避免误封。
· 与WAF联动
结合ModSecurity规则,实现多层防御。
通过Fail2Ban的精细化配置,可有效遏制针对HTTP服务的自动化攻击。建议定期