
InfraGuard v0.4.3
InfraGuard — это прокси для перенаправления Command & Control и менеджер, который защищает вашу инфраструктуру Red Team от атрибуции угроз.
Red team трекер инфраструктуры и C2-редиректор -- современная альтернатива RedWarden.
InfraGuard располагается между интернетом и вашим C2 teamserver, проверяя каждый входящий запрос на соответствие вашему malleable C2-профилю и блокируя всё, что не соответствует. Сканеры, боты и зондирующие запросы blue team перенаправляются на сайт-приманку, а легитимный трафик beacon проходит к вашему teamserver.

Архитектура

Возможности
Проксирование и слушатели
- Мультидоменное проксирование -- одновременное проксирование нескольких доменов, каждый со своими независимыми профилями C2, апстримами и правилами
- Мультипротокольные слушатели -- слушатели HTTP/HTTPS, DNS, MQTT и WebSocket, работающие одновременно с общей IP-разведкой и отслеживанием событий
- Circuit breaker -- защита от сбоев для каждого апстрима с состояниями «закрыт/открыт/полуоткрыт»; при недоступности бэкендов переходит к действию drop домена
- Отказоустойчивость протоколов -- автоматическое переключение и возврат между протоколами слушателей, упорядоченными по приоритету
Поддержка профилей C2
- Проверка профилей C2 -- разбор и применение профилей Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk и PoshC2 в качестве правил редиректора
- Горячая замена профилей -- замена активного профиля C2 домена в реальном времени из панели управления без перезапуска прокси
- Мастер генерации профилей -- создание новых профилей C2 с нуля для всех 8 поддерживаемых типов с помощью пошаговой формы, а также импорт и загрузка существующих профилей с автоматическим определением типа и проверкой
- Генерация профилей с помощью ИИ -- опциональная интеграция с Ollama добавляет чат-панель в панель управления для помощи в создании профилей и советов по OPSEC
Конвейер фильтров
- Конвейер фильтров на основе скоринга -- каждый из 10 фильтров вносит оценку 0.0--1.0; настраиваемый порог определяет блокировку/разрешение. Фильтры: JA3, IP, бот, заголовки, DNS, гео, профиль, повтор, перечисление, песочница.
- Фильтрация по JA3 TLS-отпечаткам -- блокировка Masscan, ZGrab2, Shodan, curl, Python requests и Nmap на уровне TLS-рукопожатия до обмена любыми HTTP-данными; работает через заголовок reverse-proxy или собственный протокол asyncio; опциональный режим белого списка принудительно применяет JA3 бикона
- Обнаружение песочниц и 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 вне разрешённых диапазонов; автоматическое добавление IP в белый список после N валидных C2-запросов
- Обогащение белых списков -- разрешённые CIDR автоматически обогащаются данными ASN, организации, страны и континента при запуске через базы GeoIP
- Обнаружение компрометации -- мониторинг журналов Certificate Transparency через crt.sh, самостоятельный мониторинг репутации доменов через URLhaus/OpenPhish/Google Safe Browsing и обнаружение аналитика на нескольких доменах, когда один IP обращается к нескольким доменам оператора
- Оценка уверенности компрометации -- непрерывная оценка 0--100 на основе 6 взвешенных сигналов: разнообразие JA3, всплески объёма, новые ASN, появление в CT-журналах, срабатывания репутации и неудачные попытки аутентификации. Включает рекомендуемые действия: мониторинг, ротация или немедленная компрометация.
- Внедрение canary-токенов -- пиксели отслеживания, honeypot-ссылки и honeypot-формы автоматически внедряются в страницы-приманки для обнаружения расследований blue team
- Мониторинг пассивного DNS -- опрашивает CIRCL PDNS на предмет внешнего разрешения ваших доменов; обнаруживает новые записи, всплески NXDOMAIN и первое появление в экспозиции
Доставка пейлоадов
- Маршруты доставки контента -- раздача пейлоадов, приманок и статических файлов по определённым путям через PwnDrop, файловое хранилище Mythic, локальную файловую систему или бэкенды HTTP-прокси; опциональная условная доставка для показа реального контента целям и приманок сканерам
- Staging файлов Mythic -- бэкенд
mythic_fileпроксирует/direct/download/{uuid}Mythic по чистым URL; фиксированный UUID или режим прокси; контроль доступа обеспечивается стеком фильтров InfraGuard - Одноразовые токены пейлоадов -- токены выпускаются автоматически при динамическом добавлении бикона в белый список; атомарная одноразовая проверка в SQLite предотвращает повторное использование URL аналитиками или песочницами; настраиваемые TTL и максимальное количество использований
- Ограничение скорости на маршрут -- ограничитель скорости скачивания по IP со скользящим окном на маршрутах контента; при превышении лимита отдаётся настроенная приманка для сканеров или 429
- Защита доставки -- привязка к окружению для маршрутов контента: требование IP бикона, белый список UA, обязательные значения заголовков, запрещённые заголовки; при неудачных проверках выполняется действие drop домена, а не просто 403
- Токены фишинговых кампаний -- доступ к фишинговым страницам через токены кампаний, встраиваемые в ссылки в письмах; статический список токенов или самопроверяемые токены с HMAC-подписью и настраиваемым TTL
Устойчивость
- Ротация инфраструктуры -- ротация blue-green в один клик с помощью Terraform в 5 облачных провайдерах с предварительными проверками, откатом и зашифрованным age-состоянием
- Планирование ротации -- автоматические политики ротации: фиксированный интервал, срабатывание по компрометации, порог количества запросов и поэтапная ротация
- Domain fronting -- маршрутизация C2 через CDN с разделением SNI/Host-заголовка, удалением CDN-заголовков и защитой от SSRF
- Механизм «мёртвый человек» -- TTL heartbeat оператора, который автоматически останавливает пересылку C2, если оператор не вышел на связь
- Edge-прокси -- Cloudflare Worker и AWS Lambda для domain fronting через CDN-инфраструктуру, блокировки по стране на границе сети и переписывания хоста
Панель управления и инструменты оператора
- Веб-панель управления -- SPA в реальном времени со страницей входа, живой лентой запросов, статистикой доменов, топом заблокированных IP, потоковой передачей событий через WebSocket и встроенными действиями блокировки/добавления в белый список/разблокировки
- Управление страницами-приманками -- просмотр списка, предпросмотр и редактирование HTML-страниц-приманок прямо из панели управления
- Command Post -- агрегирующая панель для нескольких инстансов, объединяющая статистику, запросы и живые события с нескольких узлов InfraGuard в едином представлении
- Терминальный интерфейс -- TUI на основе Textual с экраном входа, живым опросом API и цветной лентой запросов
- Отчёты об операциях -- автономные отчёты в HTML, JSON или CSV с разбивкой по доменам, эффективностью фильтров и журналом аудита оператора
- Метрики Prometheus -- эндпоинт
/metrics, отдающий счётчики запросов, гистограммы задержек апстримов, состояние circuit breaker, свежесть фидов и активные соединения
Интеграции и плагины
- Интеграция с SIEM -- встроенные плагины для Elasticsearch, Wazuh и Syslog (CEF/JSON) с пакетной пересылкой
- Webhook-уведомления -- встроенные плагины для Discord (embeds), Slack (Block Kit) и универсального webhook; уведомления об обнаружении компрометации проходят через ту же систему плагинов
- Интеграция с Phishing.club -- приёмник webhook с HMAC-подписью, который принимает события фишинга и автоматически добавляет IP перешедших по ссылке целей в белый список
- Система плагинов -- событийно-ориентированная архитектура с хуками
on_event, конфигурацией для каждого плагина и фильтрацией событий
Конфигурация и развёртывание
- Шифрование конфигурации -- шифрование 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 и ИИ-ассистентом Ollama
- Поддержка GeoIP -- все три базы GeoLite2 (City, ASN, Country) с автоматической загрузкой через Docker
- Резервный самоподписанный TLS -- автоматическая генерация сертификатов, если настроенные пути не существуют
- Поддержка переменных окружения -- файл
.envзагружается автоматически; синтаксис${VAR}работает во всех значениях и ключах конфигурации - Настраиваемый health endpoint -- изменение пути проверки работоспособности для избежания фингерпринтинга
- Структурированное логирование -- структурированные логи в формате JSON через structlog
- Отслеживание и хранение -- SQLite в режиме WAL для логирования запросов, статистики, реестра узлов, хэшей повторов и токенов пейлоадов
Руководство по установке
Смотрите Wiki-страницу для установки
Справочник 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 Parse and display a C2 profile infraguard profile parse --format json Output as JSON infraguard profile parse --type brute_ratel Force profile type infraguard profile convert -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
### Параметры генератора
Команда `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 endpoints
| Endpoint | Method | Description |
|---|---|---|
/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 должен быть доступен из интернета
INFRAGUARD_DOMAINдолжен разрешаться в публичный IP-адрес этого хостаINFRAGUARD_DOMAIN_EMAILдолжен быть действительным адресом электронной почты
С базами данных GeoIP```bash
Download all three GeoLite2 databases (City, ASN, Country)
docker compose --profile geoip up geoip-update
Then start normally - databases are mounted at /app/geoip/
docker compose up -d proxy dashboard
### С PwnDrop (доставка полезной нагрузки)```bash
# Start PwnDrop alongside the proxy
docker compose --profile pwndrop up -d pwndrop
# Access PwnDrop admin UI at https://localhost:8443
# InfraGuard reaches it internally at http://pwndrop:80
Затем настройте маршруты контента в вашем конфиге, чтобы проксировать пути к полезным нагрузкам на PwnDrop:```yaml domains: cdn.example.com: content_routes: - path: "/downloads/*" backend: type: "pwndrop" target: "http://pwndrop:80" auth_token: "${PWNDROP_TOKEN}"
### С помощью Ollama (генерация профиля с помощью ИИ)```bash
# Start the Ollama service
docker compose --profile ollama up -d ollama
# Pull the default model (~5 GB)
docker compose --profile ollama exec ollama ollama pull qwen3:8b
# The dashboard's AI chat panel will connect automatically
Переменная окружения панели управления INFRAGUARD_OLLAMA_URL предварительно настроена в docker-compose.yml. Когда Ollama запущен, в панели управления на странице приманок и профилей появляется переключатель ИИ-ассистента.
Масштабирование```bash
Run multiple redirector nodes
docker compose up -d --scale proxy-node=3
Раскомментируйте сервис `proxy-node` в `docker-compose.yml`, чтобы включить его.
### Тома
| Том | Назначение |
|---|---|
| `./config` | Файлы конфигурации (монтируются только для чтения) |
| `./examples` | Профили C2 (монтируются только для чтения) |
| `./rules` | Импортированные блок-списки и исходные файлы правил (монтируются только для чтения) |
| `./data` | База данных SQLite и созданные профили (сохраняются) |
| `certs` | TLS-сертификаты (общие для прокси и certbot) |
| `geoip` | Базы данных GeoLite2 (заполняются сервисом `geoip-update`) |
| `pwndrop-data` | Загруженные файлы и база данных PwnDrop |
| `ollama-data` | Веса моделей и конфигурация Ollama |
## Архитектура```
infraguard/
__init__.py Package init
__main__.py python -m infraguard entry
main.py Click CLI
config/ YAML config loading, .env support, Pydantic validation
core/ ASGI proxy engine (app, proxy, router, TLS, drop actions, content delivery)
profiles/ C2 profile parsers and generators (8 types)
pipeline/ Request validation filters (JA3, IP, bot, header, DNS, geo, profile, replay, enumeration, sandbox)
intel/ IP intelligence (blocklists, GeoIP, rDNS, feeds, rule ingestion)
tracking/ SQLite persistence (request logging, stats, node registry)
plugins/ Plugin system (protocol, loader, builtins)
ui/
api/ REST API + WebSocket (Starlette)
web/ SPA dashboard (HTML/JS/CSS)
tui/ Terminal UI (Textual) with login screen
command_post/ Multi-instance aggregation dashboard
listeners/ Protocol listeners (HTTP, DNS, MQTT, WebSocket)
backends/ Config generators (Nginx, Caddy, Apache)
models/ Shared types and event models
Сравнение с RedWarden
| Функция | RedWarden | InfraGuard |
|---|---|---|
| Архитектура | Один файл ~99KB | Модульный пакет |
| Разбор профилей | Конечный автомат на регулярных выражениях | Структурированный парсер с полной поддержкой блоков/трансформаций |
| Поддержка C2 | Только Cobalt Strike | Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk, PoshC2 |
| Управление профилями | Ручное редактирование файлов | Мастер в дашборде с генерацией, импортом, горячей заменой и ИИ-помощью |
| Протоколы | Только HTTP | HTTP, DNS, MQTT, WebSocket |
| Модель фильтрации | Бинарный пропуск/отказ | На основе баллов (порог 0.0--1.0), цепочка из 10 фильтров |
| TLS-дактилоскопия | Нет | Блокировка по JA3 (Masscan, ZGrab2, Shodan, curl, Python requests, Nmap) |
| Обнаружение песочниц | Нет | Безголовый браузер / Safe Links / оценка user-agent и заголовков песочницы |
| Обнаружение перебора | Нет | Перебор путей + отслеживание DNS NXDOMAIN с автоблокировкой |
| Обнаружение сжигания | Нет | Мониторинг CT-журналов, репутация доменов, обнаружение аналитиков между доменами, оценка уверенности |
| Устойчивость инфраструктуры | Нет | Автоматический выключатель, отказоустойчивое переключение протоколов, переключатель «мёртвый человек», ротация инфраструктуры |
| Доставка полезной нагрузки | Нет | PwnDrop, файловое хранилище Mythic, файловая система, HTTP-прокси с условной доставкой |
| Защита полезной нагрузки | Нет | Одноразовые токены, ограничение частоты запросов на маршрут, защита доставки |
| Защита от фишинга | Нет | Проверка токенов кампании (статический список или HMAC-подпись) |
| Интерфейс оператора | Нет | Веб-дашборд + терминальный интерфейс + командный пункт с несколькими инстансами |
| Наблюдаемость | Нет | Метрики Prometheus, отчёты о взаимодействии, структурированное журналирование |
| Генерация конфигурации | Нет | Nginx, Caddy, Apache с полной настройкой |
| Импорт правил | Нет | Парсер .htaccess + robots.txt |
| Каналы Threat Intel | Нет | Автообновление из 5 публичных источников |
| Система плагинов | Базовый интерфейс из 4 методов | Событийно-ориентированная с хуками on_event + конфигурация для каждого плагина |
| Интеграция SIEM | Нет | Elasticsearch, Wazuh, Syslog (CEF/JSON) |
| Вебхук-уведомления | Нет | Discord, Slack, универсальный вебхук |
| Интеллект белых списков | Нет | Автоматическое обогащение CIDR данными ASN/организация/страна при запуске |
| Анти-повтор | Хеш SQLite | Постоянный SQLite с кэшем L1 в памяти, переживает перезапуски |
| Действия при сбросе | redirect, reset, proxy | redirect, reset, proxy, tarpit |
| Управление TLS | Только вручную | Автоматические самоподписанные сертификаты + интеграция Let's Encrypt |
| Периферийное развёртывание | Нет | Cloudflare Worker + периферийные прокси AWS Lambda с подменой домена |
| Безопасность конфигурации | Нет | Шифрование age и SOPS, проверки валидации, управление API-ключами |
| Развёртывание | Вручную | Docker Compose с проверками работоспособности |
| Асинхронность | Колбэки Tornado | Нативный async/await (ASGI + uvicorn) |
Вклад в проект
- Mgeeky - Исходная идея (RedWarden)
- curi0usJack - Правила .htaccess
- Профили
- threatexpress - jquery-c2.3.14.profile
- InfinityCurve - Профиль Havoc
- C2-фреймворки
- Cobalt Strike - Поддержка профилей Malleable C2
- Mythic - Поддержка профилей HTTPX + поэтапная передача файлов
- Brute Ratel C4 - Поддержка профилей конфигурации сервера
- Sliver - Поддержка профилей HTTP C2
- Havoc - Поддержка профилей TOML
- Nighthawk - Поддержка конфигурации listener в JSON
- PoshC2 - Поддержка конфигурации YAML
Если вы хотите внести вклад в проект, создайте новую ветку с названием версии и укажите то же название версии в pull request. Например: branch=v1.2.3 | [v1.2.3] Добавлен такой-то пункт.
Лицензия
Лицензия BSD 2-Clause. Подробнее см. в LICENSE.
Copyright (c) 2026, Whispergate