Files
qihuaiflow/docs/security/nginx-rate-limit-and-blocker.md
T
qihu-bot cee260d4bd P1-2 nginx 限流 + 扫描器拦截 (20260810-153624)
三档限流 (api 30r/s, admin 5r/s, login 1r/s) + UA / path 黑名单 (return 444) + 自动黑名单脚本 (5min cron, 24h TTL). 实测首跑封禁 222.128.55.233 (4xx=31) 和 120.55.61.72 (UA=zgrab).
2026-08-10 15:36:25 +08:00

42 lines
2.0 KiB
Markdown

# nginx 限流 + 扫描器拦截 (P1-2, 2026-08-10)
## 概述
平台 nginx 已加固,三档限流 + 扫描器指纹拦截 + 自动黑名单,降低被攻击 / 资源耗尽风险。
## 三档速率限制
| 区域 | 速率 | burst | 用途 |
|------|------|-------|------|
| api_limit (zone 10m) | 30 r/s | 60 nodelay | /app/* 普通 API |
| admin_limit (zone 10m) | 5 r/s | 10 nodelay | /app/api/admin/* / market/admin/* / internal/* |
| login_limit (zone 1m) | 1 r/s | 5 nodelay | /app/api/auth/login / auth/register / casdoor/* |
## 扫描器拦截 (return 444)
- 路径:/wp-admin/ /wp-login /xmlrpc.php /administrator/ /phpmyadmin/ /.env /.git/ /actuator/* /server-status /server-info /elmah.axd /shell.php /.well-known/security
- UA:zgrab nmap masscan nikto sqlmap acunetix nessus wpscan dirbuster gobuster ffuf hydra metasploit Havij TSWeb MJ12bot AhrefsBot SemrushBot DotBot PetalBot Aspera HTTrack Scrapy libwww
- 客户端 SDK:curl/* wget/* python-requests/* 等自动化库会关闭
## 自动黑名单(block_ip.py)
/app/backend/nginx/block_ip.py 每 5 分钟跑一次,识别以下模式自动 deny 24h:
- 单 IP 5min 内 >= 6 次 444
- 单 IP 5min 内 >= 20 次 4xx
- 单次 UA 匹配扫描器
- 单次路径匹配扫描器
黑名单持久化到 /etc/nginx/blocked_ips.conf,自动 nginx -s reload 生效。
## 部署
- 配置文件:容器内 /etc/nginx/conf.d/aiflow.conf
- 重载命令:docker exec qihu-aiflow sh -c "nginx -t && nginx -s stop && nginx"
- 真实用户浏览器访问**不受影响**(正常 Mozilla UA),只拦自动化 / 扫描器。
## 已知限制
- 仅 nginx 层面拦截,无法 TCP-level SYN flood 防护(需 CDN/WAF)
- 容器内 iptables 受限,所以未装 fail2ban(改用 nginx 黑名单等价物)
- 客户端 SDK 默认 deny,server-to-server 调用需在代码层绕过 (走 app/core/llm_router.py 等内部路径)
## 验证
- 30+ 用例验证(health / index / api / 限流 / 拦截 / 黑名单 reload)
- 实际首跑封禁 222.128.55.233 (4xx=31) 和 120.55.61.72 (UA=zgrab)