rhamenator/ai-scraping-defense

GitHub: rhamenator/ai-scraping-defense

一套多层级 AI 爬虫防御系统,通过检测、欺骗与速率限制对抗针对创意与文档网站的自动化抓取机器人。

Stars: 11 | Forks: 3

# AI 爬虫防御 [![codecov](https://codecov.io/gh/rhamenator/ai-scraping-defense/branch/main/graph/badge.svg)](https://codecov.io/gh/rhamenator/ai-scraping-defense) 本项目提供多层级、基于微服务的防御体系,用于对抗复杂的 AI 驱动的 Web 爬虫和恶意机器人。 ## 主要特性 - **分层防御**:结合 Nginx、Lua 与一系列 Python 微服务,实现纵深防御。 - **智能分析**:采用启发式规则、机器学习模型以及可选的 LLM 集成来分析可疑流量。 - **模型无关**:灵活的适配器模式,便于集成各类机器学习模型与 LLM 提供商(OpenAI、Mistral、Cohere 等)。 - **主动反制**:包含“陷阱 API”,主动消耗已确认机器人的资源。 - **终端用户验证**:可选的 reCAPTCHA 验证服务,成功验证的记录可用于训练数据。 - **速率限制**:由小型守护进程写入 Nginx 的自适应 IP 限速。 - **社区封禁列表**:可选的守护进程,从共享封禁列表服务同步 IP。 - **公共社区封禁列表服务**:轻量级 FastAPI 应用,供贡献者共享与获取恶意 IP。 - **联邦威胁共享**:点对点同步,在各部署间交换封禁 IP。 - **容器化**:完全容器化,基于 Docker 构建,可直接部署到 Kubernetes。 - **多租户就绪**:命名空间配置与 Redis 键使用 `TENANT_ID` 实现轻松隔离。 - **可选云集成**:通过环境变量开关 CDN 缓存、DDoS 缓解、托管 TLS 与 Web 应用防火墙。 - **插件 API**:可插入的 Python 模块,允许自定义规则扩展检测逻辑。 - **通过 AI 进行异常检测**:超越启发式规则,集成异常检测模型以实现更灵活的安全防护。 - **API 序列异常检测**:基于马尔可夫的评分机制,识别异常请求模式。 - **爬虫认证与按次计费**:令牌注册与用量统计,支持计费实验。可选择是否允许机器人付费访问或直接拦截。 - **按次计费区块链日志**:可选的哈希链审计日志,用于爬虫计费。详见 `docs/PAY_PER_CRAWL_BLOCKCHAIN_LOG.md`。 - **支付网关集成**:多提供商网关(`StripeGateway`、`PayPalGateway`、`BraintreeGateway`、`SquareGateway`、`AdyenGateway`、`AuthorizeNetGateway` 或通用 HTTP 后端),处理爬虫账户创建、余额查询、收费与退款。 - **AI 迷宫陷阱**:可选的无限迷宫页面,捕获顽固机器人。 - **零信任风险与攻击评分**:占位模块提供风险分析钩子。 - **自动化配置建议**:AI 驱动的服务,分析流量模式并建议防火墙与陷阱参数调整。 - **审计日志**:敏感操作写入循环 `audit.log`,便于取证审查。 - **异常告警动作**:根据异常评分执行告警、封禁或上报。详见 `docs/ANOMALY_ALERTING.md`。 - **RBAC 控制**:管理端点验证 `ADMIN_UI_ROLE` 环境变量,拒绝非管理员用户。 - **管理 UI SSO**:可选 OIDC/SAML 身份验证与 MFA。详见 `docs/ADMIN_UI_SSO.md`。 - **模型版本指标**:Prometheus 指标 `model_version_info` 暴露当前运行的 ML 模型版本。 - **CORS 与 CSP 头**:管理 UI 设置 CORS 策略与默认的 Content-Security-Policy 头。`ADMIN_UI_CORS_ORIGINS` 默认为 `http://localhost`,需明确列出来源;启用凭据时拒绝通配符 `*`。 - **附加安全头**:Nginx 默认发送 `Referrer-Policy`、`Permissions-Policy` 与 `X-Permitted-Cross-Domain-Policies` 头。详见 `docs/SECURITY_HEADERS.md`。 - **结构化错误**:API 错误包含稳定错误码与请求 ID。详见 `docs/ERROR_HANDLING.md`。 - **标准化 HTTP 重试**:共享重试/退避策略与断路器机制。详见 `docs/HTTP_CLIENT_POLICY.md`。 ## 仓库结构 - `src/` —— 核心 Python 微服务与共享模块。 - `scripts/` —— 安装辅助与部署工具。 - `rag/` —— 检索增强生成资源与训练工具。 - `docs/` —— 项目文档。 ## CI 自动化:审计 + 自动修复 - 工作流提供分类审计与自动修复功能,并设有安全护栏: - `/.github/workflows/master-problem-detection.yml`:协调所有分类;输入 `autofix=true` 将为每个分类打开 PR。 - `/.github/workflows/comprehensive-*-audit.yml`:运行单个分类并启用 `autofix`(默认为 true)。 - `/.github/workflows/autofix.yml`:通用自动修复启动器,不执行审计。 - 护栏比较前后结果(flake8、bandit、eslint、yamllint、shellcheck、hadolint、markdownlint、golangci-lint、tflint/tfsec),并在存在测试时运行。若任何指标退化,工作流将打开问题且不启用自动合并。 - PR 将被标记为 `autofix` 及对应分类,仅在护栏通过时启用自动合并。 - 旧版 `security-autofix.yml` 现在委托给通用自动修复器以保持兼容性。 - `security-controls` 工作流作为安全基线门控。详见 `docs/SECURITY_BASELINE_GATE.md`。 ## 发布路径 - `ci-tests.yml` 是推送至 `main` 与拉取请求的主要跨平台验证工作流。 - `tests.yml` 现在作为独立的 Rust 夜间冒烟测试工作流,替代主 PR 测试路径的重复。 - `security-attack-regression.yml` 是确定性 PR 时入口回归门控;它在本地启动 Compose 栈并断言预期的安全行为。 - `kali-security-sweep.yml` 是面向外部攻击扫描的更广泛入口,用于自托管 Kali 运行器对预览或暂存目标的测试。 - 标记版本通过 `/.github/workflows/release-images.yml` 发布签名容器镜像。 - 标记版本也通过 `/.github/workflows/release-bundles.yml` 发布版本化安装包。 详见 [docs/release_checklist.md](docs/release_checklist.md) 与 [docs/release_artifacts.md](docs/release_artifacts.md) 获取预期的发布流程与制品策略。 ## 架构概览 下图展示了主要组件之间的交互方式。请注意,AI 服务仅接收 Webhook 数据并将其入队至 Escalation Engine,后者执行实际分析。详见 [docs/architecture.md](docs/architecture.md) 获取更深入解释。 ``` graph TD subgraph "User / Bot Traffic" direction LR User["👤 User"] Bot["🤖 Bot"] end subgraph "Defense System" direction TB Nginx["🛡️ Nginx Proxy w/ Lua"] subgraph "Analysis & Logic (Python Microservices)" direction LR AIService["AI Service Webhook"] EscalationEngine["🧠 Escalation Engine"] AdminUI["📊 Admin UI"] CloudDashboard["☁️ Cloud Dashboard"] ConfigRecommender["🔧 Config Recommender"] BlocklistSync["🔄 Blocklist Sync"] PeerSync["🔄 Peer Sync"] RateLimitDaemon["⚙️ Rate Limit Daemon"] end subgraph "Countermeasures" TarpitAPI["🕸️ Tarpit API"] end subgraph "Data & State Stores" direction LR Redis["⚡ Redis\n(Blocklist, Cache)"] Postgres["🐘 PostgreSQL\n(Markov Data)"] end end subgraph "External Services" LLM["☁️ LLM APIs\n(OpenAI, Mistral, etc.)"] CommunityBlocklist["☁️ Community Blocklist"] PeerDeployments["☁️ Peer Deployments"] end User -- "Legitimate Request" --> Nginx Bot -- "Suspicious Request" --> Nginx Nginx -- "Block Immediately" --> Bot Nginx -- "Forward for Analysis" --> AIService Nginx -- "Serve Content" --> User Nginx -- "Redirect to Tarpit" --> Bot AIService -- "Queues Request" --> EscalationEngine EscalationEngine -- "Reads/Writes" --> Redis EscalationEngine -- "Reads" --> Postgres EscalationEngine -- "Calls for Final Verdict" --> LLM EscalationEngine -- "Updates" --> AdminUI AdminUI -- "Streams Metrics" --> CloudDashboard AdminUI -- "Feeds" --> ConfigRecommender ConfigRecommender -- "Suggestions" --> AdminUI BlocklistSync -- "Update" --> Redis PeerSync -- "Share IPs" --> Redis RateLimitDaemon -- "Adjust Limits" --> Nginx BlocklistSync -- "Fetch IPs" --> CommunityBlocklist PeerSync -- "Exchange IPs" --> PeerDeployments AdminUI -- "Manages" --> Redis TarpitAPI -- "Reads" --> Postgres ``` ## 威胁模型 详见 [docs/threat_model.md](docs/threat_model.md) 了解本项目所针对的对手与攻击向量。 ## 公共封禁列表 API 公共封禁列表服务需要身份验证。设置 `PUBLIC_BLOCKLIST_API_KEY` 环境变量,并在调用 `/report` 端点时通过 `X-API-Key` 头提供其值。缺少该头或使用错误密钥的请求将收到 HTTP 401 响应。 ## 新手快速开始 以下是特定平台安装前提与运行辅助脚本的步骤。该 脚本复制 `sample.env`(如需极简配置可使用 `sample.env.min`),生成密钥,安装依赖并启动 Docker Compose。详见 [docs/getting_started.md](docs/getting_started.md) 获取完整引导。 ### Linux 1. [安装 Docker Engine](https://docs.docker.com/engine/install/) 并确保其正在运行。 2. 安装 Python 3.10 或更高版本(基于 Debian 的发行版执行 `sudo apt install python3 python3-venv`)。 3. 克隆仓库并执行 Linux 安装脚本: ```bash git clone https://github.com/your-username/ai-scraping-defense.git cd ai-scraping-defense sudo ./scripts/linux/install.sh ``` 4. 容器启动后,打开 [http://localhost:5002](http://localhost:5002) 查看管理 UI 仪表盘。 5. 若出现 “Cannot connect to the Docker daemon”,请启动服务: `sudo systemctl start docker` 并验证 `docker info`。 ### macOS 1. 安装 [Docker Desktop](https://www.docker.com/products/docker-desktop) 并启动应用。 2. 使用 [Homebrew](https://brew.sh/) 安装 3.10+:`brew install python`。 3. 克隆仓库并运行: ```bash git clone https://github.com/your-username/ai-scraping-defense.git cd ai-scraping-defense ./scripts/macos/install.zsh ``` 4. 容器启动后,访问 [http://localhost:5002](http://localhost:5002) 打开管理 UI。 5. 若容器启动失败,请确认 Docker Desktop 正在运行。 6. 详细步骤与安全工具请参考 [macOS 安装指南](docs/macos_setup.md)。 ### Windows 1. 安装 [Docker Desktop for Windows](https://www.docker.com/products/docker-desktop) 并确保其运行。 2. 从 [python.org](https://www.python.org/downloads/windows/) 安装 Python 3.10+。 3. 在 **管理员 PowerShell** 窗口中运行: ```bash git clone https://github.com/your-username/ai-scraping-defense.git cd ai-scraping-defense .\scripts\windows\install.ps1 ``` 4. 容器启动后,访问 [http://localhost:5002](http://localhost:5002) 使用管理 UI。 5. 若无法找到 Docker 命令,请确认 Docker Desktop 正在运行。 ## 快速本地搭建 克隆仓库后运行自动化安装器: ``` git clone https://github.com/your-username/ai-scraping-defense.git cd ai-scraping-defense cp sample.env .env python scripts/validate_env.py sudo ./scripts/linux/install.sh # Linux ./scripts/macos/install.zsh # macOS ``` 对于安全测试环境,辅助脚本 `scripts/linux/security_setup.sh` 将安装所有 Python 依赖与安全工具,供 `scripts/linux/security_scan.sh` 使用。 在 Windows 上,请改用 `scripts\windows\install.ps1`。 Linux 安装器会生成本地密钥,使用 `pip install -r requirements.txt -c constraints.txt` 安装依赖, 随后运行 `python scripts/validate_env.py`,并通过选择的反向代理启动 Docker Compose。 有关 Linux 特定的回滚与卸载步骤,请参见 [docs/linux_installer.md](docs/linux_installer.md)。 该栈需要 Rust 1.78.0。`mise`(或 `rustup`)可自动安装此工具链。 若希望下载标记版本的压缩包而非克隆仓库,可在 Windows 上使用 `.zip`,在 Linux 与 macOS 上使用 `.tar.gz`,然后从解压后的仓库根目录运行相同安装入口点。 若需通过 `llamacpp://` 适配器进行本地 GGUF 推理,请在基础环境就绪后安装可选原生依赖集: ``` pip install -r requirements-local-llm.txt -c constraints.txt ``` 若遇到 `idiomatic_version_file_enable_tools` 警告,可通过以下命令静默: ``` mise settings add idiomatic_version_file_enable_tools rust ``` 若已安装 Rust 1.78.0,可忽略此消息。 详细设置步骤请参考 [docs/getting_started.md](docs/getting_started.md)。 如遇安装错误,请查阅 [docs/troubleshooting.md](docs/troubleshooting.md)。 ## 手动本地搭建 若你希望自行配置所有组件,请按以下步骤操作: 1. **克隆仓库:** ```bash git clone https://github.com/your-username/ai-scraping-defense.git cd ai-scraping-defense ``` 2. **创建环境文件:** 复制示例环境文件或使用交互式助手自定义配置。 ```bash cp sample.env .env # 可选引导式设置 python scripts/interactive_setup.py ``` 交互式助手也可在完成后启动 Docker Compose 或部署至 Kubernetes(若选择继续)。 若同意,密钥将保存至本地 SQLite 数据库 `secrets/local_secrets.db`。选择 **n** 可禁用数据库并清除已存值。 打开 `.env` 并检查默认值。设置 `TENANT_ID` 以实现隔离部署,并添加计划使用的 API 密钥。容器化 Nginx 代理默认监听 `8088`/`8443`,以便与主机上的 Apache 或 Nginx 共存。**生产环境或接管部署**请将 `NGINX_HTTP_PORT` 改为 `80`、`NGINX_HTTPS_PORT` 改为 `443`,并确保该栈是主机上唯一监听的服务。使用 `REAL_BACKEND_HOSTS` 提供以逗号分隔的后端列表用于负载均衡,或使用 `REAL_BACKEND_HOST` 指定单一目标。详见 [docs/ubuntu_reverse_proxy.md](docs/ubuntu_reverse_proxy.md)。 完整上线流程请参考 [docs/test_to_production.md](docs/test_to_production.md)。 3. **设置 Python 虚拟环境:** 运行设置脚本创建虚拟环境并安装所有 Python 依赖。 环境创建后,使用约束文件安装项目要求: ```bash pip install -r requirements.txt -c constraints.txt ``` 若计划使用 Kubernetes 集成,请改用: ```bash pip install -r requirements-kubernetes.txt -c constraints.txt ``` 注意:Kubernetes 客户端当前依赖 `urllib3<2.4.0`,存在已知 CVE。仅在可接受此风险时使用该依赖集。 在 CI 中审计可选的 Kubernetes 依赖集,请运行 `security-controls` 工作流并设置 `audit_kubernetes=true`。 要在 GitHub 运行器上执行可选的 Kubernetes 冒烟测试(使用 kind),触发 `k8s-smoke` 工作流。 *Linux/macOS:* ```bash sudo bash ./reset_venv.sh ``` *Windows(管理员 PowerShell):* ```bash .\reset_venv.ps1 ``` 4. **生成密钥:** 运行密钥生成脚本以创建数据库、Admin UI 及其他服务的密码。脚本将生成 `kubernetes/secrets.yaml` 文件并打印凭证至控制台。运行 `--update-env`(如交互式设置中)时,脚本还会更新 `.env` 并将数据库与 Redis 密码写入 `secrets/pg_password.txt` 与 `secrets/redis_password.txt`,供 Docker Compose 挂载。这些文件在容器内具有可读权限,适用于本地与 CI 使用。 本地密钥安全检查清单: - 对存储密钥的磁盘使用全磁盘加密(LUKS、FileVault、BitLocker)。 - 排除 `secrets/` 目录于任何云同步或备份工具之外。 - 生产环境建议使用密钥管理器(Vault、Docker Secrets 或 Kubernetes Secrets)。 *Linux/macOS:* ```bash bash ./scripts/linux/generate_secrets.sh --update-env # 导出凭证到 JSON 文件 bash ./scripts/linux/generate_secrets.sh --export-path my_secrets.json ``` *Windows:* ```bash .\scripts\windows\Generate-Secrets.ps1 # 保存凭证到 JSON 文件 .\scripts\windows\Generate-Secrets.ps1 -ExportPath my_secrets.json ``` 5. **启用 HTTPS(可选):** 编辑 `.env` 并设置 `ENABLE_HTTPS=true` 以及证书与密钥路径。 设置脚本会在 `nginx/certs/` 生成自签名证书(本地测试足够),生产环境请替换为可信证书。 ```ini ENABLE_HTTPS=true TLS_CERT_PATH=./nginx/certs/tls.crt TLS_KEY_PATH=./nginx/certs/tls.key ``` 6. **启动栈:** 使用 Docker Compose 构建并启动服务: ```bash docker-compose up --build -d ``` 如需强化配置(丢弃 Linux 能力并强制 `no-new-privileges`),请使用: ```bash docker compose -f docker-compose.yaml -f docker-compose.security.yml up -d ``` 如需启用 Nginx 性能优化指令,请使用: ```bash docker compose -f docker-compose.yaml -f docker-compose.performance.yml up -d ``` 若需在前置代理后运行 WordPress,可执行 `./setup_wordpress_website.sh`(Windows 使用 `.ps1`),它将启动 WordPress 与 MariaDB 并自动设置 `REAL_BACKEND_HOST`。如需更轻量测试,可运行 `./setup_fake_website.sh` 创建简易 Nginx 站点。 7. **访问服务:** - **管理 UI:** `http://localhost:5002` - **云仪表盘:** `http://localhost:5006` - **云代理:** `http://localhost:5008` - **提示路由:** `http://localhost:8009` - **Nginx 代理(推荐):** `http://localhost:8088` - **Nginx 代理 HTTPS(如启用):** `https://localhost:8443` - **Apache 代理(可选):** `http://localhost:8080` ## 可功能 多数集成默认关闭以保持轻量。可通过编辑 `.env` 启用: - **Web 应用防火墙**(`ENABLE_WAF`)——挂载 `WAF_RULES_PATH` 下的 ModSecurity 规则。详见 [docs/waf_setup.md](docs/waf_setup.md)。 - **全局 CDN**(`ENABLE_GLOBAL_CDN`)——使用 Cloudflare 进行边缘缓存失效。需 `CLOUD_CDN_ZONE_ID` 与 `CLOUD_CDN_API_TOKEN`(或 `CLOUD_CDN_API_TOKEN_FILE`)。 - **DDoS 缓解**(`ENABLE_DDOS_PROTECTION`)——可选的 `ddos_guard.py` 日志监控,检测洪水模式与体积攻击,并将违规者上报至本地升级引擎。请求也可转发至外部提供者。 - **托管 TLS**(`ENABLE_MANAGED_TLS`)——通过 `TLS_PROVIDER` 自动签发证书,联系人邮箱为 `TLS_EMAIL`。 - **验证码验证**——设置 `CAPTCHA_SECRET` 以激活 reCAPTCHA 挑战。 - **Fail2ban**——启动 `fail2ban` 容器,基于封禁 IP 插入防火墙规则。详见 [docs/fail2ban.md](docs/fail2ban.md)。 - **LLM 陷阱页面**(`ENABLE_TARPIT_LLM_GENERATOR`)——使用 LLM 生成虚假页面(需提供模型 URI)。 - **管理 UI 双因素认证**——设置 `ADMIN_UI_2FA_SECRET`(或 `ADMIN_UI_2FA_SECRET_FILE`)并提供 TOTP 至 `X-2FA-Code` 头。 若 ISP 屏蔽入站托管端口,可通过 Cloudflare Tunnel 暴露本地栈: ``` # Linux quick temporary URL (trycloudflare.com) ./scripts/linux/start_cloudflare_tunnel.sh # 使用现有 Cloudflare Zero Trust 隧道的令牌设置 Linux 命名隧道 CLOUDFLARE_TUNNEL_TOKEN= ./scripts/linux/start_cloudflare_tunnel.sh ``` ``` # macOS ./scripts/macos/start_cloudflare_tunnel.zsh ``` ``` # Windows PowerShell .\scripts\windows\start_cloudflare_tunnel.ps1 ``` ## 项目结构 - `src/` —— 所有 Python 微服务与共享模块。 - `kubernetes/` —— 生产部署所需的 Kubernetes 清单。 - `nginx/` —— Nginx 与 Lua 配置文件。 - `docs/` —— 项目文档(含架构与数据流)。 - 若防病毒软件误报文件,请参考 [docs/antivirus.md](docs/antivirus.md)。 - `test/` —— Python 服务的单元测试。 - `sample.env` —— 本地开发配置模板。详见 [配置参考](docs/configuration.md)。 - `Dockerfile` —— 构建所有 Python 服务的基础镜像。 - `jszip-rs/` —— 伪造 JavaScript 归档的 Rust 实现。 - `markov-train-rs/` —— 马尔可夫训练工具的 Rust 实现。 在安全测试环境中运行前,请先执行 `./scripts/linux/security_setup.sh` 以安装所有单元测试与安全扫描所需依赖。 ### 多租户运行 为每个租户创建独立的 `.env` 文件,使用唯一的 `TENANT_ID` 与端口映射。 使用不同的项目名称启动每个栈,使 Docker Compose 保持服务隔离: ``` docker compose --env-file .env.siteA -p siteA up -d docker compose --env-file .env.siteB -p siteB up -d ``` Redis 键与 SQLite 记录将自动使用租户 ID 作为前缀。 ## AI 模型配置 检测服务从 `.env` 中的 `MODEL_URI` 加载模型。示例包括本地 scikit-learn 文件或外部 API: ``` MODEL_URI=sklearn:///app/models/bot_detection_rf_model.joblib MODEL_URI=openai://gpt-4-turbo MODEL_URI=mistral://mistral-large-latest ``` 对于远程提供者,请在 `.env` 中设置对应的 API 密钥(`OPENAI_API_KEY`、`MISTRAL_API_KEY` 等)。 若使用本地文件且采用 `sklearn://` 方案,文件必须位于受信任目录。默认仅允许从 `models/` 加载(可通过 `TRUSTED_MODEL_DIR` 覆盖)。 文件位于目录之外将被忽略,以避免执行不可信代码。 来自升级引擎的所有 LLM 请求均发送至 **提示路由器**。路由器根据 `PROMPT_ROUTER_HOST` 与 `PROMPT_ROUTER_PORT` 构建目标 URL,并决定使用本地模型或转发至云代理。默认端口值在 `sample.env` 中定义: ``` # excerpt from sample.env PROMPT_ROUTER_PORT=8009 PROMETHEUS_PORT=9090 GRAFANA_PORT=3000 ``` ## 模型适配器指南 [模型适配器指南](docs/model_adapter_guide.md) 说明了所有可用方案及如何扩展系统以支持新提供者。 ## 马尔可夫训练工具(Rust) `markov-train-rs` 包含高性能的语料库加载器。 它通过 PyO3 暴露 `train_from_corpus_rs` 函数供 Python 调用。 仓库锁定在 **Rust 1.78.0**,请确保安装该工具链后再构建。 使用 Cargo 构建扩展: ``` cd markov-train-rs cargo build --release ``` 构建完成后,调用该函数填充 PostgreSQL: ``` python -c "import markov_train_rs, os; markov_train_rs.train_from_corpus_rs(os.environ['CORPUS_FILE_PATH'])" ``` 确保已设置常用环境变量(`PG_HOST`、`PG_PORT`、`PG_DBNAME`、`PG_USER`、`PG_PASSWORD_FILE`),以便库能连接至 PostgreSQL。 ## JS ZIP 生成器(Rust) `jszip-rs` 提供可选的 Rust 后端,用于生成大体积伪造 JavaScript 归档文件,供陷阱使用。可通过 Cargo 构建: ``` cd jszip-rs cargo build --release ``` 构建需要 Python 开发头文件(如 `python3-dev`),以便 PyO3 能链接 `libpython`。 生成的 `jszip_rs` Python 模块将在可用时自动使用。 ## 训练检测模型 `src/rag/training.py` 脚本现支持 `--model` 参数以选择机器学习算法。可选值:`rf`(随机森林,默认)、`xgb`(XGBoost)、`lr`(逻辑回归)。示例用法: ``` python src/rag/training.py --model xgb ``` 该灵活性便于尝试不同分类器。 现在细调路径要求与导出数据集同目录的 provenance sidecar 文件。正常导出流程会自动写入这些元数据文件;导入的数据集应提供匹配的 `*.metadata.json` 文件,否则 `src/rag/finetune.py` 将默认拒绝。 详见 [docs/local_model_training.md](docs/local_model_training.md) 了解信任边界与审查要求。 ## 快速 Kubernetes 部署 运行辅助脚本以一步将全部内容部署到 Kubernetes。确保 `kubernetes/secrets.yaml` 文件已存在(可通过 `scripts/linux/generate_secrets.sh` 或交互式设置生成): ``` ./scripts/linux/quick_deploy.sh # or .\scripts\windows\quick_deploy.ps1 on Windows ``` 在 Windows 上,请运行 `scripts\windows\quick_deploy.ps1`,需使用 **管理员 PowerShell**。 该脚本应用所有清单,不负责生成密钥。 ## 手动 Kubernetes 部署 详细分步指南请参见 [docs/kubernetes_deployment.md](docs/kubernetes_deployment.md)。`scripts/linux/deploy.sh` 与 `scripts/windows/deploy.ps1` 提供手动方案(若需要更多控制)。 ## 云端部署(GKE 示例) 要将栈部署到托管 Kubernetes 服务(如 Google Kubernetes Engine),请遵循 [docs/cloud_provider_deployment.md](docs/cloud_provider_deployment.md)。提供了自动化便利脚本: ``` ./scripts/linux/gke_deploy.sh # or .\scripts\windows\gke_deploy.ps1 on Windows ``` ### GitHub Actions 运行器部署 工作流 `linux-stack.yml` 现演示部署到 GitHub 运行器环境。可从 **Actions** 标签触发以查看部署工件上传。详见 [docs/github_actions_deployment.md](docs/github_actions_deployment.md)。 ## 负载测试辅助 使用辅助脚本测试栈在负载下的表现: ``` ./setup_load_test_suite.sh (or ./setup_load_test_suite.ps1 on Windows) ``` 它安装常用开源工具(**wrk**、**siege**、**ab**、**k6**、**locust**)。请负责任地使用,仅针对你控制的环境。 安装完成后,可使用提供的脚本执行基础压力测试: ``` ./stress_test.ps1 -Target http://your-linux-host:8088 -VUs 50 -DurationSeconds 30 ``` ``` ./stress_test.sh http://your-linux-host:8088 ``` ## 安全扫描辅助 可选脚本 `scripts/linux/security_scan.sh` 与 `scripts/windows/security_scan.ps1` 自动化使用 **Nmap**、**Nikto** 与 **Trivy** 进行漏洞检查。请安装依赖并以适当权限运行以完成网络扫描。详见 [docs/security_scan.md](docs/security_scan.md)。**仅在你拥有或获授权测试的系统上使用。** ## 安全告警管理 ### 从安全告警创建问题 `scripts/create_issues_from_alerts.py` 脚本可自动从代码扫描与密钥扫描告警创建 GitHub 问题,便于跟踪与管理安全发现。 **快速启动:** ``` # 安装依赖项 pip install requests PyGithub # 以仅预览模式运行(不创建问题) export GITHUB_TOKEN="your_github_token" ./scripts/run_create_issues.sh # 创建问题(实时模式) ./scripts/run_create_issues.sh --live ``` **特性:** - ✅ 获取所有开放的代码扫描与密钥扫描告警 - ✅ 合并相似告警以避免创建重复问题 - ✅ 创建包含修复建议的详细问题 - ✅ 在创建前检查现有问题 - ✅ 支持安全演练模式dry-run) **文档:** 详见 [docs/creating_issues_from_alerts.md](docs/creating_issues_from_alerts.md) 获取详细用法。 **自动化:** 工作流每周一自动运行(通过 `.github/workflows/create-issues-from-alerts.yml`)或可从 **Actions** 标签手动触发。 ### 管理与合并告警、问题与 PR `scripts/manage_alerts_issues_prs.py` 脚本可协助管理安全告警、问题与拉取请求,通过识别重复项、诊断错误状态告警并保持仓库整洁。 **快速启动:** ``` # 安装依赖项 pip install requests PyGithub # 以不进行更改的干运行模式运行 export GITHUB_TOKEN="your_github_token" ./scripts/run_alert_management.sh # 或者使用 Python 直接运行 python scripts/manage_alerts_issues_prs.py \ --owner rhamenator \ --repo ai-scraping-defense \ --dry-run ``` **功能:** - ✅ 合并重复的安全告警(代码扫描、密钥扫描、Dependabot) - ✅ 关闭重复的问题与 PR 并附上超期说明 - ✅ 诊断错误状态告警并提出修复建议 - ✅ 生成所有操作的综合报告 该脚本智能分组条目(依据问题描述而非文件路径或 ID),确保跨文件重复告警被正确合并。所有关闭条目均会引用主条目。 **文档:** - **快速启动:** [QUICK_START_ALERT_MANAGEMENT.md](QUICK_START_ALERT_MANAGEMENT.md) - **详细指南:** [docs/alert_management_guide.md](docs/alert_management_guide.md) - **技术文档:** [scripts/ALERT_MANAGEMENT_README.md](scripts/ALERT_MANAGEMENT_README.md) 也可通过 GitHub Actions 自动运行(参见 `.github/workflows/manage-alerts.yml`)。 ## 监控栈 Docker Compose 包含一个轻量级的 Prometheus 与 Grafana 部署。Prometheus 每 15 秒抓取 Python 服务,Grafana 在 `${GRAFANA_PORT:-3000}` 暴露仪表板(默认登录 `admin` / `admin`)。可导入官方仪表板或自定义以监控请求速率与响应时间。 ``` # excerpt from sample.env PROMETHEUS_PORT=9090 GRAFANA_PORT=3000 ``` - **Prometheus UI:** [http://localhost:${PROMETHEUS_PORT:-9090}](http://localhost:9090) 显示原始指标与抓取目标。 - **Grafana UI:** [http://localhost:${GRAFANA_PORT:-3000}](http://localhost:3000)(默认凭据 `admin` / `admin`)。可导入 Grafana 仪表板或自建以监控请求速率与响应时间。 栈中还运行 `watchtower` 容器,每分钟检查镜像更新并自动重启服务。如需手动更新,请注释或移除 `docker-compose.yaml` 中的 `watchtower` 部分。
标签:AI反爬虫, AI驱动安全, Apex, API密钥扫描, API序列异常检测, AppImage, CDN缓存, Cohere, DDoS缓解, Docker, IP封锁, LLM集成, Lua, Mistral, Nginx, NIDS, OpenAI, Python微服务, Redis, rizin, SaaS安全, SEO防护, Tarpit, Web应用防火墙, 内存规避, 内容防护, 反机器人, 可视化界面, 命名空间隔离, 多层防御, 威胁共享, 子域名突变, 安全防御评估, 实时检测, 容器化, 开源项目防护, 异常检测, 托管TLS, 插件API, 搜索引擎查询, 文档站点防护, 日志训练数据, 机器学习, 模型即适配器, 测试用例, 爬虫检测, 社区黑名单, 联邦威胁情报, 自定义请求头, 自适应限流, 蜜罐, 规则扩展, 证书利用, 诱捕, 请求拦截, 逆向工具, 马尔可夫评分, 验证码reCAPTCHA