
Krawlは、カスタマイズ可能で軽量なクラウドネイティブのWebデセプションサーバー兼アンチクローラーです。現実的でランダムに生成されたデコイデータとAI生成のHTMLテンプレートを使用して、低難易度の脆弱性を持つ偽のWebアプリケーションを作成します。
<h1 align="center">Krawl</h1>
<h3 align="center">
<a name="readme-top"></a>
<img
src="https://raw.githubusercontent.com/blessedrebus/krawl/HEAD/img/krawl-svg.svg"
height="250"
>
</h3>
<div align="center">
<p align="center">
欺瞞的なWebページ、偽の認証情報、カナリートークンを通じて、攻撃者やWebクローラーによる悪意のある活動を検知・追跡するために設計された、モダンでカスタマイズ可能なWebハニーポットサーバーです。
</p>
<div align="center">
<a href="https://github.com/blessedrebus/krawl/blob/main/LICENSE">
<img src="https://img.shields.io/github/license/blessedrebus/krawl" alt="License">
</a>
<a href="https://github.com/blessedrebus/krawl/releases">
<img src="https://img.shields.io/github/v/release/blessedrebus/krawl" alt="Release">
</a>
</div>
<div align="center">
<a href="https://ghcr.io/blessedrebus/krawl">
<img src="https://img.shields.io/badge/ghcr.io-krawl-blue" alt="GitHub Container Registry">
</a>
<a href="https://kubernetes.io/">
<img src="https://img.shields.io/badge/kubernetes-ready-326CE5?logo=kubernetes&logoColor=white" alt="Kubernetes">
</a>
<a href="https://github.com/BlessedRebuS/Krawl/pkgs/container/krawl-chart">
<img src="https://img.shields.io/badge/helm-chart-0F1689?logo=helm&logoColor=white" alt="Helm Chart">
</a>
</div>
</div>
## 目次
- [デモ](#demo)
- [Krawlとは?](#what-is-krawl)
- [Krawlダッシュボード](#krawl-dashboard)
- [デプロイモード](#deployment-modes)
- [Krawlバンリスト](#krawl-banlist)
- [クイックスタート](#quickstart)
- [Docker Run](#docker-run)
- [Docker Compose](#docker-compose)
- [Kubernetes](#kubernetes)
- [Uvicorn (Python)](#uvicorn-python)
- [設定](#configuration)
- [config.yaml](#configuration-via-configyaml)
- [環境変数](#configuration-via-environmental-variables)
- [悪意のあるIPをBANする](#use-krawl-to-ban-malicious-ips)
- [IPレピュテーション](#ip-reputation)
- [リバースプロキシまたはCDNの背後での実行](#running-behind-a-reverse-proxy-or-cdn)
- [メトリクスとモニタリング](#metrics--monitoring)
- [追加ドキュメント](#additional-documentation)
- [AIによる欺瞞](#ai-generated-deception-pages)
- [コントリビューション](#contributing)
## デモ
ヒント: さらなるお楽しみとして `robots.txt` のパスをクロールしてみてください
### Krawl URL: [http://demo.krawlme.com](http://demo.krawlme.com)
### ダッシュボードを見る [http://demo.krawlme.com/das_dashboard](http://demo.krawlme.com/das_dashboard)
## Krawlとは?
**Krawl** は、悪意のある攻撃者、Webクローラー、自動スキャナーを検知し、遅延させ、分析するために設計されたクラウドネイティブな欺瞞サーバーです。
管理パネル、設定ファイル、露出した偽の認証情報など、手に入れやすい餌を詰め込んだリアルな偽のWebアプリケーションを作成し、疑わしい活動を引き寄せて特定します。

攻撃者のリソースを浪費することで、Krawlは悪意のある行為と正当なクローラーを明確に区別するのに役立ちます。
主な機能:
- **[AI生成の欺瞞ページ](https://github.com/blessedrebus/krawl/blob/main/docs/ai_generation.md)**: **攻撃者に偽の脆弱な攻撃対象領域を生成させる**
- **スパイダートラップページ**: [spidertrapプロジェクト](https://github.com/adhdproject/spidertrap)をベースにした、クローラーのリソースを浪費する無限のランダムリンク
- **偽のログインページ**: WordPress、phpMyAdmin、管理パネル
- **ハニーポットパス**: スキャナーを捕まえるためにrobots.txtで宣伝
- **偽の認証情報**: 本物そっくりのユーザー名、パスワード、APIキー
- **[カナリートークン](https://github.com/blessedrebus/krawl/blob/main/docs/canary-token.md)連携**: 外部アラートのトリガー
- **ランダムなサーバーヘッダー**: サーバーヘッダーとバージョンに基づく攻撃を混乱させる
- **リアルタイムダッシュボード**: 疑わしい活動を監視
- **カスタマイズ可能なワードリスト**: 簡単なJSONベースの設定
- **ランダムなエラー注入**: 実際のサーバー動作を模倣
リバースプロキシを使用することで、Krawlを他のサービスと並べて簡単に公開し、Webクローラーや悪意のあるユーザーからそれらを保護できます。詳細は[リバースプロキシのドキュメント](https://github.com/blessedrebus/krawl/blob/main/docs/reverse-proxy.md)を参照してください。

## Krawlダッシュボード
Krawlは、起動時に生成される**ランダムなシークレットパス**、または `KRAWL_DASHBOARD_SECRET_PATH` で設定された**カスタムパス**からアクセスできる包括的なダッシュボードを提供します。これにより、ハニーポットをスキャンする攻撃者からダッシュボードを隠すことができます。
ダッシュボードは6つのタブで構成されています:
- **Overview**: 攻撃活動のハイレベルなビュー: IP発信元のインタラクティブマップ、最近の疑わしいリクエスト、上位のIP、User-Agent、パス。

- **Attacks**: キャプチャされた認証情報、ハニーポットのトリガー、検出された攻撃タイプ(SQLi、XSS、パストラバーサルなど)の詳細な内訳をチャートと表で表示。

- **Threats**: TLSHファジーハッシュによってキャンペーンごとにグループ化されたペイロード。これにより、ウェブシェルとその編集された亜種が無関係なヒットではなく1つのキャンペーンとして扱われ、キャプチャされたすべてのファイルのインデックスも表示されます。
- **IP Insight**: 選択したIPの詳細なフォレンジックビュー: 地理位置情報、ISP/ASN情報、レピュテーションフラグ、行動タイムライン、攻撃タイプの分布、リファラ履歴、キャプチャされたファイルと認証情報、完全なアクセス履歴。

さらに、ダッシュボードのパスワードで認証すると、保護されたタブが利用可能になります:
- **Tracked IPs**: 経時的に監視したいIPアドレスのウォッチリストを維持します。
- **IP Banlist**: IPのBANを管理し、検出された攻撃者を表示し、バンリストをrawまたはIPTables形式でエクスポートします。
- **Timed Out IPs**: 現在ターピットに保持されているIPを確認し、保持すべきでないものを除外します。
- **Deception**: AI生成ページを管理し、エクスポートしたり新しいものをインポートしたりします。
- **Webhooks**: BANをCloudFlareやその他のファイアウォールに転送します。
ヘッダーアイコンからは、APIドキュメント、バンリストのエクスポート、実行中の設定を表示する設定パネル、およびスケジュールされたタスクをオンデマンドで実行するためのメンテナンスページを開くことができます。
詳細は[ダッシュボードのドキュメント](https://github.com/blessedrebus/krawl/blob/main/docs/dashboard.md)を参照してください。
## デプロイモード
Krawlは2つのデプロイモードをサポートしており、`config.yaml` の `mode` 設定または `KRAWL_MODE` 環境変数で制御します。
| | スタンドアロン | スケーラブル |
|---|---|---|
| **データベース** | SQLite (WALモード) | PostgreSQL |
| **キャッシュ** | インメモリPython dict | Redis (マルチティアTTL) |
| **レプリカ** | 1 (単一インスタンス) | 1以上 (水平スケーリング) |
| **外部依存** | なし | PostgreSQL + Redis |
| **最適な用途** | 開発、ホームラボ、50万リクエスト未満 | 本番、HA、50万リクエスト超 |
**スタンドアロン**: 開発環境やリクエスト数が少ないホームラボに最適です。追加設定は不要で、Krawlを実行するだけで動作します。
- 外部依存のない単一コンテナデプロイ
- より低いRAMとリソース使用量
**スケーラブル**: 本番環境や高トラフィックのハニーポット向けに設計されています。Helmチャートはデフォルトでこのモードになります。
- Redisのマルチティアキャッシュにより、より高速で応答性の高いダッシュボード
- RedisがPostgreSQLの前段のホットパスキャッシュとして機能することで、ディスクI/Oを削減
- 水平スケーリングにより、ロードバランサーの背後でKrawlレプリカの数を増やす
詳細な設定、Docker Composeの例、Kubernetes/Helmのセットアップ、ステップバイステップの移行手順については、[デプロイモードのドキュメント](https://github.com/blessedrebus/krawl/blob/main/docs/deployment-modes.md)を参照してください。
## Krawlバンリスト
Krawlは、**ハニーポットトラップをトリガーした攻撃者**のIPアドレスの定期的に更新される[`banlist.txt`](https://github.com/blessedrebus/krawl/blob/main/banlist.txt)を維持しています。バンリストは毎週公開され、ダウンロード可能で、Krawlを使用していなくてもコミュニティが既知の悪意のあるアクターを事前にブロックするのに役立ちます。
バンリストは以下から直接取得することもできます:
[https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw](https://demo.krawlme.com/das_dashboard/api/export-ips?categories=attacker&fwtype=raw)。
### インスタンス間でのバンリストの共有
Krawlインスタンスはバンリストをフェデレートできます: 各インスタンスは自身のリストを
認証不要のパスで公開し、他のインスタンス(または任意のプレーンテキストIPリスト)から
リストを取り込むことができます。取得されたIPはローカルのBAN判定にマージされ、
ダッシュボードに表示されます。```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 Run
最新のイメージを使用して、スタンドアロンモードで 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
2つのデプロイモードのいずれかで `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 チャートを使用](https://github.com/blessedrebus/krawl/blob/main/helm/README.md)して行えます。
Helm チャートは**デフォルトでスケーラブルモード**となり、PostgreSQL と Redis が同梱されます:```bash
helm install krawl oci://ghcr.io/blessedrebus/krawl-chart --version 2.4.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 ファイルが提供されています:
- [`values-minimal.yaml`](https://github.com/blessedrebus/krawl/blob/main/helm/values-minimal.yaml) ---> スケーラブル(デフォルト)
- [`values-standalone.yaml`](https://github.com/blessedrebus/krawl/blob/main/helm/values-standalone.yaml) ---> スタンドアロン
完全な設定と移行手順については、[デプロイメントモード](https://github.com/blessedrebus/krawl/blob/main/docs/deployment-modes.md) と [Chart ドキュメント](https://github.com/blessedrebus/krawl/blob/main/helm/README.md) を参照してください。
### 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 による設定
Docker Compose や Helm チャートのデプロイメントなど、高度な設定には [config.yaml](https://github.com/blessedrebus/krawl/blob/main/config.yaml) ファイルを使用できます。
### 環境変数による設定
すべての設定は環境変数として指定でき、`config.yaml` を上書きします。
変数名は `KRAWL_` に設定パスを大文字で連結したもので、例えば `dashboard.password` は
`KRAWL_DASHBOARD_PASSWORD` になります。
<details>
<summary><b>サーバーとリンク生成</b> (11 変数)</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` | 1 ページあたりのリンク数(`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 の BAN 期間(秒) | `600` |
</details>
<details>
<summary><b>ダッシュボード、メトリクス、ログ</b> (13 変数)</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` | top paths/user agents パネルの最小アクセス数(1 に設定すると無効化) | `5` |
| `KRAWL_DASHBOARD_BRAND_NAME` | ダッシュボードのワードマークと見出しに表示する名前 | `Krawl` |
| `KRAWL_DASHBOARD_BRAND_URL` | ワードマークのリンク先(空の場合はプレーンテキストとして表示) | Krawl のリポジトリ |
| `KRAWL_DASHBOARD_BRAND_LOGO` | GitHub マークの代わりに表示する画像 URL | 未設定 |
| `KRAWL_DASHBOARD_BRAND_SHOW_VERSION` | 名前の横にバージョンを表示する | `true` |
| `KRAWL_DASHBOARD_BRAND_CONTACT` | ワードマークの下に表示する連絡先(アドレス、URL、またはプレーンテキスト) | 未設定 |
| `KRAWL_METRICS_ENABLED` | `/<dashboard_path>/metrics` で Prometheus メトリクスを公開する | `true` |
| `KRAWL_LOG_LEVEL` | アプリケーションのログレベル(`DEBUG`、`INFO`、`WARNING`、`ERROR`) | `INFO` |
</details>
<details>
<summary><b>データベース、保持、バックアップ</b> (12 変数)</summary>
ストレージの場所、データの保持期間、ダンプジョブ。
| 環境変数 | 説明 | デフォルト |
|----------------------|-------------|---------|
| `KRAWL_DATABASE_PATH` | データベースファイルの場所 | `data/krawl.db` |
| `KRAWL_DATABASE_PERSIST_SUSPICIOUS_ONLY` | 疑わしいリクエストのみをアクセスログに永続化する | `false` |
| `KRAWL_MAP_TILE_URL` | ダッシュボードマップのタイル URL テンプレート(`{z}/{x}/{y}`、オプションで `{s}`/`{r}`) | Esri dark canvas |
| `KRAWL_MAP_TILE_ATTRIBUTION` | マップに表示する帰属情報 | Esri/OSM |
| `KRAWL_MAP_API_KEY` | すべてのタイルリクエストにクエリパラメータとして追加 — CARTO で必要 | _(空)_ |
| `KRAWL_MAP_API_KEY_PARAM` | そのクエリパラメータの名前(`api_key`、`apikey`、`key`) | `api_key` |
| `KRAWL_IPV6_IGNORE` | IPv6 リクエストを完全に破棄:stdout には記録されるが、永続化・BAN チェック・エクスポートはされない | `false` |
| `KRAWL_IPV6_PURGE_EXISTING` | 次回起動時に既存の IPv6 行も削除する(不可逆、`KRAWL_IPV6_IGNORE` が必要) | `false` |
| `KRAWL_DATABASE_RETENTION_DAYS` | データベース内のデータを保持する日数 | `30` |
| `KRAWL_BACKUPS_PATH` | データベースダンプを保存するパス | `backups` |
| `KRAWL_BACKUPS_CRON` | バックアップジョブのスケジュールを制御する cron 式 | `*/30 * * * *` |
| `KRAWL_BACKUPS_ENABLED` | DB ダンプジョブを有効にするブール値 | `true` |
</details>
<details>
<summary><b>トラップ:ターピット、欺瞞ページ、カナリア</b> (6 変数)</summary>
オプトインのトラップと、攻撃者に配信されるページ。
| 環境変数 | 説明 | デフォルト |
|----------------------|-------------|---------|
| `KRAWL_TARPIT_ENABLED` | 遅いレスポンスとランダムなテキストで AI エージェントをトラップする | `false` |
| `KRAWL_TARPIT_DELAY_SECONDS` | ターピットが有効な場合にレスポンスごとに追加される遅延(秒) | `5` |
| `KRAWL_DECEPTION_IMPORT_PAGES` | 起動時に `src/templates/deception/` から欺瞞ページを自動インポートする | `true` |
| `KRAWL_CUSTOM_TEMPLATE_PATH` | コンテナ内のカスタム HTML テンプレートへのパス。テンプレートには `{counter}` と `{content}` プレースホルダーを含める必要があります。 | `/templates/custom_page.html` |
| `KRAWL_CANARY_TOKEN_URL` | 外部カナリアトークン URL | なし |
| `KRAWL_CANARY_TOKEN_TRIES` | カナリアトークンを表示するまでのリクエスト数 | `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>脅威インテリジェンスのキャプチャ</b> (4 変数)</summary>
キャプチャしたペイロード(ファイルとフラグ付けされたリクエストボディ)をファジーハッシュし、
ほぼ重複するバリアントをキャンペーンクラスターにグループ化します。`py-tlsh` が必要です。
ハッシュ処理はスケジュールされた `hash-payloads` バックグラウンドタスク(
`src/tasks/hash_payloads.py` を参照)として実行され、キャプチャした各攻撃を一度だけハッシュします —
取り込み時の新規ヒット、および `payload_hash_watermark` ハイウォーターマークで追跡される
既存履歴の一度限りの後方スイープ — その後、ダイジェストを反復パターンのキャンペーンにクラスタリングします。
| 環境変数 | 説明 | デフォルト |
|----------------------|-------------|---------|
| `KRAWL_TLSH_ENABLED` | アップロードされたファイルとフラグ付けされたリクエストボディを TLSH でハッシュし、ほぼ重複するものをクラスタリングする | `true` |
| `KRAWL_TLSH_CLUSTER_THRESHOLD` | ペイロードが既存のキャンペーンに参加する TLSH 距離のしきい値(0 = 同一バイト、ウェブシェルのバリアントは通常 diff < 100) | `150` |
| `KRAWL_TLSH_CAMPAIGN_MIN_EVENTS` | キャンペーンが Threats タブに表示されるまでにペイロードが観測される必要がある回数 | `10` |
| `KRAWL_REFERER_ENABLED` | ベイトチェーン追跡のために、アクセスログに受信 HTTP Referer を記録する | `true` |
</details>
<details>
<summary><b>BAN リストと無視する IP</b> (4 変数)</summary>
他のインスタンスとの BAN リストの共有、および追跡しないトラフィック。
| 環境変数 | 説明 | デフォルト |
|----------------------|-------------|---------|
| `KRAWL_IGNORED_IPS` | 追跡・BAN・エクスポートを一切行わない IP/CIDR のカンマ区切りリスト | ループバック、RFC1918、リンクローカル、CGNAT |
| `KRAWL_BANLIST_EXPORT_PATH` | 公開 BAN リストのダウンロードパス、例 `/public_banlist.txt`(空 = 無効) | `""` |
| `KRAWL_BANLIST_SOURCES` | 取得してマージする上流 BAN リスト URL のカンマ区切りリスト | Krawl コミュニティ BAN リスト |
| `KRAWL_BANLIST_REFRESH_INTERVAL` | 上流 BAN リストの取得間隔(秒) | `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` | 1 日あたりの 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 パスワード | なし |
| `KRAWL_REDIS_CACHE_TTL` | ダッシュボードウォームアップデータの TTL(秒) | `600` |
| `KRAWL_REDIS_HOT_TTL` | ホットパスデータ(BAN 情報、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 リストをエクスポートする 2 つの方法を提供します。
`/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"
```
これにより、さまざまなプラットフォーム間で悪意のあるトラフィックを自動的にブロックできます:
* [OPNsense と pfSense](https://ipv64.net/v64_blocklist_integration_guide)
* [RouterOS](https://rentry.co/krawl-routeros)
* [IPtables](https://github.com/blessedrebus/krawl/blob/main/plugins/iptables/README.md) と [Nftables](https://github.com/blessedrebus/krawl/blob/main/plugins/nftables/README.md)
* [Fail2Ban](https://github.com/blessedrebus/krawl/blob/main/plugins/fail2ban/README.md)
API パラメータの詳細、例、カスタムファイアウォール形式の追加については、[Firewall Exporters ドキュメント](https://github.com/blessedrebus/krawl/blob/main/docs/firewall-exporters.md)を参照してください。
Krawl は、禁止された IP を Cloudflare アカウントの IP リストに直接プッシュして、WAF ルールで使用することもできます。同期はバックグラウンドタスクとして実行され、設定可能な間隔でリストを完全置換によって更新します。詳細は [Cloudflare Banlist Sync](https://github.com/blessedrebus/krawl/blob/main/docs/cloudflare_banlist.md) ドキュメントを参照してください。
## IP レピュテーション
---
[Read more](https://github.com/blessedrebus/krawl)