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

2.0 KiB

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)