
InfraGuard v0.4.3
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.

Arquitectura

Características
Proxy y listeners
- Proxy multi-dominio -- proxy para múltiples dominios simultáneamente, cada uno con perfiles C2, upstreams y reglas independientes
- Listeners multi-protocolo -- listeners HTTP/HTTPS, DNS, MQTT y WebSocket ejecutándose a la vez con inteligencia de IP compartida y seguimiento de eventos
- Disyuntor (circuit breaker) -- protección ante fallos por upstream con estados abierto/cerrado/semiabierto; si los backends no están accesibles, se aplica la acción de descarte del dominio
- Conmutación por error de protocolo -- failover y failback automáticos entre protocolos de listener ordenados por prioridad
Soporte de perfiles C2
- Validación de perfiles C2 -- analiza y aplica perfiles de Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk y PoshC2 como reglas del redirector
- Perfiles intercambiables en caliente -- cambia el perfil C2 activo de un dominio en tiempo de ejecución desde el panel sin reiniciar el proxy
- Asistente de generación de perfiles -- genera nuevos perfiles C2 desde cero para los 8 tipos soportados mediante un formulario guiado, o importa y sube perfiles existentes con detección y validación automáticas de tipo
- Generación de perfiles asistida por IA -- la integración opcional con Ollama proporciona un panel de chat en el dashboard para ayudar a crear perfiles y dar consejos de OPSEC
Pipeline de filtrado
- Pipeline de filtrado basado en puntuación -- 10 filtros que aportan cada uno una puntuación de 0.0--1.0; un umbral configurable determina el bloqueo/permiso. Filtros: JA3, IP, bot, cabeceras, DNS, geo, perfil, replay, enumeración y sandbox.
- Filtrado de huella TLS JA3 -- bloquea Masscan, ZGrab2, Shodan, curl, Python requests y Nmap en la capa de handshake TLS antes de que se intercambie cualquier dato HTTP; funciona mediante cabecera de reverse proxy o protocolo asyncio personalizado; el modo de lista blanca opcional exige el JA3 del beacon
- Detección de sandbox y navegador headless -- acumulación de puntuación a partir de señales HTTP: UA de HeadlessChrome, Accept-Language ausente, Chrome sin sec-ch-ua, UAs de escáner Safe Links y msnbot, orden de Accept no propio de navegador
- Detección de enumeración de rutas -- seguimiento de URIs únicas por IP en una ventana deslizante; bloquea dirbuster/ffuf/gobuster antes de que mapeen el espacio de URIs
- Detección de enumeración de subdominios DNS -- rastrea respuestas NXDOMAIN por IP de cliente; bloquea automáticamente las IPs de origen al superar el umbral
- Anti-bot / anti-crawling -- más de 40 patrones conocidos de User-Agent de escáneres/bots y detección de anomalías en cabeceras
- Protección contra replay -- rechaza solicitudes duplicadas mediante hash de contenido; los hashes se persisten en SQLite para que la protección sobreviva a los reinicios
- Acciones de descarte -- redirección, reset TCP, proxy a sitio señuelo o tarpit (respuesta de goteo lento para hacer perder tiempo al escáner)
Inteligencia
- Inteligencia de IP -- listas de bloqueo CIDR integradas para 19 rangos de proveedores de seguridad (Shodan, Censys, Rapid7, etc.), filtrado GeoIP y coincidencia de palabras clave en DNS inverso
- Feeds de threat intel -- listas de bloqueo autoactualizables desde fuentes públicas (abuse.ch, Emerging Threats, Spamhaus DROP, Binary Defense) con intervalo de refresco configurable y caché en disco
- Bloqueo dinámico de IPs -- bloquea IPs fuera de los rangos permitidos; añade automáticamente a la lista blanca las IPs tras N solicitudes C2 válidas
- Enriquecimiento de listas blancas -- los CIDR permitidos se enriquecen automáticamente con datos de ASN, organización, país y continente al arrancar mediante bases de datos GeoIP
- Detección de quema (burn) -- monitorización de registros de transparencia de certificados mediante crt.sh, autovigilancia de reputación del dominio mediante URLhaus/OpenPhish/Google Safe Browsing y detección cruzada de analistas cuando una única IP accede a varios dominios del operador
- Puntuación de confianza de quema -- puntuación continua de 0--100 basada en 6 señales ponderadas: diversidad de JA3, picos de volumen, ASNs nuevos, exposición en registros CT, impactos de reputación e intentos de autenticación fallidos. Incluye acciones recomendadas: monitorizar, rotar o quemar de inmediato.
- Inyección de tokens canarios -- píxeles de seguimiento, enlaces honeypot y formularios honeypot autoinyectados en las páginas señuelo para detectar la investigación del blue team
- Monitorización DNS pasiva -- consulta CIRCL PDNS para ver la resolución externa de tus dominios; detecta nuevos registros, picos de NXDOMAIN y exposición de primera vista
Entrega de payloads
- Rutas de entrega de contenido -- sirve payloads, señuelos y archivos estáticos en rutas específicas mediante PwnDrop, el almacén de archivos de Mythic, el sistema de archivos local o backends proxy HTTP; entrega condicional opcional para servir contenido real a los objetivos y señuelos a los escáneres
- Staging de archivos Mythic -- el backend
mythic_filehace 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 - Tokens de payload de un solo uso -- los tokens se emiten automáticamente cuando un beacon se añade dinámicamente a la lista blanca; el cumplimiento atómico de un solo uso en SQLite impide la reutilización de la URL por parte de analistas o sandboxes; TTL y número máximo de usos configurables
- Límite de tasa por ruta -- limitador de descargas por IP con ventana deslizante en las rutas de contenido; superar el límite sirve el señuelo configurado para escáneres o un 429
- Guardas de entrega -- condicionamiento por entorno para rutas de contenido: exigir IP de beacon, lista blanca de UA, valores de cabecera obligatorios, cabeceras prohibidas; si fallan las comprobaciones se sirve la acción de descarte del dominio, no un 403 crudo
- Tokens para campañas de phishing -- protege las páginas de phishing con tokens por campaña incrustados en los enlaces de los correos; lista estática de tokens o tokens autovalidados firmados con HMAC y TTL configurable
Resiliencia
- Rotación de infraestructura -- rotación Terraform blue-green con un clic en 5 proveedores cloud, con comprobaciones previas, rollback y estado cifrado con age
- Planificación de rotación -- políticas de rotación automatizadas: intervalo fijo, activada por quema, umbral de número de solicitudes y rotación escalonada
- Domain fronting -- enrutamiento C2 basado en CDN mediante división de cabeceras SNI/Host, con eliminación de cabeceras del CDN y protección SSRF
- Interruptor de hombre muerto -- TTL de heartbeat del operador que detiene automáticamente el reenvío C2 si el operador no se registra
- Proxies perimetrales -- Cloudflare Worker y AWS Lambda para domain fronting a través de infraestructura CDN, bloqueo por país en el borde y reescritura de host
Panel de control y herramientas del operador
- Panel web -- SPA en tiempo real con página de inicio de sesión, feed de solicitudes en vivo, estadísticas de dominios, IPs bloqueadas principales, streaming de eventos WebSocket y acciones en línea de bloqueo/lista blanca/desbloqueo
- Gestión de páginas señuelo -- lista, previsualiza y edita las páginas HTML señuelo directamente desde el panel
- Puesto de mando -- panel de agregación multiinstancia que fusiona estadísticas, solicitudes y eventos en vivo de varios nodos InfraGuard en una única vista
- Interfaz de terminal -- TUI basada en Textual con pantalla de inicio de sesión, polling en vivo de la API y registro de solicitudes con códigos de color
- Informes de engagement -- informes autocontenidos en HTML, JSON o CSV con desgloses por dominio, efectividad de los filtros y rastro de auditoría del operador
- Métricas Prometheus -- endpoint
/metricsque expone contadores de solicitudes, histogramas de latencia de upstream, estado del disyuntor, frescura de los feeds y conexiones activas
Integraciones y plugins
- Integración SIEM -- plugins integrados para Elasticsearch, Wazuh y Syslog (CEF/JSON) con reenvío por lotes
- Alertas por webhook -- plugins integrados para Discord (embeds), Slack (Block Kit) y webhook genérico; las alertas de detección de quema pasan por el mismo sistema de plugins
- Integración con Phishing.club -- receptor de webhook firmado con HMAC que ingiere eventos de phishing y añade automáticamente a la lista blanca las IPs de los objetivos que hacen clic
- Sistema de plugins -- arquitectura basada en eventos con hooks
on_event, configuración por plugin y filtrado de eventos
Configuración y despliegue
- Cifrado de configuración -- cifrado con age (archivo completo) y SOPS (por valor) con soporte de archivos
.env - Validación de configuración -- herramienta CLI de diff y más de 20 comprobaciones de seguridad, operativas y de validación TLS
- Gestión de claves API -- crea, revoca y rota claves API con límites de tasa por clave, seguimiento de uso y cuotas
- Generación de configuración de backend -- genera configuraciones para Nginx, Caddy o Apache con TLS, filtrado de IPs, comprobación de cabeceras, alias y cabeceras personalizadas
- Ingesta de reglas -- importa listas de bloqueo de IPs y patrones de User-Agent desde archivos
.htaccessyrobots.txtexistentes - Despliegue con Docker -- Dockerfile + docker-compose con opciones de Let's Encrypt, descargador de GeoIP, servidor de payloads PwnDrop y asistente de IA Ollama
- Soporte GeoIP -- las tres bases de datos GeoLite2 (City, ASN, Country) con descarga automática en Docker
- Respaldo TLS autofirmado -- genera certificados automáticamente cuando las rutas configuradas no existen
- Soporte de variables de entorno -- archivo
.envcargado automáticamente; la sintaxis${VAR}funciona en todos los valores y claves de configuración - Endpoint de salud configurable -- cambia la ruta de la comprobación de salud para evitar el fingerprinting
- Registro estructurado -- logs estructurados en formato JSON mediante structlog
- Seguimiento y persistencia -- SQLite en modo WAL para registro de solicitudes, estadísticas, registro de nodos, hashes de replay y tokens de payload
Guía de instalación
Consulta la página Wiki para la instalación
Referencia 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
### 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

