
Krawl v2.3.0
Krawl是一个可定制、轻量级、云原生的网络诱骗服务器和反爬虫工具,它利用逼真、随机生成的诱饵数据和AI生成的HTML模板,创建具有低悬果实漏洞的虚假Web应用。
Krawl
目录
- 演示
- 什么是 Krawl?
- Krawl 仪表盘
- 部署模式
- Krawl 封禁列表
- 快速开始
- 配置
- 封禁恶意 IP
- IP 信誉
- 在反向代理或 CDN 后运行
- 指标与监控
- 其他文档
- 使用 AI 的欺骗页面
- 参与贡献
演示
提示:爬取 robots.txt 中的路径可以获得额外乐趣
Krawl 网址:http://demo.krawlme.com
查看仪表盘 http://demo.krawlme.com/das_dashboard
什么是 Krawl?
Krawl 是一款云原生的欺骗服务器,旨在检测、拖延并分析恶意攻击者、网络爬虫和自动化扫描器。
它创建逼真的虚假 Web 应用程序,其中布满唾手可得的诱饵,如管理后台、配置文件以及暴露的伪造凭据,以吸引并识别可疑活动。

通过消耗攻击者的资源,Krawl 能够清晰地将恶意行为与合法爬虫区分开来。
它具有以下特性:
- AI 生成的欺骗页面:让攻击者帮你生成伪造的脆弱攻击面
- 蜘蛛陷阱页面:基于 spidertrap 项目 生成无限随机链接,消耗爬虫资源
- 伪造登录页面:WordPress、phpMyAdmin、管理后台
- 蜜罐路径:在 robots.txt 中公布以捕获扫描器
- 伪造凭据:逼真的用户名、密码、API 密钥
- Canary 令牌 集成:触发外部告警
- 随机服务器响应头:根据服务器头和版本迷惑攻击
- 实时仪表盘:监控可疑活动
- 可自定义字典:基于 JSON 的简易配置
- 随机错误注入:模拟真实服务器行为
你可以通过反向代理轻松地将 Krawl 与你的其他服务一同对外暴露,从而保护它们免受网络爬虫和恶意用户的侵扰。更多详情请参阅反向代理文档。

Krawl 仪表盘
Krawl 提供了一个功能全面的仪表盘,可通过启动时生成的随机秘密路径访问,或通过 KRAWL_DASHBOARD_SECRET_PATH 配置的自定义路径访问,使其对扫描蜜罐的攻击者保持隐藏。
仪表盘分为六个选项卡:
- 概览:攻击活动的高层级视图:IP 来源交互式地图、最近的可疑请求,以及排名靠前的 IP、User-Agent 和路径。

- 攻击:捕获的凭据、蜜罐触发事件以及检测到的攻击类型(SQLi、XSS、路径遍历等)的详细分类,包含图表和表格。

- IP 洞察:所选 IP 的深度取证视图:地理位置、ISP/ASN 信息、信誉标记、行为时间线、攻击类型分布以及完整访问历史。

