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


mythic_file проксирует /direct/download/{uuid} Mythic по чистым URL; фиксированный UUID или режим прокси; контроль доступа обеспечивается стеком фильтров InfraGuard/metrics, отдающий счётчики запросов, гистограммы задержек апстримов, состояние circuit breaker, свежесть фидов и активные соединенияon_event, конфигурацией для каждого плагина и фильтрацией событий.env.htaccess и robots.txt.env загружается автоматически; синтаксис ${VAR} работает во всех значениях и ключах конфигурацииСмотрите Wiki-страницу для установки
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
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

infraguard command-post -c config/command-post.yaml
infraguard command-post
--instance "prod:https://ig1.example.com:8080:TOKEN1"
--instance "staging:https://ig2.example.com:8080:TOKEN2"
--port 9090
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}"
cp .env.example .env
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:
INFRAGUARD_DOMAIN должен разрешаться в публичный IP-адрес этого хостаINFRAGUARD_DOMAIN_EMAIL должен быть действительным адресом электронной почтыdocker compose --profile geoip up geoip-update
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 запущен, в панели управления на странице приманок и профилей появляется переключатель ИИ-ассистента.
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
Если вы хотите внести вклад в проект, создайте новую ветку с названием версии и укажите то же название версии в pull request. Например: branch=v1.2.3 | [v1.2.3] Добавлен такой-то пункт.
Лицензия BSD 2-Clause. Подробнее см. в LICENSE.
Copyright (c) 2026, Whispergate
| 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 | Мультиплексированные живые события со всех экземпляров |
| Функция | 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) |