
Krawl v2.3.0
Krawl — это настраиваемый, легковесный, облачный веб-сервер обмана и анти-краулер, который создает поддельные веб-приложения с простыми уязвимостями, используя реалистичные, случайно сгенерированные приманки и HTML-шаблоны, созданные ИИ.
Krawl
Современный настраиваемый honeypot-сервер, предназначенный для обнаружения и отслеживания вредоносной активности атакующих и веб-краулеров с помощью обманных веб-страниц, фейковых учётных данных и canary-токенов.
Содержание
- Демо
- Что такое Krawl?
- Панель управления Krawl
- Режимы развертывания
- Бан-лист Krawl
- Быстрый старт
- Конфигурация
- Блокировка вредоносных IP-адресов
- Репутация IP-адресов
- Работа за обратным прокси или CDN
- Метрики и мониторинг
- Дополнительная документация
- Обман с помощью ИИ
- Вклад в проект
Демо
Совет: для дополнительного интереса загляните в пути из robots.txt.
URL Krawl: http://demo.krawlme.com
Просмотр панели управления: http://demo.krawlme.com/das_dashboard
Что такое Krawl?
Krawl — это cloud-native deception-сервер, предназначенный для обнаружения, задержки и анализа вредоносных атакующих, веб-краулеров и автоматизированных сканеров.
Он создаёт реалистичные фейковые веб-приложения, наполненные легкодоступными приманками, такими как панели администратора, конфигурационные файлы и открытые фейковые учётные данные, чтобы привлекать и выявлять подозрительную активность.

Растрачивая ресурсы атакующих, Krawl помогает чётко отличать вредоносное поведение от легитимных краулеров.
Возможности:
- AI-сгенерированные обманные страницы: Позвольте атакующим помочь создать вашу фейковую уязвимую поверхность атаки
- Страницы-ловушки для пауков: Бесконечные случайные ссылки, чтобы расходовать ресурсы краулеров; основаны на проекте spidertrap
- Фейковые страницы входа: WordPress, phpMyAdmin, панели администратора
- Honeypot-пути: Рекламируются в
robots.txtдля поимки сканеров - Фейковые учётные данные: Реалистичные имена пользователей, пароли, API-ключи
- Интеграция Canary Token: Внешние триггеры оповещений
- Случайные серверные заголовки: Путают атакующих заголовком и версией сервера
- Панель управления в реальном времени: Мониторинг подозрительной активности
- Настраиваемые словари: Простая конфигурация на основе JSON
- Случайная имитация ошибок: Повторяет поведение реального сервера
Вы можете легко опубликовать Krawl рядом с вашими другими сервисами, чтобы защитить их от веб-краулеров и злоумышленников с помощью обратного прокси. Подробнее см. в документации по обратному прокси.

Панель управления Krawl
Krawl предоставляет комплексную панель управления, доступную по случайному секретному пути, генерируемому при запуске, или по пользовательскому пути, заданному через переменную окружения KRAWL_DASHBOARD_SECRET_PATH. Это позволяет скрывать панель от атакующих, сканирующих ваш honeypot.
Панель управления состоит из шести вкладок:
- Обзор: высокоуровневое представление об активности атак: интерактивная карта источников IP-адресов, последние подозрительные запросы, а также топ IP-адресов, User-Agents и путей.

- Атаки: детальная разбивка перехваченных учётных данных, срабатываний honeypot-ловушек и обнаруженных типов атак (SQLi, XSS, обход пути и т.д.) с графиками и таблицами.

- Анализ IP: углублённое криминалистическое представление выбранного IP-адреса: геолокация, информация об ISP/ASN, флаги репутации, поведенческая временная шкала, распределение типов атак и полная история обращений.