此外,使用仪表盘密码认证后,两个受保护的选项卡将变为可用:
- 追踪的 IP:维护一个你想长期监控的 IP 地址观察列表。
- IP 封禁列表:管理 IP 封禁、查看检测到的攻击者,并以原始或 IPTables 格式导出封禁列表。
- 欺骗页面:管理 AI 生成的页面、导出或导入新的页面。
更多详情请参阅仪表盘文档。
部署模式
Krawl 支持两种部署模式,可通过 config.yaml 中的 mode 设置或 KRAWL_MODE 环境变量进行控制。
| 独立模式 | 可扩展模式 | |
|---|---|---|
| 数据库 | SQLite(WAL 模式) | PostgreSQL |
| 缓存 | 内存中的 Python dict | Redis(多层 TTL) |
| 副本数 | 1(单实例) | 1+(水平扩展) |
| 外部依赖 | 无 | PostgreSQL + Redis |
| 适用场景 | 开发环境、家庭实验室、<500k 请求 | 生产环境、高可用、>500k 请求 |
独立模式:非常适合开发环境或请求量较低的家庭实验室。无需任何额外配置,直接运行 Krawl 即可工作。
- 单容器部署,无外部依赖
- 更低的内存和资源占用
可扩展模式:专为生产环境或高流量蜜罐设计。Helm chart 默认使用此模式。
- 借助 Redis 多层缓存,仪表盘更快速、更灵敏
- Redis 作为 PostgreSQL 前的热路径缓存,降低磁盘 I/O
- 水平扩展可增加负载均衡器后方的 Krawl 副本数量
有关详细配置、Docker Compose 示例、Kubernetes/Helm 部署以及分步迁移说明,请参阅部署模式文档。
Krawl 封禁列表
Krawl 维护着一个定期更新的 banlist.txt,其中包含触发其蜜罐陷阱的攻击者的 IP 地址。该封禁列表每周发布并可供下载,帮助社区即使不使用 Krawl 也能预先封禁已知的恶意行为者。
该封禁列表也可以直接从以下地址获取: https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw。
在实例之间共享封禁列表
Krawl 实例之间可以联合共享封禁列表:每个实例都可以在无需认证的路径上发布自己的列表, 并从其他实例(或任何纯文本 IP 列表)拉取列表。拉取到的 IP 会合并到本地封禁决策中,并显示在仪表盘上。```yaml banlist:
Public, unauthenticated download path for this instance's banlist.
Supports the same ?categories= and ?fwtype= parameters as the main API.
Empty = disabled.
export_path: "/public_banlist.txt"
Upstream banlists to fetch and merge. Plain ".txt" lists work too.
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
使用两种部署模式之一创建 docker-compose.yaml。
独立模式:仅包含 Krawl 服务器与 Sqlite 存储:```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/HEAD/docker/) 目录中。对于**开发**(从源代码构建并支持热重载),请使用 [`docker/dev/`](https://github.com/blessedrebus/krawl/blob/HEAD/docker/dev/) 中的 compose 文件。
有关这两种模式的更多详细信息,请参阅 [部署模式](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deployment-modes.md)。
### Kubernetes
**Krawl 也可原生用于 Kubernetes**。可以通过 [清单](https://github.com/blessedrebus/krawl/blob/HEAD/kubernetes/README.md) 或 [使用 Helm chart](https://github.com/blessedrebus/krawl/blob/HEAD/helm/README.md) 进行安装。
Helm chart **默认采用可扩展模式**,并捆绑了 PostgreSQL 和 Redis:```bash
helm install krawl oci://ghcr.io/blessedrebus/krawl-chart --version 2.3.0 \
-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-minimal.yaml---> 可扩展(默认)values-standalone.yaml---> 独立
查看 部署模式 和 Chart 文档 获取完整配置和迁移说明。
Uvicorn (Python)
使用 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/HEAD/config.yaml) 文件进行高级配置,例如 Docker Compose 或 Helm chart 部署。
### 通过环境变量配置
所有设置都可以通过环境变量提供,这些变量会覆盖 `config.yaml`。
变量名由 `KRAWL_` 加上大写的设置路径组成,因此 `dashboard.password`
变为 `KRAWL_DASHBOARD_PASSWORD`。
<details>
<summary><b>服务器与链接生成</b>(12 个变量)</summary>
Krawl 如何呈现自身并构建生成页面的迷宫。
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `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 和日志级别。
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `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>
存储位置、数据保留时长以及转储任务。
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `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>
可选加入的陷阱以及提供给攻击者的页面。
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `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 如何被分类的阈值。
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `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>
与其他实例共享封禁列表,以及永不跟踪的流量。
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `KRAWL_IGNORED_IPS` | 以逗号分隔的 IP/CIDR 列表,这些地址永远不会被跟踪、封禁或导出 | Loopback、RFC1918、link-local、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/HEAD/docs/ai_generation.md)。
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `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` | 启用推理 token(仅限 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/HEAD/docs/deployment-modes.md)。
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `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 封禁列表同步 文档。
IP 信誉
Krawl 使用任务分析近期流量,以构建并持续更新 IP 信誉 评分。它会定期运行,基于多种行为指标评估每个活跃 IP 地址,以将其分类为攻击者、爬虫或普通用户。阈值完全可自定义。

分析内容包括:
- 高风险 HTTP 方法使用(例如 POST、PUT、DELETE 的比率)
- Robots.txt 违规
- 请求时序异常(突发或不规则模式)
- User-Agent 一致性
- 攻击 URL 检测(例如 SQL 注入、XSS 模式)
每个信号都会对加权评分模型做出贡献,该模型会分配一个信誉类别:
attackerbad_crawlergood_crawlerregular_userunknown(数据不足时)
最终的分数和指标存储在数据库中,供 Krawl 用于驱动仪表盘、信誉追踪以及自动缓解操作,例如 IP 封禁或防火墙集成。
AI 生成的诱骗页面
Krawl 可以使用 OpenRouter 或 OpenAI API 中的 AI 模型自动生成逼真的诱骗页面。此功能可即时创建独一无二、看似合理的蜜罐页面,从而无需手动创建页面即可诱骗攻击者。
主要特性:
- 动态生成:为任意请求路径创建独特的 HTML 页面
- 智能缓存:缓存生成的页面以避免重复的 API 调用
- 每日速率限制:通过可配置的请求限额控制 API 成本
- 多提供商支持:支持 OpenRouter(免费选项)和 OpenAI
- 优雅降级:在禁用或达到限制时回退到标准蜜罐
- 缓存服务:即使 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/HEAD/docs/ai_generation.md)。
您还可以通过提交 PR 来**贡献欺骗模板**,请参阅 [贡献欺骗模板](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deception_pages.md#contributing-deception-templates-via-pr)。
## 在反向代理或 CDN 后运行
**NGINX、Traefik 以及 CloudFlare 等其他代理**需要转发请求头,以便 Krawl 能够看到真实的 IP。有关配置示例和完整的请求头列表,请参阅 [反向代理文档](https://github.com/blessedrebus/krawl/blob/HEAD/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/HEAD/grafana-dashboard.json)。
有关完整的指标列表、Grafana 导入步骤以及 Prometheus / Kubernetes(`ServiceMonitor`)抓取配置,请参阅 [监控文档](https://github.com/blessedrebus/krawl/blob/HEAD/docs/monitoring.md)。
## 其他文档
| 主题 | 描述 |
|-------|-------------|
| [AI 生成](https://github.com/blessedrebus/krawl/blob/HEAD/docs/ai_generation.md) | 使用 OpenRouter 或 OpenAI 配置 AI 生成的欺骗页面 |
| [欺骗页面](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deception_pages.md) | 管理、导入和导出欺骗页面;批量操作与基于日期的筛选 |
| [部署模式](https://github.com/blessedrebus/krawl/blob/HEAD/docs/deployment-modes.md) | 独立模式(SQLite)与可扩展模式(PostgreSQL + Redis)、配置及数据迁移 |
| [蜜罐](https://github.com/blessedrebus/krawl/blob/HEAD/docs/honeypot.md) | 蜜罐页面的完整概览:假登录、目录列表、凭据文件、SQLi/XSS/XXE/命令注入陷阱等 |
| [仪表板](https://github.com/blessedrebus/krawl/blob/HEAD/docs/dashboard.md) | 访问并探索实时监控仪表板 |
| [仪表板 API](https://github.com/blessedrebus/krawl/blob/HEAD/docs/dashboard-api.md) | Krawl 自有的 JSON API:端点参考、身份验证、交互式 OpenAPI 文档及附件下载 |
| [外部 API](https://github.com/blessedrebus/krawl/blob/HEAD/docs/api.md) | Krawl 为获取 IP 数据、信誉和地理位置而调用的第三方 API |
| [反向代理](https://github.com/blessedrebus/krawl/blob/HEAD/docs/reverse-proxy.md) | 如何在 NGINX 后部署 Krawl 或使用诱饵子域名 |
| [数据库备份](https://github.com/blessedrebus/krawl/blob/HEAD/docs/backups.md) | 启用并配置自动数据库转储任务 |
| [金丝雀令牌](https://github.com/blessedrebus/krawl/blob/HEAD/docs/canary-token.md) | 通过 canarytokens.org 设置外部警报触发器 |
| [词表](https://github.com/blessedrebus/krawl/blob/HEAD/docs/wordlist.md) | 自定义虚假用户名、密码和目录列表 |
| [架构](https://github.com/blessedrebus/krawl/blob/HEAD/docs/architecture.md) | 代码库、请求管道、数据库架构和后台任务的技术概述 |
| [Cloudflare 封禁列表同步](https://github.com/blessedrebus/krawl/blob/HEAD/docs/cloudflare_banlist.md) | 将 Krawl 中的被封禁 IP 推送到 Cloudflare 账户 IP 列表,以供 WAF 规则使用。该同步作为后台任务运行,并通过完全替换的方式更新列表。 |
| [防火墙导出器](https://github.com/blessedrebus/krawl/blob/HEAD/docs/firewall-exporters.md) | 通过 REST API 以 raw、iptables 或 nftables 格式导出 IP 封禁列表 |
| [蜜罐减速器(Tarpit)](https://github.com/blessedrebus/krawl/blob/HEAD/docs/tarpit.md) | 通过延迟和噪声填充响应来拖慢并毒化 AI 爬虫 |
| [指标与监控](https://github.com/blessedrebus/krawl/blob/HEAD/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 历史图表" />