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

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

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


威胁:将有效载荷按 TLSH 模糊哈希分组为战役,因此一个 webshell 及其编辑变体会被识别为同一战役,而非不相关的命中,并附有所有捕获文件的索引。
IP 洞察:对所选 IP 的深入取证视图:地理位置、ISP/ASN 信息、信誉标记、行为时间线、攻击类型分布、引用来源历史、捕获的文件和凭据,以及完整的访问历史。

此外,使用仪表盘密码进行身份验证后,受保护的标签页将变为可用:
标题栏图标可打开 API 文档、封禁列表导出,以及一个显示运行配置的设置面板和一个用于按需运行计划任务的维护页面。
更多详情,请参阅仪表盘文档。
Krawl 支持两种部署模式,由 config.yaml 中的 mode 设置或 KRAWL_MODE 环境变量控制。
| 独立模式 | 可扩展模式 | |
|---|---|---|
| 数据库 | SQLite (WAL 模式) | PostgreSQL |
| 缓存 | 内存中的 Python 字典 | Redis(多级 TTL) |
| 副本数 | 1(单实例) | 1+(水平扩展) |
| 外部依赖 | 无 | PostgreSQL + Redis |
| 适用场景 | 开发、家庭实验室、<50 万请求 | 生产、高可用、>50 万请求 |
独立模式:适用于开发环境或请求量较低的家庭实验室。无需额外配置,只需运行 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