
Krawl — это настраиваемый, легковесный, облачный веб-сервер обмана и анти-краулер, который создает поддельные веб-приложения с простыми уязвимостями, используя реалистичные, случайно сгенерированные приманки и HTML-шаблоны, созданные ИИ.
Современный настраиваемый сервер-ловушка (honeypot) для веб-приложений, предназначенный для обнаружения и отслеживания вредоносной активности злоумышленников и веб-краулеров с помощью обманных веб-страниц, поддельных учетных данных и canary-токенов.
Совет: для дополнительного интереса просканируйте пути из robots.txt
Krawl — это облачный сервер-обманка (deception server), предназначенный для обнаружения, задержки и анализа вредоносных злоумышленников, веб-краулеров и автоматических сканеров.
Он создает реалистичные поддельные веб-приложения, наполненные «легкой добычей»: панелями администратора, файлами конфигурации и раскрытыми поддельными учетными данными, чтобы привлекать и выявлять подозрительную активность.

Расходуя ресурсы злоумышленников, Krawl помогает четко отличать вредоносное поведение от легитимных краулеров.
Возможности:
Вы можете легко разместить Krawl рядом с другими вашими сервисами, чтобы защитить их от веб-краулеров и вредоносных пользователей с помощью обратного прокси. Подробнее см. в документации по обратному прокси.

Krawl предоставляет полнофункциональную панель управления, доступную по случайному секретному пути, генерируемому при запуске, или по пользовательскому пути, настраиваемому через KRAWL_DASHBOARD_SECRET_PATH. Это скрывает панель от злоумышленников, сканирующих вашу ловушку.
Панель организована в виде шести вкладок:



