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).
This commit is contained in:
1 parent
bc96a087dd
commit
cee260d4bd
5 files changed
+383
No files matched your search
@@ -0,0 +1,41 @@
|
||||
# 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)
|
||||
|
||||
Reference in new issue
Block a user