Кроме того, после аутентификации с паролем панели управления становятся доступны две защищённые вкладки:
- Отслеживаемые IP: ведите список IP-адресов, за которыми хотите наблюдать с течением времени.
- Бан-лист IP: управляйте блокировками IP, просматривайте обнаруженных атакующих и экспортируйте бан-лист в сыром формате или в формате IPTables.
- Обманные страницы: управляйте AI-сгенерированными страницами, экспортируйте их или импортируйте новые.
Подробнее см. в документации по панели управления.
Режимы развертывания
Krawl поддерживает два режима развертывания, управляемых настройкой mode в config.yaml или переменной окружения KRAWL_MODE.
| Автономный | Масштабируемый | |
|---|---|---|
| База данных | SQLite (WAL mode) | PostgreSQL |
| Кэш | Python-словарь в памяти | Redis (multi-tier TTL) |
| Реплики | 1 (один экземпляр) | 1+ (горизонтальное масштабирование) |
| Внешние зависимости | Нет | PostgreSQL + Redis |
| Лучше всего подходит для | Разработка, домашние лаборатории, <500 тыс. запросов | Продакшн, HA, >500 тыс. запросов |
Автономный: идеален для сред разработки или домашних лабораторий с небольшим количеством запросов. Никакой дополнительной настройки не требуется — просто запустите Krawl, и всё работает.
- Развертывание в одном контейнере без внешних зависимостей
- Меньшее потребление RAM и ресурсов
Масштабируемый: предназначен для производственных сред или honeypot-систем с высокой нагрузкой. Helm-чарт по умолчанию использует этот режим.
- Более быстрая и отзывчивая панель управления благодаря многоуровневому кэшированию Redis
- Меньшая нагрузка на диск, так как Redis выступает в роли горячего кэша перед PostgreSQL
- Горизонтальное масштабирование увеличивает количество реплик Krawl за балансировщиком нагрузки
Подробную конфигурацию, примеры Docker Compose, настройку Kubernetes/Helm и пошаговые инструкции по миграции см. в документации по режимам развертывания.
Бан-лист Krawl
Krawl поддерживает регулярно обновляемый banlist.txt с IP-адресами атакующих, которые активировали его honeypot-ловушки. Бан-лист публикуется еженедельно и доступен для скачивания, что помогает сообществу превентивно блокировать известных злоумышленников даже без использования 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
## Quickstart
### 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
Создайте docker-compose.yaml с одним из двух режимов развёртывания.
Standalone: только сервер 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`). **Измените их перед развертыванием в production.**```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
Production-ready compose-файлы также доступны в каталоге [`docker/`](https://github.com/blessedrebus/krawl/blob/HEAD/docker/). Для **разработки** (сборка из исходного кода с hot-reload) используйте compose-файлы в [`docker/dev/`](https://github.com/blessedrebus/krawl/blob/HEAD/docker/dev/).
Подробнее об обоих режимах см. [Deployment Modes](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-чарта](https://github.com/blessedrebus/krawl/blob/HEAD/helm/README.md).
Helm-чарт **по умолчанию использует масштабируемый режим** со встроенными 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 предоставлены для обоих режимов:
values-minimal.yaml---> Scalable (default)values-standalone.yaml---> Standalone
Полную информацию о конфигурации и инструкции по миграции см. в Режимы развертывания и документации Chart.
Uvicorn (Python)
Запускайте Krawl напрямую с помощью Python 3.13+ и uvicorn для локальной разработки или тестирования:```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` | Path to yaml config file | `config.yaml` |
| `KRAWL_PORT` | Server listening port | `5000` |
| `KRAWL_DELAY` | Response delay in milliseconds | `100` |
| `KRAWL_SERVER_HEADER` | HTTP Server header for deception | `""` |
| `KRAWL_LINKS_LENGTH_RANGE` | Link length range as `min,max` | `5,15` |
| `KRAWL_LINKS_PER_PAGE_RANGE` | Links per page as `min,max` | `10,15` |
| `KRAWL_CHAR_SPACE` | Characters used for link generation | `abcdefgh...` |
| `KRAWL_MAX_COUNTER` | Initial counter value | `10` |
| `KRAWL_PROBABILITY_ERROR_CODES` | Error response probability (0-100%) | `0` |
| `KRAWL_INFINITE_PAGES_FOR_MALICIOUS` | Serve infinite pages to malicious IPs | `true` |
| `KRAWL_MAX_PAGES_LIMIT` | Maximum page limit for crawlers | `250` |
| `KRAWL_BAN_DURATION_SECONDS` | Ban duration in seconds for rate-limited IPs | `600` |
</details>
<details>
<summary><b>Панель управления, метрики и журналирование</b> (8 переменных)</summary>
Доступ к панели управления, прогрев кэша, Prometheus и уровень журналирования.
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `KRAWL_DASHBOARD_SECRET_PATH` | Custom dashboard path | Auto-generated |
| `KRAWL_DASHBOARD_PASSWORD` | Password for protected dashboard panels | Auto-generated |
| `KRAWL_DASHBOARD_CACHE_WARMUP` | Pre-compute dashboard data every 5 minutes for instant page loads | `true` |
| `KRAWL_DASHBOARD_WARMUP_PAGES` | Number of pages to pre-warm per table panel | `10` |
| `KRAWL_DASHBOARD_WARMUP_AGGREGATION` | Pre-compute full top_paths/top_ua aggregations for zero-query serving | `false` |
| `KRAWL_DASHBOARD_TOP_N_MIN_COUNT` | Minimum access count for top paths/user agents panels (set to 1 to disable) | `5` |
| `KRAWL_METRICS_ENABLED` | Expose Prometheus metrics at `/<dashboard_path>/metrics` | `true` |
| `KRAWL_LOG_LEVEL` | Application log level (`DEBUG`, `INFO`, `WARNING`, `ERROR`) | `INFO` |
</details>
<details>
<summary><b>База данных, хранение и резервное копирование</b> (6 переменных)</summary>
Место хранения, срок хранения данных и задание дампа.
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `KRAWL_DATABASE_PATH` | Database file location | `data/krawl.db` |
| `KRAWL_DATABASE_PERSIST_SUSPICIOUS_ONLY` | Only persist suspicious requests to the access log | `false` |
| `KRAWL_DATABASE_RETENTION_DAYS` | Days to retain data in database | `30` |
| `KRAWL_BACKUPS_PATH` | Path where database dump are saved | `backups` |
| `KRAWL_BACKUPS_CRON` | cron expression to control backup job schedule | `*/30 * * * *` |
| `KRAWL_BACKUPS_ENABLED` | Boolean to enable db dump job | `true` |
</details>
<details>
<summary><b>Ловушки: tarpit, страницы обмана и canary</b> (6 переменных)</summary>
Дополнительные ловушки и страницы, отдаваемые атакующим.
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `KRAWL_TARPIT_ENABLED` | Trap AI agents with slow responses and random text | `false` |
| `KRAWL_TARPIT_DELAY_SECONDS` | Extra delay in seconds added per response when tarpit is active | `5` |
| `KRAWL_DECEPTION_IMPORT_PAGES` | Auto-import deception pages from `src/templates/deception/` at startup | `true` |
| `KRAWL_CUSTOM_TEMPLATE_PATH` | Path inside the container to a custom HTML template. Template must include `{counter}` and `{content}` placeholders. | `/templates/custom_page.html` |
| `KRAWL_CANARY_TOKEN_URL` | External canary token URL | None |
| `KRAWL_CANARY_TOKEN_TRIES` | Requests before showing canary token | `10` |
</details>
<details>
<summary><b>Анализатор репутации IP-адресов</b> (6 переменных)</summary>
Пороговые значения, определяющие классификацию IP-адреса.
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `KRAWL_HTTP_RISKY_METHODS_THRESHOLD` | Threshold for risky HTTP methods detection | `0.1` |
| `KRAWL_VIOLATED_ROBOTS_THRESHOLD` | Threshold for robots.txt violations | `0.1` |
| `KRAWL_UNEVEN_REQUEST_TIMING_THRESHOLD` | Coefficient of variation threshold for timing | `0.5` |
| `KRAWL_UNEVEN_REQUEST_TIMING_TIME_WINDOW_SECONDS` | Time window for request timing analysis in seconds | `300` |
| `KRAWL_USER_AGENTS_USED_THRESHOLD` | Threshold for detecting multiple user agents | `2` |
| `KRAWL_ATTACK_URLS_THRESHOLD` | Threshold for attack URL detection | `1` |
</details>
<details>
<summary><b>Бан-листы и игнорируемые IP-адреса</b> (4 переменных)</summary>
Обмен бан-листами с другими экземплярами и трафик, который никогда не отслеживается.
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `KRAWL_IGNORED_IPS` | Comma-separated IPs/CIDRs never tracked, banned or exported | Loopback, RFC1918, link-local, CGNAT |
| `KRAWL_BANLIST_EXPORT_PATH` | Public banlist download path, e.g. `/public_banlist.txt` (empty = disabled) | `""` |
| `KRAWL_BANLIST_SOURCES` | Comma-separated upstream banlist URLs to fetch and merge | Бан-лист сообщества Krawl |
| `KRAWL_BANLIST_REFRESH_INTERVAL` | Seconds between upstream banlist fetches | `3600` |
</details>
<details>
<summary><b>Страницы обмана, созданные ИИ</b> (10 переменных)</summary>
См. [документацию по генерации ИИ](https://github.com/blessedrebus/krawl/blob/HEAD/docs/ai_generation.md).
| Environment Variable | Description | Default |
|----------------------|-------------|---------|
| `KRAWL_AI_ENABLED` | Enable AI-generated deception pages | `false` |
| `KRAWL_AI_PROVIDER` | AI provider (`"openrouter"` or `"openai"`) | `"openrouter"` |
| `KRAWL_AI_OPENAI_BASE_URL` | Optional OpenAI Base URL for custom API endpoints | `"https://api.openai.com/v1"` |
| `KRAWL_AI_API_KEY` | API key for AI provider | `None` |
| `KRAWL_AI_MODEL` | AI model to use for page generation | `"nvidia/nemotron-3-super-120b-a12b:free"` |
| `KRAWL_AI_TIMEOUT` | Request timeout in seconds for AI API calls | `60` |
| `KRAWL_AI_MAX_DAILY_REQUESTS` | Max number of AI-generated pages per day (0 = unlimited) | `0` |
| `KRAWL_AI_PROMPT` | Custom prompt template for AI page generation | Default prompt |
| `KRAWL_AI_REASONING_ENABLED` | Enable reasoning tokens (OpenRouter reasoning models only) | `false` |
| `KRAWL_AI_REASONING_EFFORT` | 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` | Deployment mode (`standalone` or `scalable`) | `standalone` |
| `KRAWL_POSTGRES_HOST` | PostgreSQL hostname | `localhost` |
| `KRAWL_POSTGRES_PORT` | PostgreSQL port | `5432` |
| `KRAWL_POSTGRES_USER` | PostgreSQL username | `krawl` |
| `KRAWL_POSTGRES_PASSWORD` | PostgreSQL password | `krawl` |
| `KRAWL_POSTGRES_DATABASE` | PostgreSQL database name | `krawl` |
| `KRAWL_REDIS_HOST` | Redis hostname | `localhost` |
| `KRAWL_REDIS_PORT` | Redis port | `6379` |
| `KRAWL_REDIS_DB` | Redis database number | `0` |
| `KRAWL_REDIS_PASSWORD` | Redis password | None |
| `KRAWL_REDIS_CACHE_TTL` | TTL in seconds for dashboard warmup data | `600` |
| `KRAWL_REDIS_HOT_TTL` | TTL in seconds for hot-path data (ban info, IP categories) | `30` |
| `KRAWL_REDIS_TABLE_TTL` | TTL in seconds for paginated dashboard tables | `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"
This enables automatic blocking of malicious traffic across various platforms:
Полные параметры API, примеры и добавление пользовательских форматов межсетевых экранов см. в документации Firewall Exporters.
Krawl также может отправлять заблокированные IP-адреса непосредственно в IP-список аккаунта Cloudflare для использования в правилах WAF. Синхронизация выполняется как фоновая задача и обновляет список путем полной замены через настраиваемый интервал. См. документацию Cloudflare Banlist Sync.
IP-репутация
Krawl использует задачи, которые анализируют недавний трафик для построения и непрерывного обновления оценки репутации IP-адресов. Он запускается периодически и оценивает каждый активный IP-адрес на основе множества поведенческих индикаторов, классифицируя его как атакующего, краулера или обычного пользователя. Пороговые значения полностью настраиваются.

Анализ включает:
- Использование рискованных HTTP-методов (например, соотношение POST, PUT, DELETE)
- Нарушения Robots.txt
- Аномалии тайминга запросов (пакетные или нерегулярные паттерны)
- Согласованность User-Agent
- Обнаружение атакующих URL (например, SQL-инъекции, XSS-паттерны)
Каждый сигнал вносит вклад в взвешенную модель оценки, которая присваивает категорию репутации:
attackerbad_crawlergood_crawlerregular_userunknown(при недостаточности данных)
Полученные оценки и метрики сохраняются в базе данных и используются Krawl для поддержки информационных панелей, отслеживания репутации и автоматических действий по смягчению угроз, таких как блокировка IP-адресов или интеграция с межсетевым экраном.
ИИ-генерируемые обманные страницы
Krawl может автоматически генерировать реалистичные обманные страницы с помощью ИИ-моделей из API OpenRouter или OpenAI. Эта функция создает уникальные правдоподобные страницы-ловушки на лету, чтобы обманывать атакующих без ручного создания страниц.
Основные возможности:
- Динамическая генерация: Создает уникальные HTML-страницы для любого пути запроса
- Умное кэширование: Кэширует сгенерированные страницы, чтобы избежать избыточных API-вызовов
- Ежедневное ограничение частоты запросов: Контролируйте расходы на API с помощью настраиваемых лимитов запросов
- Несколько провайдеров: Поддержка OpenRouter (бесплатные варианты) и OpenAI
- Корректный откат: Возврат к стандартной странице-ловушке при отключении или достижении лимита
- Кэшированная выдача: Ранее сгенерированные страницы обслуживаются даже при отключенном ИИ
Быстрая настройка:```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
Подробную информацию о настройке и использовании см. в [документации по генерации с помощью ИИ](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 предоставляет метрики [Prometheus](https://prometheus.io/) по адресу `/<dashboard_secret_path>/metrics` (включено по умолчанию) и поставляется с готовым к импорту дашбордом [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).
## Дополнительная документация
| Тема | Описание |
|-------|-------------|
| [Генерация с помощью ИИ](https://github.com/blessedrebus/krawl/blob/HEAD/docs/ai_generation.md) | Настройка генерируемых ИИ обманных страниц с помощью OpenRouter или OpenAI |
| [Обманные страницы](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) режимы, конфигурация и миграция данных |
| [Honeypot](https://github.com/blessedrebus/krawl/blob/HEAD/docs/honeypot.md) | Полный обзор honeypot-страниц: поддельные формы входа, листинги каталогов, файлы с учетными данными, ловушки 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) | Собственный JSON API Krawl: справочник конечных точек, аутентификация, интерактивная документация OpenAPI и загрузка вложений |
| [Внешние API](https://github.com/blessedrebus/krawl/blob/HEAD/docs/api.md) | Сторонние API, к которым Krawl обращается для получения данных об IP-адресах, репутации и геолокации |
| [Обратный прокси](https://github.com/blessedrebus/krawl/blob/HEAD/docs/reverse-proxy.md) | Как развернуть Krawl за NGINX или использовать подставные поддомены |
| [Резервное копирование базы данных](https://github.com/blessedrebus/krawl/blob/HEAD/docs/backups.md) | Включение и настройка автоматического задания по дампу базы данных |
| [Canary-токен](https://github.com/blessedrebus/krawl/blob/HEAD/docs/canary-token.md) | Настройка внешних триггеров оповещений через canarytokens.org |
| [Wordlist](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) | Отправляет заблокированные IP-адреса из Krawl в список IP учетной записи Cloudflare для использования в правилах WAF. Синхронизация выполняется как фоновая задача и обновляет список полной заменой. |
| [Экспортеры межсетевого экрана](https://github.com/blessedrebus/krawl/blob/HEAD/docs/firewall-exporters.md) | Экспорт бан-листов IP-адресов в форматах raw, iptables или nftables через REST API |
| [Tarpit](https://github.com/blessedrebus/krawl/blob/HEAD/docs/tarpit.md) | Замедление и «отравление» ИИ-краулеров задержанными ответами с шумовым заполнением |
| [Метрики и мониторинг](https://github.com/blessedrebus/krawl/blob/HEAD/docs/monitoring.md) | Конечная точка метрик Prometheus, справочник метрик, дашборд Grafana и сбор данных ServiceMonitor |
## Внесение вклада
Вклад приветствуется! Пожалуйста:
1. Сделайте форк репозитория
2. Создайте feature-ветку
3. Внесите свои изменения
4. Отправьте pull request (опишите изменения!)
## Отказ от ответственности
> [!CAUTION]
> Это система обмана/honeypot. Развертывайте её в изолированных средах и внимательно следите за событиями безопасности. Используйте ответственно и в соответствии с применимыми законами и нормативными актами.
## История звёзд
<img src="https://star-history.dera.page/svg?repos=BlessedRebuS/Krawl&type=Date" width="600" alt="Star History Chart" />