提示:爬取 robots.txt 中的路径可获得额外乐趣
Krawl 是一款云原生欺骗服务器,旨在检测、拖延并分析恶意攻击者、网络爬虫和自动化扫描器。
它会创建逼真的虚假 Web 应用,其中充满唾手可得的诱饵,如管理面板、配置文件以及暴露的虚假凭据,以吸引并识别可疑活动。

通过消耗攻击者的资源,Krawl 帮助清晰地区分恶意行为与合法爬虫。
其特性包括:
你可以轻松地将 Krawl 与其他服务一同通过反向代理暴露,以保护它们免受网络爬虫和恶意用户的侵扰。更多详情请参阅反向代理文档。

Krawl 提供了一个全面的仪表盘,可通过启动时生成的随机秘密路径访问,或通过 KRAWL_DASHBOARD_SECRET_PATH 配置的自定义路径访问。这使仪表盘对扫描蜜罐的攻击者保持隐藏。
仪表盘分为六个标签页:



此外,使用仪表盘密码认证后,两个受保护的标签页将变为可用:
更多详情请参阅仪表盘文档。
Krawl 支持两种部署模式,由 config.yaml 中的 mode 设置或 KRAWL_MODE 环境变量控制。
独立模式:适用于请求量较低的开发环境或家庭实验室。无需任何额外配置,直接运行 Krawl 即可工作。
可扩展模式:专为生产环境或高流量蜜罐设计。Helm chart 默认使用此模式。
有关详细配置、Docker Compose 示例、Kubernetes/Helm 部署以及分步迁移说明,请参阅部署模式文档。
Krawl 维护一份定期更新的 banlist.txt,其中包含触发其蜜罐陷阱的攻击者的 IP 地址。该封禁列表每周发布并可供下载,帮助社区即使不使用 Krawl 也能主动阻止已知的恶意行为者。
该封禁列表也可直接从以下地址获取: https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw。
Krawl 实例可以联合其封禁列表:每个实例都可以在未认证的路径上发布自己的列表,并从其他实例(或任何纯文本 IP 列表)拉取列表。 获取的 IP 会被合并到本地封禁决策中,并显示在仪表盘上。```yaml banlist:
export_path: "/public_banlist.txt"
sources: - "https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw" - "https://krawl.example.com/public_banlist.txt"
refresh_interval: 3600 # seconds between fetches
## 快速入门
### Docker 运行
使用最新镜像以独立模式运行 Krawl:```bash
docker run -d \
-p 5000:5000 \
-e KRAWL_DASHBOARD_SECRET_PATH="/my-secret-dashboard" \
-e KRAWL_DASHBOARD_PASSWORD="my-secret-password" \
-v krawl-data:/app/data \
--name krawl \
ghcr.io/blessedrebus/krawl:latest
访问服务器:http://localhost:5000
创建一个 docker-compose.yaml,使用以下两种部署模式之一。
独立模式:仅使用 Sqlite 存储的 Krawl 服务器:```yaml services: krawl: image: ghcr.io/blessedrebus/krawl:latest container_name: krawl-server ports: - "5000:5000" environment: - CONFIG_LOCATION=config.yaml # - KRAWL_DASHBOARD_PASSWORD=my-secret-password volumes: - ./config.yaml:/app/config.yaml:ro - krawl-data:/app/data restart: unless-stopped
volumes: krawl-data:
**可扩展**:搭配 PostgreSQL 和 Redis:
> [!CAUTION]
> 以下示例使用了**默认密码**(`krawl`/`krawl`)。**在部署到生产环境之前,请务必修改它们。**```yaml
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: krawl
POSTGRES_USER: krawl
POSTGRES_PASSWORD: krawl
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U krawl -d krawl"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
krawl:
image: ghcr.io/blessedrebus/krawl:latest
container_name: krawl-server
ports:
- "5000:5000"
environment:
- CONFIG_LOCATION=config.yaml
- KRAWL_MODE=scalable
- KRAWL_POSTGRES_HOST=postgres
- KRAWL_POSTGRES_PORT=5432
- KRAWL_POSTGRES_USER=krawl
- KRAWL_POSTGRES_PASSWORD=krawl
- KRAWL_POSTGRES_DATABASE=krawl
- KRAWL_REDIS_HOST=redis
- KRAWL_REDIS_PORT=6379
# - KRAWL_DASHBOARD_PASSWORD=my-secret-password
volumes:
- ./config.yaml:/app/config.yaml:ro
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
volumes:
postgres_data:
redis_data:
要部署,只需运行```bash docker compose up -d
生产就绪的 compose 文件也位于 [`docker/`](https://github.com/blessedrebus/krawl/blob/main/docker) 目录中。对于**开发**(从源码构建并支持热重载),请使用 [`docker/dev/`](https://github.com/blessedrebus/krawl/blob/main/docker/dev) 中的 compose 文件。
有关这两种模式的更多详情,请参阅 [部署模式](https://github.com/blessedrebus/krawl/blob/main/docs/deployment-modes.md)。
### Kubernetes
**Krawl 也可原生运行于 Kubernetes 上**。安装可通过[清单](https://github.com/blessedrebus/krawl/blob/main/kubernetes/README.md)或[使用 Helm chart](https://github.com/blessedrebus/krawl/blob/main/helm/README.md)完成。
Helm chart **默认采用可扩展模式**,并内置 PostgreSQL 和 Redis:```bash
helm install krawl oci://ghcr.io/blessedrebus/krawl-chart --version 2.3.1 \
-n krawl-system --create-namespace \
--set postgres.password=your-password \
--set redis.password=your-redis-password \
--set dashboardPassword=your-dashboard-password \
--set config.dashboard.secret_path=/my-secret-dashboard
为两种模式均提供了最小化示例 values 文件:
values-minimal.yaml ---> 可扩展(默认)values-standalone.yaml ---> 独立完整的配置与迁移说明,请参阅 部署模式 和 Chart 文档。
使用 Python 3.13+ 和 uvicorn 直接运行 Krawl,适用于本地开发或测试:```bash pip install -r requirements.txt uvicorn app:app --host 0.0.0.0 --port 5000 --app-dir src --no-server-header
通过 `http://localhost:5000` 访问服务器
## 配置
Krawl 采用**配置层级结构**,其中**环境变量优先于配置文件**。此方法推荐用于 Docker 部署和快速的开箱即用定制。
### 通过 config.yaml 配置
您可以使用 [config.yaml](https://github.com/blessedrebus/krawl/blob/main/config.yaml) 文件进行高级配置,例如 Docker Compose 或 Helm chart 部署。
### 通过环境变量配置
所有设置都可以通过环境变量提供,这些变量会覆盖 `config.yaml`。
变量名格式为 `KRAWL_` 加上大写的设置路径,因此 `dashboard.password`
变为 `KRAWL_DASHBOARD_PASSWORD`。
<details>
<summary><b>服务器与链接生成</b>(12 个变量)</summary>
Krawl 如何呈现自身并构建生成的页面迷宫。
| 环境变量 | 描述 | 默认值 |
|----------------------|-------------|---------|
| `CONFIG_LOCATION` | yaml 配置文件路径 | `config.yaml` |
| `KRAWL_PORT` | 服务器监听端口 | `5000` |
| `KRAWL_DELAY` | 响应延迟(毫秒) | `100` |
| `KRAWL_SERVER_HEADER` | 用于欺骗的 HTTP Server 头 | `""` |
| `KRAWL_LINKS_LENGTH_RANGE` | 链接长度范围,格式为 `min,max` | `5,15` |
| `KRAWL_LINKS_PER_PAGE_RANGE` | 每页链接数,格式为 `min,max` | `10,15` |
| `KRAWL_CHAR_SPACE` | 用于链接生成的字符集 | `abcdefgh...` |
| `KRAWL_MAX_COUNTER` | 初始计数器值 | `10` |
| `KRAWL_PROBABILITY_ERROR_CODES` | 错误响应概率(0-100%) | `0` |
| `KRAWL_INFINITE_PAGES_FOR_MALICIOUS` | 向恶意 IP 提供无限页面 | `true` |
| `KRAWL_MAX_PAGES_LIMIT` | 爬虫的最大页面限制 | `250` |
| `KRAWL_BAN_DURATION_SECONDS` | 被限速 IP 的封禁时长(秒) | `600` |
</details>
<details>
<summary><b>仪表盘、指标与日志</b>(8 个变量)</summary>
仪表盘访问、缓存预热、Prometheus 和日志级别。
| 环境变量 | 描述 | 默认值 |
|----------------------|-------------|---------|
| `KRAWL_DASHBOARD_SECRET_PATH` | 自定义仪表盘路径 | 自动生成 |
| `KRAWL_DASHBOARD_PASSWORD` | 受保护仪表盘面板的密码 | 自动生成 |
| `KRAWL_DASHBOARD_CACHE_WARMUP` | 每 5 分钟预计算仪表盘数据以实现即时页面加载 | `true` |
| `KRAWL_DASHBOARD_WARMUP_PAGES` | 每个表格面板预热的页面数量 | `10` |
| `KRAWL_DASHBOARD_WARMUP_AGGREGATION` | 预计算完整的 top_paths/top_ua 聚合以实现零查询服务 | `false` |
| `KRAWL_DASHBOARD_TOP_N_MIN_COUNT` | 热门路径/用户代理面板的最低访问次数(设为 1 可禁用) | `5` |
| `KRAWL_METRICS_ENABLED` | 在 `/<dashboard_path>/metrics` 暴露 Prometheus 指标 | `true` |
| `KRAWL_LOG_LEVEL` | 应用日志级别(`DEBUG`、`INFO`、`WARNING`、`ERROR`) | `INFO` |
</details>
<details>
<summary><b>数据库、保留策略与备份</b>(6 个变量)</summary>
存储位置、数据保留时长以及转储任务。
| 环境变量 | 描述 | 默认值 |
|----------------------|-------------|---------|
| `KRAWL_DATABASE_PATH` | 数据库文件位置 | `data/krawl.db` |
| `KRAWL_DATABASE_PERSIST_SUSPICIOUS_ONLY` | 仅将可疑请求持久化到访问日志 | `false` |
| `KRAWL_DATABASE_RETENTION_DAYS` | 数据在数据库中的保留天数 | `30` |
| `KRAWL_BACKUPS_PATH` | 数据库转储保存路径 | `backups` |
| `KRAWL_BACKUPS_CRON` | 控制备份任务调度的 cron 表达式 | `*/30 * * * *` |
| `KRAWL_BACKUPS_ENABLED` | 启用数据库转储任务的布尔值 | `true` |
</details>
<details>
<summary><b>陷阱:tarpit、欺骗页面与 canary</b>(6 个变量)</summary>
可选加入的陷阱以及提供给攻击者的页面。
| 环境变量 | 描述 | 默认值 |
|----------------------|-------------|---------|
| `KRAWL_TARPIT_ENABLED` | 通过慢速响应和随机文本诱捕 AI 代理 | `false` |
| `KRAWL_TARPIT_DELAY_SECONDS` | tarpit 激活时每次响应额外增加的延迟(秒) | `5` |
| `KRAWL_DECEPTION_IMPORT_PAGES` | 启动时从 `src/templates/deception/` 自动导入欺骗页面 | `true` |
| `KRAWL_CUSTOM_TEMPLATE_PATH` | 容器内自定义 HTML 模板的路径。模板必须包含 `{counter}` 和 `{content}` 占位符。 | `/templates/custom_page.html` |
| `KRAWL_CANARY_TOKEN_URL` | 外部 canary token URL | None |
| `KRAWL_CANARY_TOKEN_TRIES` | 显示 canary token 之前的请求次数 | `10` |
</details>
<details>
<summary><b>IP 信誉分析器</b>(6 个变量)</summary>
决定 IP 如何被分类的阈值。
| 环境变量 | 描述 | 默认值 |
|----------------------|-------------|---------|
| `KRAWL_HTTP_RISKY_METHODS_THRESHOLD` | 风险 HTTP 方法检测阈值 | `0.1` |
| `KRAWL_VIOLATED_ROBOTS_THRESHOLD` | robots.txt 违规阈值 | `0.1` |
| `KRAWL_UNEVEN_REQUEST_TIMING_THRESHOLD` | 请求时间间隔的变异系数阈值 | `0.5` |
| `KRAWL_UNEVEN_REQUEST_TIMING_TIME_WINDOW_SECONDS` | 请求时间分析的时间窗口(秒) | `300` |
| `KRAWL_USER_AGENTS_USED_THRESHOLD` | 检测多个用户代理的阈值 | `2` |
| `KRAWL_ATTACK_URLS_THRESHOLD` | 攻击 URL 检测阈值 | `1` |
</details>
<details>
<summary><b>封禁列表与忽略的 IP</b>(4 个变量)</summary>
与其他实例共享封禁列表,以及永不跟踪的流量。
| 环境变量 | 描述 | 默认值 |
|----------------------|-------------|---------|
| `KRAWL_IGNORED_IPS` | 以逗号分隔的 IP/CIDR,永不跟踪、封禁或导出 | 回环地址、RFC1918、链路本地、CGNAT |
| `KRAWL_BANLIST_EXPORT_PATH` | 公共封禁列表下载路径,例如 `/public_banlist.txt`(空 = 禁用) | `""` |
| `KRAWL_BANLIST_SOURCES` | 以逗号分隔的上游封禁列表 URL,用于获取并合并 | Krawl 社区封禁列表 |
| `KRAWL_BANLIST_REFRESH_INTERVAL` | 两次上游封禁列表获取之间的间隔(秒) | `3600` |
</details>
<details>
<summary><b>AI 生成的欺骗页面</b>(10 个变量)</summary>
参见 [AI 生成文档](https://github.com/blessedrebus/krawl/blob/main/docs/ai_generation.md)。
| 环境变量 | 描述 | 默认值 |
|----------------------|-------------|---------|
| `KRAWL_AI_ENABLED` | 启用 AI 生成的欺骗页面 | `false` |
| `KRAWL_AI_PROVIDER` | AI 提供商(`"openrouter"` 或 `"openai"`) | `"openrouter"` |
| `KRAWL_AI_OPENAI_BASE_URL` | 用于自定义 API 端点的可选 OpenAI Base URL | `"https://api.openai.com/v1"` |
| `KRAWL_AI_API_KEY` | AI 提供商的 API 密钥 | `None` |
| `KRAWL_AI_MODEL` | 用于页面生成的 AI 模型 | `"nvidia/nemotron-3-super-120b-a12b:free"` |
| `KRAWL_AI_TIMEOUT` | AI API 调用的请求超时时间(秒) | `60` |
| `KRAWL_AI_MAX_DAILY_REQUESTS` | 每天 AI 生成页面的最大数量(0 = 无限制) | `0` |
| `KRAWL_AI_PROMPT` | AI 页面生成的自定义提示词模板 | 默认提示词 |
| `KRAWL_AI_REASONING_ENABLED` | 启用推理令牌(仅限 OpenRouter 推理模型) | `false` |
| `KRAWL_AI_REASONING_EFFORT` | 推理努力程度(`none`、`minimal`、`low`、`medium`、`high`、`xhigh`) | `"medium"` |
</details>
<details>
<summary><b>可扩展模式:PostgreSQL 与 Redis</b>(13 个变量)</summary>
仅在 `KRAWL_MODE=scalable` 时使用。参见 [部署模式](https://github.com/blessedrebus/krawl/blob/main/docs/deployment-modes.md)。
| 环境变量 | 描述 | 默认值 |
|----------------------|-------------|---------|
| `KRAWL_MODE` | 部署模式(`standalone` 或 `scalable`) | `standalone` |
| `KRAWL_POSTGRES_HOST` | PostgreSQL 主机名 | `localhost` |
| `KRAWL_POSTGRES_PORT` | PostgreSQL 端口 | `5432` |
| `KRAWL_POSTGRES_USER` | PostgreSQL 用户名 | `krawl` |
| `KRAWL_POSTGRES_PASSWORD` | PostgreSQL 密码 | `krawl` |
| `KRAWL_POSTGRES_DATABASE` | PostgreSQL 数据库名称 | `krawl` |
| `KRAWL_REDIS_HOST` | Redis 主机名 | `localhost` |
| `KRAWL_REDIS_PORT` | Redis 端口 | `6379` |
| `KRAWL_REDIS_DB` | Redis 数据库编号 | `0` |
| `KRAWL_REDIS_PASSWORD` | Redis 密码 | None |
| `KRAWL_REDIS_CACHE_TTL` | 仪表盘预热数据的 TTL(秒) | `600` |
| `KRAWL_REDIS_HOT_TTL` | 热路径数据(封禁信息、IP 分类)的 TTL(秒) | `30` |
| `KRAWL_REDIS_TABLE_TTL` | 分页仪表盘表格的 TTL(秒) | `120` |
</details>
例如```bash
# Set canary token
export CONFIG_LOCATION="config.yaml"
export KRAWL_CANARY_TOKEN_URL="http://your-canary-token-url"
# Set number of pages range (min,max format)
export KRAWL_LINKS_PER_PAGE_RANGE="5,25"
# Set analyzer thresholds
export KRAWL_HTTP_RISKY_METHODS_THRESHOLD="0.2"
export KRAWL_VIOLATED_ROBOTS_THRESHOLD="0.15"
# Set custom dashboard path and password
export KRAWL_DASHBOARD_SECRET_PATH="/my-secret-dashboard"
export KRAWL_DASHBOARD_PASSWORD="my-secret-password"
使用环境变量的 Docker 运行示例(独立模式):```bash
docker run -d
-p 5000:5000
-e KRAWL_MODE=standalone
-e KRAWL_PORT=5000
-e KRAWL_DELAY=100
-e KRAWL_DASHBOARD_PASSWORD="my-secret-password"
-e KRAWL_CUSTOM_TEMPLATE_PATH="/templates/custom_page.html"
-e KRAWL_CANARY_TOKEN_URL="http://your-canary-token-url"
--name krawl
ghcr.io/blessedrebus/krawl:latest
## 使用 Krawl 封禁恶意 IP
Krawl 采用基于信誉的系统来对攻击者 IP 地址进行分类,并提供两种导出 IP 列表的方式,以便与防火墙集成。
`/api/export-ips` 端点直接查询数据库,并支持按 IP 类别(`attacker`、`bad_crawler`、`regular_user`、`good_crawler`)和输出格式(`raw`、`iptables`、`nftables`)进行过滤:```bash
curl "https://your-krawl-instance/<DASHBOARD-PATH>/api/export-ips?categories=attacker&fwtype=raw"
此项功能可在多种平台上自动阻止恶意流量:
有关完整的 API 参数、示例以及添加自定义防火墙格式,请参阅 防火墙导出器文档。
Krawl 还可以将封禁的 IP 直接推送到 Cloudflare 账户 IP 列表,用于 WAF 规则。该同步作为后台任务运行,并在可配置的间隔内通过完全替换来更新列表。请参阅 Cloudflare 封禁列表同步 文档。
Krawl 使用分析近期流量的任务来构建并持续更新 IP 信誉 评分。它会定期运行,并根据多种行为指标评估每个活跃 IP 地址,将其分类为攻击者、爬虫或普通用户。阈值完全可自定义。

分析包括:
每个信号都会贡献给一个加权评分模型,该模型会分配一个信誉类别:
attackerbad_crawlergood_crawlerregular_userunknown(用于数据不足的情况)生成的评分和指标存储在数据库中,Krawl 使用它们来驱动仪表板、信誉跟踪以及自动缓解操作,例如 IP 封禁或防火墙集成。
Krawl 可以使用 OpenRouter 或 OpenAI API 中的 AI 模型自动生成逼真的诱骗页面。此功能可即时创建独特且可信的蜜罐页面,无需手动创建页面即可欺骗攻击者。
主要特性:
快速设置:```yaml ai: enabled: true provider: "openrouter" openai_base_url: "your-custom-base-url" api_key: "your-api-key" model: "nvidia/nemotron-3-super-120b-a12b:free" timeout: 60 max_daily_requests: 10
如需详细的配置和使用说明,请参阅 [AI 生成文档](https://github.com/blessedrebus/krawl/blob/main/docs/ai_generation.md)。
您还可以通过提交 PR 来**贡献欺骗模板**,请参阅 [贡献欺骗模板](https://github.com/blessedrebus/krawl/blob/main/docs/deception_pages.md#contributing-deception-templates-via-pr)。
## 在反向代理或 CDN 后运行
**NGINX、Traefik 以及其他代理(如 CloudFlare)** 需要转发请求头,以便 Krawl 能够看到真实的 IP 地址。请参阅 [反向代理文档](https://github.com/blessedrebus/krawl/blob/main/docs/reverse-proxy.md) 获取配置示例和完整的请求头列表。
## 指标与监控
Krawl 在 `/<dashboard_secret_path>/metrics` 路径下暴露 [Prometheus](https://prometheus.io/) 指标(默认启用),并附带一个可直接导入的 [Grafana](https://grafana.com/) 仪表盘,位于 [`grafana-dashboard.json`](https://github.com/blessedrebus/krawl/blob/main/grafana-dashboard.json)。
请参阅 [监控文档](https://github.com/blessedrebus/krawl/blob/main/docs/monitoring.md) 获取完整的指标列表、Grafana 导入步骤以及 Prometheus / Kubernetes(`ServiceMonitor`)抓取配置。
## 其他文档
| 主题 | 描述 |
|-------|-------------|
| [AI 生成](https://github.com/blessedrebus/krawl/blob/main/docs/ai_generation.md) | 使用 OpenRouter 或 OpenAI 配置 AI 生成的欺骗页面 |
| [欺骗页面](https://github.com/blessedrebus/krawl/blob/main/docs/deception_pages.md) | 管理、导入和导出欺骗页面;批量操作和基于日期的筛选 |
| [部署模式](https://github.com/blessedrebus/krawl/blob/main/docs/deployment-modes.md) | 独立模式(SQLite)与可扩展模式(PostgreSQL + Redis)、配置和数据迁移 |
| [蜜罐](https://github.com/blessedrebus/krawl/blob/main/docs/honeypot.md) | 蜜罐页面的完整概述:虚假登录、目录列表、凭据文件、SQLi/XSS/XXE/命令注入陷阱等 |
| [仪表盘](https://github.com/blessedrebus/krawl/blob/main/docs/dashboard.md) | 访问并探索实时监控仪表盘 |
| [仪表盘 API](https://github.com/blessedrebus/krawl/blob/main/docs/dashboard-api.md) | Krawl 自身的 JSON API:端点参考、身份验证、交互式 OpenAPI 文档和附件下载 |
| [外部 API](https://github.com/blessedrebus/krawl/blob/main/docs/api.md) | Krawl 为获取 IP 数据、信誉和地理位置而调用的第三方 API |
| [反向代理](https://github.com/blessedrebus/krawl/blob/main/docs/reverse-proxy.md) | 如何在 NGINX 后部署 Krawl 或使用诱饵子域名 |
| [数据库备份](https://github.com/blessedrebus/krawl/blob/main/docs/backups.md) | 启用和配置自动数据库转储任务 |
| [金丝雀令牌](https://github.com/blessedrebus/krawl/blob/main/docs/canary-token.md) | 通过 canarytokens.org 设置外部警报触发器 |
| [词表](https://github.com/blessedrebus/krawl/blob/main/docs/wordlist.md) | 自定义虚假用户名、密码和目录列表 |
| [架构](https://github.com/blessedrebus/krawl/blob/main/docs/architecture.md) | 代码库、请求管道、数据库模式和后台任务的技术概述 |
| [Cloudflare 封禁列表同步](https://github.com/blessedrebus/krawl/blob/main/docs/cloudflare_banlist.md) | 将 Krawl 中被封禁的 IP 推送到 Cloudflare 账户 IP 列表,用于 WAF 规则。该同步作为后台任务运行,并通过完全替换的方式更新列表。 |
| [防火墙导出器](https://github.com/blessedrebus/krawl/blob/main/docs/firewall-exporters.md) | 通过 REST API 以原始、iptables 或 nftables 格式导出 IP 封禁列表 |
| [Tarpit](https://github.com/blessedrebus/krawl/blob/main/docs/tarpit.md) | 通过延迟和噪声填充的响应来拖慢并干扰 AI 爬虫 |
| [指标与监控](https://github.com/blessedrebus/krawl/blob/main/docs/monitoring.md) | Prometheus 指标端点、暴露的指标参考、Grafana 仪表盘和 ServiceMonitor 抓取 |
## 贡献
欢迎贡献!请:
1. Fork 该仓库
2. 创建一个功能分支
3. 进行您的更改
4. 提交一个拉取请求(请说明更改内容!)
## 免责声明
> [!CAUTION]
> 这是一个欺骗/蜜罐系统。请在隔离环境中部署并仔细监控安全事件。请负责任地使用,并遵守适用的法律法规。
## Star 历史
<img src="https://star-history.dera.page/svg?repos=BlessedRebuS/Krawl&type=Date" width="600" alt="Star 历史图表" />
| 独立模式 | 可扩展模式 |
|---|
| 数据库 | SQLite (WAL 模式) | PostgreSQL |
| 缓存 | 内存 Python dict | Redis(多层 TTL) |
| 副本 | 1(单实例) | 1+(水平扩展) |
| 外部依赖 | 无 | PostgreSQL + Redis |
| 适用场景 | 开发、家庭实验室、<50 万请求 | 生产、高可用、>50 万请求 |