Кроме того, после аутентификации с паролем панели становятся доступны две защищенные вкладки:
Подробнее см. в документации по панели управления.
Krawl поддерживает два режима развертывания, управляемых параметром mode в config.yaml или переменной окружения KRAWL_MODE.
Standalone: идеален для сред разработки или homelab с низким количеством запросов. Ноль дополнительной настройки — просто запустите Krawl, и он заработает.
Scalable: предназначен для производственных сред или высоконагруженных ловушек. Helm-чарт по умолчанию использует этот режим.
Подробную конфигурацию, примеры 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
## 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.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/main/docker). Для **разработки** (сборка из исходников с горячей перезагрузкой) используйте compose-файлы в [`docker/dev/`](https://github.com/blessedrebus/krawl/blob/main/docker/dev).
Более подробную информацию об обоих режимах см. в разделе [Режимы развертывания](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.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-minimal.yaml ---> Масштабируемый (по умолчанию)values-standalone.yaml ---> АвтономныйСм. Режимы развертывания и Документацию по чарту для полной конфигурации и инструкций по миграции.
Запустите 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/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` | Минимальное количество обращений для панелей top paths/user agents (установите 1 для отключения) | `5` |
| `KRAWL_METRICS_ENABLED` | Публикация метрик Prometheus по адресу `/<dashboard_path>/metrics` | `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` | Внешний URL canary-токена | Нет |
| `KRAWL_CANARY_TOKEN_TRIES` | Количество запросов перед показом canary-токена | `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` | Порог обнаружения множественных user agents | `2` |
| `KRAWL_ATTACK_URLS_THRESHOLD` | Порог обнаружения атакующих URL | `1` |
</details>
<details>
<summary><b>Бан-лист и игнорируемые IP</b> (4 переменных)</summary>
Обмен бан-листами с другими экземплярами и трафик, который никогда не отслеживается.
| Переменная окружения | Описание | По умолчанию |
|----------------------|-------------|---------|
| `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>Страницы обмана, генерируемые ИИ</b> (10 переменных)</summary>
См. [документацию по генерации ИИ](https://github.com/blessedrebus/krawl/blob/main/docs/ai_generation.md).
| Переменная окружения | Описание | По умолчанию |
|----------------------|-------------|---------|
| `KRAWL_AI_ENABLED` | Включить страницы обмана, генерируемые ИИ | `false` |
| `KRAWL_AI_PROVIDER` | Поставщик ИИ (`"openrouter"` или `"openai"`) | `"openrouter"` |
| `KRAWL_AI_OPENAI_BASE_URL` | Необязательный базовый URL OpenAI для пользовательских конечных точек API | `"https://api.openai.com/v1"` |
| `KRAWL_AI_API_KEY` | Ключ API для поставщика ИИ | `None` |
| `KRAWL_AI_MODEL` | Модель ИИ для генерации страниц | `"nvidia/nemotron-3-super-120b-a12b:free"` |
| `KRAWL_AI_TIMEOUT` | Таймаут запроса в секундах для вызовов API ИИ | `60` |
| `KRAWL_AI_MAX_DAILY_REQUESTS` | Максимальное количество страниц, генерируемых ИИ в день (0 = без ограничений) | `0` |
| `KRAWL_AI_PROMPT` | Пользовательский шаблон промпта для генерации страниц ИИ | Промпт по умолчанию |
| `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` | TTL в секундах для данных горячего пути (информация о банах, категории IP) | `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, примеры и добавление пользовательских форматов межсетевых экранов см. в документации Firewall Exporters.
Krawl также может отправлять заблокированные IP-адреса напрямую в Cloudflare Account IP List для использования в правилах WAF. Синхронизация выполняется как фоновая задача и обновляет список полной заменой через настраиваемый интервал. См. документацию Cloudflare Banlist Sync.
Krawl использует задачи, которые анализируют недавний трафик для построения и постоянного обновления репутации IP. Он запускается периодически и оценивает каждый активный IP-адрес на основе нескольких поведенческих индикаторов, чтобы классифицировать его как атакующего, краулера или обычного пользователя. Пороговые значения полностью настраиваются.

Анализ включает:
Каждый сигнал вносит вклад в взвешенную модель оценки, которая присваивает категорию репутации:
attackerbad_crawlergood_crawlerregular_userunknown (при недостаточности данных)Полученные оценки и метрики сохраняются в базе данных и используются Krawl для управления дашбордами, отслеживания репутации и автоматических мер реагирования, таких как блокировка IP или интеграция с межсетевыми экранами.
Krawl может автоматически генерировать реалистичные страницы-обманки с помощью AI-моделей из API OpenRouter или OpenAI. Эта функция создаёт уникальные правдоподобные honeypot-страницы на лету, чтобы обманывать атакующих без ручного создания страниц.
Ключевые возможности:
Быстрая настройка:```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 предоставляет метрики [Prometheus](https://prometheus.io/) по адресу `/<dashboard_secret_path>/metrics` (включено по умолчанию) и поставляется с готовой к импорту панелью [Grafana](https://grafana.com/) в файле [`grafana-dashboard.json`](https://github.com/blessedrebus/krawl/blob/main/grafana-dashboard.json).
Полный список метрик, шаги импорта в Grafana и настройку сбора данных Prometheus / Kubernetes (`ServiceMonitor`) см. в [документации по мониторингу](https://github.com/blessedrebus/krawl/blob/main/docs/monitoring.md).
## Дополнительная документация
| Тема | Описание |
|-------|-------------|
| [AI-генерация](https://github.com/blessedrebus/krawl/blob/main/docs/ai_generation.md) | Настройка AI-генерируемых страниц обмана с помощью OpenRouter или OpenAI |
| [Страницы обмана](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), конфигурация и миграция данных |
| [Honeypot](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) | Собственный JSON API Krawl: справочник конечных точек, аутентификация, интерактивная документация OpenAPI и загрузка вложений |
| [Внешние API](https://github.com/blessedrebus/krawl/blob/main/docs/api.md) | Сторонние API, к которым обращается Krawl для получения данных об IP, репутации и геолокации |
| [Обратный прокси](https://github.com/blessedrebus/krawl/blob/main/docs/reverse-proxy.md) | Как развернуть Krawl за NGINX или использовать поддомены-приманки |
| [Резервное копирование базы данных](https://github.com/blessedrebus/krawl/blob/main/docs/backups.md) | Включение и настройка автоматического задания дампа базы данных |
| [Canary Token](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) | Отправляет заблокированные IP-адреса из Krawl в список IP-адресов аккаунта Cloudflare для использования в правилах WAF. Синхронизация выполняется как фоновая задача и обновляет список полной заменой. |
| [Экспортеры брандмауэра](https://github.com/blessedrebus/krawl/blob/main/docs/firewall-exporters.md) | Экспорт списков блокировки IP в форматах raw, iptables или nftables через REST API |
| [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. Сделайте форк репозитория
2. Создайте ветку для новой функции
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" />
| Standalone | Scalable |
|---|
| База данных | SQLite (режим WAL) | PostgreSQL |
| Кэш | Python dict в памяти | Redis (многоуровневый TTL) |
| Реплики | 1 (один экземпляр) | 1+ (горизонтальное масштабирование) |
| Внешние зависимости | Нет | PostgreSQL + Redis |
| Лучше всего подходит для | Разработки, homelab, <500 тыс. запросов | Продакшена, высокой доступности, >500 тыс. запросов |