Inicio rápido```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
### 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}"
Qué muestra
- Estadísticas combinadas -- total de solicitudes, permitidas y bloqueadas sumadas en todas las instancias
- Barra de salud de instancias -- estado verde/rojo para cada nodo conectado
- Registro de solicitudes entrelazado -- solicitudes de todas las instancias ordenadas por marca de tiempo, cada una etiquetada con el nombre de su instancia
- Principales IPs bloqueadas combinadas -- agregadas en todas las instancias
- Estadísticas por dominio -- dominios de todas las instancias con tasas de bloqueo recalculadas
- Fuente de eventos en vivo -- eventos WebSocket multiplexados de todos los nodos
- Acciones de bloqueo/lista blanca -- se propagan a todas las instancias o a una específica
Endpoints de API
| 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 |
Despliegue con Docker
Inicio rápido```bash
cp .env.example .env
Edit .env with your domain, teamserver, and token
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:
- El puerto 80 debe ser accesible desde internet
INFRAGUARD_DOMAINdebe resolverse a la IP pública de este hostINFRAGUARD_DOMAIN_EMAILdebe ser una dirección de correo electrónico válida
Con bases de datos 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
### 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.
Escalado```bash
Run multiple redirector nodes
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
Comparison with RedWarden
| 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) |
Contribuciones
- Mgeeky - Idea original (RedWarden)
- curi0usJack - reglas .htaccess
- Perfiles
- threatexpress - jquery-c2.3.14.profile
- InfinityCurve - Havoc Profile
- Frameworks C2
- Cobalt Strike - Soporte de perfiles Malleable C2
- Mythic - Soporte de perfiles HTTPX + staging de archivos
- Brute Ratel C4 - Soporte de perfiles de configuración de servidor
- Sliver - Soporte de perfiles C2 HTTP
- Havoc - Soporte de perfiles TOML
- Nighthawk - Soporte de configuración de listeners JSON
- PoshC2 - Soporte de configuración YAML
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
Licencia BSD de 2 cláusulas. Consulta LICENSE para más detalles.
Copyright (c) 2026, Whispergate