
InfraGuard — это прокси для перенаправления Command & Control и менеджер, который защищает вашу инфраструктуру Red Team от атрибуции угроз.

Трекер инфраструктуры Red Team и C2-редиректор — современная альтернатива [RedWarden](https://github.com/mgeeky/RedWarden).
InfraGuard располагается между интернетом и вашим C2-сервером, проверяя каждый входящий запрос на соответствие вашему malleable C2-профилю и блокируя всё, что ему не соответствует. Сканеры, боты и пробы blue team перенаправляются на приманку, тогда как легитимный трафик beacon проходит к вашему серверу.


## Архитектура

## Возможности
### Проксирование и слушатели
- **Мультидоменное проксирование** — одновременное проксирование нескольких доменов, каждый с независимыми C2-профилями, апстримами и правилами
- **Мультипротокольные слушатели** — HTTP/HTTPS, HTTP/3 (QUIC), WebSocket, gRPC, DNS, MQTT и TCP-туннельные слушатели, работающие одновременно с общей IP-разведкой и отслеживанием событий
- **Circuit breaker** — защита от сбоев на уровне каждого апстрима с состояниями closed/open/half-open; при недоступности бэкендов срабатывает drop-действие домена
- **Отказоустойчивость протоколов** — автоматическое переключение и возврат между протоколами слушателей, ранжированными по приоритету
### Поддержка C2-профилей
- **Валидация C2-профилей** — разбор и применение профилей Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk и PoshC2 в качестве правил редиректора
- **Горячая замена профилей** — смена активного C2-профиля домена во время работы из дашборда без перезапуска прокси
- **Мастер генерации профилей** — создание новых C2-профилей с нуля для всех 8 поддерживаемых типов через пошаговую форму, либо импорт и загрузка существующих профилей с автоматическим определением типа и валидацией
- **AI-ассистированная генерация профилей** — опциональная интеграция с Ollama предоставляет панель чата в дашборде для помощи в создании профилей и советов по OPSEC
### Конвейер фильтрации
- **Конвейер фильтрации на основе скоринга** — 10 фильтров, каждый вносит оценку 0.0–1.0; настраиваемый порог определяет блокировку/пропуск. Фильтры: JA3, IP, bot, header, DNS, geo, profile, replay, enumeration, sandbox.
- **Фильтрация по TLS-отпечатку JA3** — блокировка Masscan, ZGrab2, Shodan, curl, Python requests и Nmap на уровне TLS-рукопожатия до обмена любыми HTTP-данными; работает через заголовок обратного прокси или кастомный asyncio-протокол; опциональный режим allowlist требует JA3 beacon
- **Обнаружение песочниц и headless-браузеров** — накопление оценок по HTTP-сигналам: UA HeadlessChrome, отсутствие Accept-Language, Chrome без sec-ch-ua, UA сканеров Safe Links и msnbot, порядок Accept, не свойственный браузеру
- **Обнаружение перебора путей** — отслеживание уникальных URI на IP в скользящем окне; блокирует dirbuster/ffuf/gobuster до того, как они составят карту URI-пространства
- **Обнаружение перебора DNS-субдоменов** — отслеживание ответов NXDOMAIN по IP клиента; автоматическая блокировка IP-источников при превышении порога
- **Анти-бот / анти-краулинг** — более 40 известных шаблонов User-Agent сканеров/ботов, обнаружение аномалий заголовков
- **Защита от повторов** — отклонение дублирующихся запросов по хешу содержимого; хеши сохраняются в SQLite, поэтому защита переживает перезапуски
- **Drop-действия** — редирект, TCP reset, проксирование на приманку или tarpit (медленный ответ для траты времени сканера)
### Разведка
- **IP-разведка** — встроенные CIDR-блоклисты для 19 диапазонов security-вендоров (Shodan, Censys, Rapid7 и др.), GeoIP-фильтрация, сопоставление по ключевым словам обратного DNS
- **Фиды threat intel** — автообновление блоклистов из публичных источников (abuse.ch, Emerging Threats, Spamhaus DROP, Binary Defense) с настраиваемым интервалом обновления и кешированием на диск
- **Динамическая блокировка IP** — блокировка IP вне whitelisted-диапазонов; авто-добавление IP в whitelist после N валидных C2-запросов
- **Обогащение whitelist** — whitelisted CIDR автоматически обогащаются данными ASN, организации, страны и континента при запуске через базы GeoIP
- **Обнаружение burn** — мониторинг логов Certificate Transparency через crt.sh, самонаблюдение за репутацией домена через URLhaus/OpenPhish/Google Safe Browsing и кросс-доменное обнаружение аналитика, когда один IP обращается к нескольким доменам оператора
- **Скоринг уверенности burn** — непрерывная оценка 0–100 по 6 взвешенным сигналам: разнообразие JA3, всплески объёма, новые ASN, экспозиция в CT-логах, попадания в репутационные базы и неудачные попытки аутентификации. Включает рекомендуемые действия: monitor, rotate или immediate burn.
- **Инъекция canary-токенов** — трекинговые пиксели, honeypot-ссылки и honeypot-формы автоматически внедряются в страницы-приманки для обнаружения расследования blue team
- **Пассивный мониторинг DNS** — опрос CIRCL PDNS на предмет внешнего разрешения ваших доменов; обнаружение новых записей, всплесков NXDOMAIN и первого появления в экспозиции
### Доставка полезной нагрузки
- **Маршруты доставки контента** — отдача полезных нагрузок, приманок и статических файлов по определённым путям через PwnDrop, файловое хранилище Mythic, локальную файловую систему или HTTP-прокси-бэкенды; опциональная условная доставка для отдачи реального контента целям и приманок сканерам
- **Стейджинг файлов Mythic** — бэкенд `mythic_file` проксирует `/direct/download/{uuid}` Mythic по чистым URL; фиксированный UUID или режим прокси; контроль доступа обеспечивается стеком фильтров InfraGuard
- **Одноразовые токены полезной нагрузки** — токены выдаются автоматически при динамическом добавлении beacon в whitelist; атомарное одноразовое применение через SQLite предотвращает повторное использование URL аналитиками или песочницами; настраиваемые TTL и максимальное число использований
- **Ограничение скорости на маршрут** — ограничитель скорости скачивания на IP в скользящем окне для маршрутов контента; при превышении лимита отдаётся настроенная приманка для сканера или 429
- **Защитные проверки доставки** — привязка к окружению для маршрутов контента: требование IP beacon, allowlist UA, обязательные значения заголовков, запрещённые заголовки; при неудачных проверках срабатывает drop-действие домена, а не сырой 403
- **Токены фишинговых кампаний** — защита фишинговых страниц токенами для каждой кампании, встроенными в ссылки в письмах; статический список токенов или самовалидирующиеся токены с HMAC-подписью и настраиваемым TTL
### Устойчивость
- **Ротация инфраструктуры** — blue-green ротация через Terraform в один клик для 5 облачных провайдеров с предварительными проверками, откатом и состоянием, зашифрованным age
- **Планирование ротации** — автоматизированные политики ротации: фиксированный интервал, срабатывание по burn, порог по числу запросов и ступенчатая rolling-ротация
- **Watchdog авто-ротации** — периодический опрос burn-скора и срока действия сертификата; авто-ротация при срабатывании порога burn или остатке срока сертификата менее N дней, либо режим только оповещения с ограничением стоимости
- **Circuit breakers** — отслеживание сбоев на уровне каждого апстрима с состояниями HEALTHY / PROBING / TRIPPED и настраиваемым таймаутом восстановления, отображается в реальном времени в виджете Upstreams дашборда
- **Domain fronting** — C2-маршрутизация через CDN с разделением SNI/Host-заголовка, удалением CDN-заголовков и защитой от SSRF
- **Dead man's switch** — TTL heartbeat оператора, автоматически останавливающий пересылку C2, если оператор не отметился
- **Purple-team mirror** — fire-and-forget дублирование разрешённых событий в коллектор blue team для оценки взаимодействия
- **Общий бэкенд состояния (Redis)** — опциональный кросс-нодовый кеш повторов, динамический whitelist, сессионный bag beacon и drop rate-limit, чтобы горизонтально масштабируемые реплики видели одинаковое состояние
- **Edge-прокси** — Cloudflare Worker и AWS Lambda для domain fronting через инфраструктуру CDN, блокировки стран на периферии и перезаписи хоста
### Дашборд и инструменты оператора
- **Веб-дашборд** — SPA в реальном времени со страницей входа, живой лентой запросов, статистикой по доменам, топом заблокированных IP, потоковой передачей событий через WebSocket и встроенными действиями block/whitelist/unblock
- **Управление страницами-приманками** — просмотр списка, предпросмотр и редактирование HTML-страниц приманок прямо из дашборда; по домену — **Canary Overview** (переключатели pixel / hidden link / hidden form) и панель **Canary Hits**, отображающая каждый сканер или песочницу, запросившие ресурс приманки
- **Токены приманок с выделенными callback-эндпоинтами** — внедрённый трекинговый пиксель, скрытая ссылка и скрытая форма генерируют событие `canary_hit` на `/_ig/px|hp|hf?c=<token>`; попадания сохраняются в БД трекинга с `filter_result=canary_hit` и транслируются в реальном времени на страницу Decoys и во все подписанные плагины-алертеры
- **Вкладка Plugins** — список загруженных плагинов с переключателями `enable / disable` во время работы (без перезапуска) и **Plugin Marketplace** для добавления любого из 29 встроенных плагинов в один клик; каждое изменение сохраняется в `config.yaml` и фиксируется коммитом в репозитории истории конфигурации
- **Command Post** — дашборд агрегации нескольких инстансов, объединяющий статистику, запросы и живые события с нескольких узлов InfraGuard в единое представление, с **Fleet Map** (MapLibre), отображающей каждый прокси и каждый заблокированный IP-источник по его геолокации lat/lon, и переключателем fan-out плагина для кросс-инстансовых операций
- **Терминальный UI** — TUI на базе Textual с экраном входа, живым опросом API и цветовой кодировкой лога запросов
- **Отчёты по взаимодействию** — самодостаточные отчёты в HTML, JSON или CSV с разбивкой по доменам, эффективностью фильтров и журналом аудита оператора
- **Метрики Prometheus** — эндпоинт `/metrics`, предоставляющий счётчики запросов, гистограммы задержек апстримов, состояние circuit breaker, свежесть фидов, активные соединения и gauge `infraguard_active_beacons`, по которому масштабируется Helm HPA
- **OpenTelemetry** — опциональный экспортёр OTLP-трейсов и метрик; compose-профиль observability поднимает коллектор OTEL плюс Prometheus и автоматически подготовленный обзорный дашборд Grafana
- **Helm-чарт Kubernetes** — прокси, дашборд, Redis StatefulSet, ServiceMonitor и HPA по gauge активных beacon; поставляется в `deploy/helm/infraguard/`
### Интеграции и плагины
- **Интеграция с SIEM** — встроенные плагины для Elasticsearch, Wazuh и Syslog (CEF/JSON) с пакетной пересылкой
- **Webhook-оповещения** — встроенные плагины для Discord (embeds), Slack (Block Kit), универсального webhook, **PagerDuty** (Events API v2, дедупликация по ключу) и **Telegram** (двусторонний ops-чат: `/status`, `/sessions`, `/kill`, `/ack` с телефона)
- **Плагины обнаружения** — правила YARA по телам запросов, запрос в GreyNoise Community, ML-классификатор ботов (логистическая регрессия по JA4 + UA + таймингам), response canary (canarytokens.org), фингерпринтинг p0f v3, обогащение JA4/JA4H, обогащение GeoIP
- **Манипуляторы ответов** — перезапись HTML, водяной знак полезной нагрузки, удаление сигнатур, JS-челлендж, имитация кеша, медленный tarpit, shadow-block (возврат 200 сканерам, чтобы они не адаптировались)
- **Интеграция с Phishing.club** — приёмник webhook с HMAC-подписью, который принимает фишинговые события и автоматически добавляет в whitelist IP кликнувших целей
- **Система плагинов** — событийно-ориентированная архитектура с хуками `on_event`, конфигурацией на плагин и фильтрацией событий; каждый плагин можно переключить или загрузить из вкладки **Plugins** дашборда без перезапуска, и изменение сохраняется обратно в `config.yaml` с аудит-коммитом в истории конфигурации
### Конфигурация и развёртывание
- **Шифрование конфигурации** — шифрование age (весь файл) и SOPS (по значениям) с поддержкой файла `.env`
- **Валидация конфигурации** — CLI-инструмент сравнения и более 20 проверок безопасности, эксплуатации и TLS
- **Управление API-ключами** — создание, отзыв и ротация API-ключей с лимитами скорости на ключ, отслеживанием использования и квотами
- **Генерация конфигураций бэкендов** — генерация конфигураций Nginx, Caddy или Apache с TLS, IP-фильтрацией, проверками заголовков, алиасами и кастомными заголовками
- **Импорт правил** — импорт IP-блоклистов и шаблонов User-Agent из существующих файлов `.htaccess` и `robots.txt`
- **Развёртывание в Docker** — Dockerfile + docker-compose с опциональными Let's Encrypt, загрузчиком GeoIP, сервером полезных нагрузок PwnDrop и AI-ассистентом Ollama
- **Поддержка GeoIP** — все три базы GeoLite2 (City, ASN, Country) с автоскачиванием в Docker
- **Резервный самоподписанный TLS** — автоматическая генерация сертификатов, когда настроенные пути не существуют
- **Поддержка переменных окружения** — файл `.env` загружается автоматически; синтаксис `${VAR}` работает во всех значениях и ключах конфигурации
- **Настраиваемый эндпоинт здоровья** — изменение пути проверки здоровья для избежания фингерпринтинга
- **Структурированное логирование** — структурированные логи в формате JSON через structlog
- **Трекинг и персистентность** — SQLite в режиме WAL для логирования запросов, статистики, реестра узлов, хешей повторов и токенов полезной нагрузки
## Руководство по установке
Смотрите [страницу Wiki](https://infraguard.whispergate.org/docs/getting-started/installation/) для установки
## Справочник CLI```
infraguard --version Show version
infraguard --help Show help
infraguard run -c config.yaml Start the reverse proxy
infraguard run -c config.yaml --port 8443 Override listen port
infraguard run -c config.yaml --host 0.0.0.0 Override bind address
infraguard dashboard -c config.yaml Start the web dashboard
infraguard dashboard -c config.yaml --port 9090 Override dashboard port
infraguard tui Launch TUI with login screen
infraguard tui --url http://host:8080 --token TOK Auto-connect to dashboard
infraguard tui -c config.yaml Read URL/token from config
infraguard command-post -c command-post.yaml Start multi-instance dashboard
infraguard command-post --instance name:url:token Add instance via CLI (repeatable)
infraguard profile parse <file> Parse and display a C2 profile
infraguard profile parse <file> --format json Output as JSON
infraguard profile parse <file> --type brute_ratel Force profile type
infraguard profile convert <file> -o out.json Convert profile to JSON
# Supported --type values: auto, cobalt_strike, mythic, brute_ratel, sliver, havoc, nighthawk, poshc2
# Auto-detection: .profile = CS, .toml = Havoc, .yaml = PoshC2, .json = auto-detect by keys
infraguard ingest <files...> Ingest .htaccess/robots.txt rules
infraguard ingest <files...> --format blocklist Output as IP blocklist
infraguard ingest <files...> --format json Output as JSON
infraguard ingest <files...> -o banned_ips.txt Write blocklist to file
infraguard generate nginx -c config.yaml Generate Nginx config
infraguard generate caddy -c config.yaml Generate Caddyfile
infraguard generate apache -c config.yaml Generate Apache VirtualHost
infraguard init -o config.yaml Generate starter config
infraguard validate -c config.yaml Validate config file
infraguard simulate-beacon -c config.yaml --domain <d> Run one synthetic beacon
through the loaded filter
pipeline in-process
infraguard drop-preview -c config.yaml --domain <d> Render the drop-action
response without any live
traffic (decoy / redirect
/ tarpit preview)
infraguard events tail -c config.yaml Tail the tracking DB as a
structured event stream
infraguard profile transpile <in> --to <c2> Convert a C2 profile
between formats using the
shared profile IR
infraguard preflight -c config.yaml Adversary-emulation
self-test: DNS, cert,
upstream, decoy dir,
writes a Markdown report
infraguard config set <domains.<d>.upstream> <value> Mutate config from CLI;
writes .bak, atomic file
replace, and commit to the
config-history git repo
infraguard config log Show mutation history
infraguard config revert HEAD~N Roll back N mutations
```
### Параметры генератора
Команда `generate` принимает дополнительные флаги для настройки оператора:
| Флаг | Описание |
|---|---|
| `--listen-port PORT` | Переопределить порт прослушивания (по умолчанию: из конфигурации) |
| `--ssl-cert PATH` | Переопределить путь к SSL-сертификату |
| `--ssl-key PATH` | Переопределить путь к SSL-ключу |
| `--redirect-url URL` | Переопределить URL перенаправления для заблокированных запросов |
| `--default-action redirect\|404` | Действие для несовпадающих запросов |
| `--no-ip-filter` | Исключить блоки разрешения/запрета IP |
| `--no-header-check` | Исключить правила проверки заголовков |
| `--alias DOMAIN:ALIAS` | Добавить псевдоним имени сервера (можно повторять) |
| `--header NAME:VALUE` | Добавить пользовательский заголовок ответа (можно повторять) |
## Command Post (Панель управления для нескольких экземпляров)
При запуске нескольких экземпляров InfraGuard на разных VPS или облачных провайдерах Command Post агрегирует статистику, запросы и события в реальном времени со всех узлов в единую панель управления.```
┌─────────────────────────────┐
│ Command Post Dashboard │
│ http://localhost:9090 │
└──────────┬──────────────────┘
│ parallel fetch
┌─────┼──────┬──────────┐
▼ ▼ ▼ ▼
IG-1 IG-2 IG-3 ... IG-N
```

### Быстрый старт```bash
# Via config file
infraguard command-post -c config/command-post.yaml
# Via CLI args
infraguard command-post \
--instance "prod:https://ig1.example.com:8080:TOKEN1" \
--instance "staging:https://ig2.example.com:8080:TOKEN2" \
--port 9090
# Via Docker
docker compose --profile command-post up -d command-post
```
### Конфигурация
Создайте `config/command-post.yaml`:```yaml
instances:
- name: "prod-cs"
url: "https://ig1.example.com:8080"
token: "${IG_PROD_TOKEN}"
- name: "prod-mythic"
url: "https://ig2.example.com:8080"
token: "${IG_MYTHIC_TOKEN}"
- name: "staging"
url: "https://ig3.example.com:8080"
token: "${IG_STAGING_TOKEN}"
port: 9090
# auth_token: "${COMMAND_POST_TOKEN}"
```
### Что это показывает
- **Объединённая статистика** -- общее количество запросов, разрешённых, заблокированных, суммированное по всем экземплярам
- **Панель состояния экземпляров** -- зелёный/красный статус для каждого подключённого узла
- **Чередующийся журнал запросов** -- запросы со всех экземпляров, отсортированные по временной метке, каждый помечен именем своего экземпляра
- **Объединённые топ заблокированных IP** -- агрегированные по всем экземплярам
- **Статистика по доменам** -- домены со всех экземпляров с пересчитанными коэффициентами блокировки
- **Лента событий в реальном времени** -- мультиплексированные события WebSocket со всех узлов
- **Действия блокировки/белого списка** -- рассылка на все экземпляры или на конкретный
### Конечные точки API
| Конечная точка | Метод | Описание |
|---|---|---|
| `/api/instances` | GET | Список всех экземпляров со статусом работоспособности |
| `/api/stats` | GET | Объединённая статистика со всех экземпляров |
| `/api/requests` | GET | Чередующийся журнал запросов со всех экземпляров |
| `/api/intel/whitelist` | POST | Добавить IP в белый список на всех экземплярах |
| `/api/intel/blocklist` | POST | Заблокировать IP на всех экземплярах |
| `/api/intel/blocklist` | DELETE | Разблокировать IP на всех экземплярах |
| `/ws/events` | WS | Мультиплексированные события в реальном времени со всех экземпляров |
## Развёртывание в Docker
### Быстрый старт```bash
cp .env.example .env
# Edit .env with your domain, teamserver, and token
docker compose up -d
```
Это запускает два сервиса:
- **proxy** -- редиректор на портах 443 и 80
- **dashboard** -- веб-интерфейс на порту 8080
### С Let's Encrypt```bash
# Set in .env:
# INFRAGUARD_LETSENCRYPT=true
# INFRAGUARD_DOMAIN=cdn.example.com
# [email protected]
# Obtain the initial certificate
docker compose --profile letsencrypt up certbot
# Start the proxy (will use the LE cert)
docker compose up -d proxy dashboard
# Start auto-renewal (checks every 12 hours)
docker compose --profile letsencrypt up -d certbot-renew
```
Требования для Let's Encrypt:
- Порт 80 должен быть доступен из интернета
---
[Read more](https://github.com/whispergate/infraguard)