
InfraGuard es un Proxy y Gestor de Redirección de Comando y Control que protege tu Infraestructura de Red Team contra la atribución de amenazas.
Rastreador de infraestructura para red team y redirector de C2: una alternativa moderna a RedWarden.
InfraGuard se sitúa entre Internet y tu teamserver de C2, validando cada solicitud entrante contra tu perfil C2 maleable y bloqueando todo lo que no se ajuste a él. Los escáneres, bots y sondeos del blue team se redirigen a un sitio señuelo, mientras que el tráfico legítimo de beacons pasa hasta tu teamserver.


mythic_file hace de proxy de /direct/download/{uuid} de Mythic en URLs limpias; modo UUID fijo o modo proxy; el control de acceso lo proporciona la pila de filtros de InfraGuard/metrics que expone contadores de solicitudes, histogramas de latencia de upstream, estado del disyuntor, frescura de los feeds y conexiones activason_event, configuración por plugin y filtrado de eventos.env.htaccess y robots.txt existentes.env cargado automáticamente; la sintaxis ${VAR} funciona en todos los valores y claves de configuraciónConsulta la página Wiki para la instalación
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
### Opciones del generador
El comando `generate` acepta opciones adicionales para la personalización del operador:
| Bandera | Descripción |
|---|---|
| `--listen-port PORT` | Anular el puerto de escucha (por defecto: el de la configuración) |
| `--ssl-cert PATH` | Anular la ruta del certificado SSL |
| `--ssl-key PATH` | Anular la ruta de la clave SSL |
| `--redirect-url URL` | Anular la URL de redirección para solicitudes bloqueadas |
| `--default-action redirect\|404` | Acción para solicitudes que no coinciden |
| `--no-ip-filter` | Omitir los bloques de permitir/denegar IP |
| `--no-header-check` | Omitir las reglas de validación de cabeceras |
| `--alias DOMAIN:ALIAS` | Añadir un alias de nombre de servidor (repetible) |
| `--header NAME:VALUE` | Añadir una cabecera de respuesta personalizada (repetible) |
## Command Post (Panel de múltiples instancias)
Cuando se ejecutan múltiples instancias de InfraGuard en diferentes VPS o proveedores de nube, Command Post agrega estadísticas, solicitudes y eventos en vivo de todos los nodos en un único panel.```
┌─────────────────────────────┐
│ 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
### Configuración
Crea `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
Esto inicia dos servicios:
- **proxy** -- el redirector en los puertos 443 y 80
- **dashboard** -- la interfaz web en el puerto 8080
### Con 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
Requisitos para Let's Encrypt:
INFRAGUARD_DOMAIN debe resolverse a la IP pública de este hostINFRAGUARD_DOMAIN_EMAIL debe ser una dirección de correo electrónico válidadocker compose --profile geoip up geoip-update
docker compose up -d proxy dashboard
### Con PwnDrop (entrega de payload)```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
Luego configura las rutas de contenido en tu configuración para enrutar mediante proxy las rutas de payload a PwnDrop:```yaml domains: cdn.example.com: content_routes: - path: "/downloads/*" backend: type: "pwndrop" target: "http://pwndrop:80" auth_token: "${PWNDROP_TOKEN}"
### Con Ollama (generación de perfiles asistida por IA)```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
La variable de entorno INFRAGUARD_OLLAMA_URL del panel está preconfigurada en docker-compose.yml. Cuando Ollama está en ejecución, el conmutador del Asistente de IA aparece en la página de señuelos y perfiles del panel.
docker compose up -d --scale proxy-node=3
Descomenta el servicio `proxy-node` en `docker-compose.yml` para habilitarlo.
### Volúmenes
| Volumen | Propósito |
|---|---|
| `./config` | Archivos de configuración (montados de solo lectura) |
| `./examples` | Perfiles C2 (montados de solo lectura) |
| `./rules` | Listas de bloqueo ingeridas y archivos fuente de reglas (montados de solo lectura) |
| `./data` | Base de datos SQLite y perfiles generados (persistentes) |
| `certs` | Certificados TLS (compartidos entre proxy y certbot) |
| `geoip` | Bases de datos GeoLite2 (pobladas por el servicio `geoip-update`) |
| `pwndrop-data` | Archivos subidos y base de datos de PwnDrop |
| `ollama-data` | Pesos del modelo y configuración de Ollama |
## Arquitectura```
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
Si deseas contribuir al proyecto, crea una nueva rama con el nombre de la versión e indica el mismo nombre de versión en la solicitud de extracción. P. ej., branch=v1.2.3 | [v1.2.3] Añadido elemento bla.
Licencia BSD de 2 cláusulas. Consulta LICENSE para más detalles.
Copyright (c) 2026, Whispergate
| Endpoint | Método | Descripción |
|---|
/api/instances | GET | Lista todas las instancias con su estado de salud |
/api/stats | GET | Estadísticas combinadas de todas las instancias |
/api/requests | GET | Registro de solicitudes entrelazado de todas las instancias |
/api/intel/whitelist | POST | Añade una IP a la lista blanca en todas las instancias |
/api/intel/blocklist | POST | Bloquea una IP en todas las instancias |
/api/intel/blocklist | DELETE | Desbloquea una IP en todas las instancias |
/ws/events | WS | Eventos en vivo multiplexados de todas las instancias |
| Feature | RedWarden | InfraGuard |
|---|
| Arquitectura | Archivo único de ~99KB | Paquete modular |
| Análisis de perfiles | Máquina de estados con regex | Analizador estructurado con soporte completo de bloques y transformaciones |
| Soporte C2 | Solo Cobalt Strike | Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk, PoshC2 |
| Gestión de perfiles | Edición manual de archivos | Asistente de panel con generación, importación, intercambio en caliente y asistencia de IA |
| Protocolos | Solo HTTP | HTTP, DNS, MQTT, WebSocket |
| Modelo de filtrado | Aprobado/rechazado binario | Basado en puntuación (umbral 0.0--1.0), cadena de 10 filtros |
| Huella TLS | Ninguno | Bloqueo JA3 (Masscan, ZGrab2, Shodan, curl, Python requests, Nmap) |
| Detección de sandbox | Ninguno | Navegador sin interfaz / Safe Links / puntuación de UA y cabeceras de sandbox |
| Detección de enumeración | Ninguno | Enumeración de rutas + seguimiento de DNS NXDOMAIN con bloqueo automático |
| Detección de quema | Ninguno | Monitorización de registros CT, reputación de dominios, detección de analistas entre dominios, puntuación de confianza |
| Resiliencia de infraestructura | Ninguno | Interruptor de circuito, conmutación por error de protocolo, interruptor de hombre muerto, rotación de infraestructura |
| Entrega de payloads | Ninguno | PwnDrop, almacén de archivos Mythic, sistema de archivos, proxy HTTP con entrega condicional |
| Protección de payloads | Ninguno | Tokens de un solo uso, limitación de velocidad por ruta, protecciones de entrega |
| Protección contra phishing | Ninguno | Validación de tokens de campaña (lista estática o firmada con HMAC) |
| Interfaz de operador | Ninguno | Panel web + interfaz de terminal + puesto de mando multiinstancia |
| Observabilidad | Ninguno | Métricas Prometheus, informes de interacción, registro estructurado |
| Generación de configuración | Ninguno | Nginx, Caddy, Apache con personalización completa |
| Ingesta de reglas | Ninguno | Analizador de .htaccess + robots.txt |
| Fuentes de inteligencia de amenazas | Ninguno | Actualización automática desde 5 fuentes públicas |
| Sistema de plugins | Interfaz básica de 4 métodos | Orientado a eventos con enlaces on_event + configuración por plugin |
| Integración SIEM | Ninguno | Elasticsearch, Wazuh, Syslog (CEF/JSON) |
| Alertas webhook | Ninguno | Discord, Slack, webhook genérico |
| Inteligencia de listas blancas | Ninguno | Enriquecimiento automático de CIDR con ASN/org/país al iniciar |
| Anti-repetición | Hash SQLite | SQLite persistente con caché L1 en memoria, sobrevive a reinicios |
| Acciones de descarte | redirección, reinicio, proxy | redirección, reinicio, proxy, tarpit |
| Gestión TLS | Solo manual | Autofirmado automático + integración con Let's Encrypt |
| Despliegue en el borde | Ninguno | Cloudflare Worker + proxies de borde AWS Lambda con domain fronting |
| Seguridad de configuración | Ninguno | Cifrado con age y SOPS, comprobaciones de validación, gestión de claves API |
| Despliegue | Manual | Docker Compose con comprobaciones de estado |
| Asíncrono | Callbacks de Tornado | async/await nativo (ASGI + uvicorn) |