
InfraGuard è un proxy e gestore di reindirizzamento Command & Control che protegge la tua infrastruttura Red Team dall'attribuzione delle minacce.
Tracker di infrastrutture red team e redirector C2 -- un'alternativa moderna a RedWarden.
InfraGuard si posiziona tra Internet e il tuo teamserver C2, validando ogni richiesta in ingresso rispetto al tuo profilo C2 malleabile e bloccando tutto ciò che non è conforme. Scanner, bot e sonde del blue team vengono reindirizzati a un sito esca, mentre il traffico beacon legittimo passa fino al tuo teamserver.


mythic_file inoltra /direct/download/{uuid} di Mythic su URL puliti; modalità UUID fisso o proxy; controllo accessi fornito dallo stack di filtri di InfraGuard/metrics che espone contatori delle richieste, istogrammi di latenza upstream, stato del circuit breaker, freschezza dei feed e connessioni attiveon_event, configurazione per plugin e filtraggio degli eventi.env.htaccess e robots.txt esistenti.env caricato automaticamente; la sintassi ${VAR} funziona in tutti i valori e le chiavi di configurazioneConsulta la Pagina Wiki per l'installazione
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
### Opzioni del generatore
Il comando `generate` accetta flag aggiuntivi per la personalizzazione da parte dell'operatore:
| Flag | Descrizione |
|---|---|
| `--listen-port PORT` | Sovrascrive la porta di ascolto (predefinita: da config) |
| `--ssl-cert PATH` | Sovrascrive il percorso del certificato SSL |
| `--ssl-key PATH` | Sovrascrive il percorso della chiave SSL |
| `--redirect-url URL` | Sovrascrive l'URL di reindirizzamento per le richieste bloccate |
| `--default-action redirect\|404` | Azione per le richieste non corrispondenti |
| `--no-ip-filter` | Omette i blocchi IP consentiti/negati |
| `--no-header-check` | Omette le regole di validazione degli header |
| `--alias DOMAIN:ALIAS` | Aggiunge un alias per il nome del server (ripetibile) |
| `--header NAME:VALUE` | Aggiunge un header di risposta personalizzato (ripetibile) |
## Command Post (Dashboard Multi-Istanza)
Quando si eseguono più istanze di InfraGuard su diversi VPS o provider cloud, il Command Post aggrega statistiche, richieste ed eventi live da tutti i nodi in un unico dashboard.```
┌─────────────────────────────┐
│ 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
### Configurazione
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
Questo avvia due servizi:
- **proxy** -- il redirector sulle porte 443 e 80
- **dashboard** -- l'interfaccia web sulla porta 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
Requisiti per Let's Encrypt:
INFRAGUARD_DOMAIN deve risolvere all'IP pubblico di questo hostINFRAGUARD_DOMAIN_EMAIL deve essere un indirizzo email validodocker compose --profile geoip up geoip-update
docker compose up -d proxy dashboard
### Con PwnDrop (consegna del 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
Quindi configura le rotte dei contenuti nella tua configurazione per fare da proxy ai percorsi dei payload verso PwnDrop:```yaml domains: cdn.example.com: content_routes: - path: "/downloads/*" backend: type: "pwndrop" target: "http://pwndrop:80" auth_token: "${PWNDROP_TOKEN}"
### Con Ollama (generazione di profili assistita dall'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 variabile d'ambiente INFRAGUARD_OLLAMA_URL della dashboard è preconfigurata in docker-compose.yml. Quando Ollama è in esecuzione, l'interruttore AI Assistant appare nella pagina delle decoys e dei profili della dashboard.
docker compose up -d --scale proxy-node=3
Togli il commento al servizio `proxy-node` in `docker-compose.yml` per abilitarlo.
### Volumi
| Volume | Scopo |
|---|---|
| `./config` | File di configurazione (montati in sola lettura) |
| `./examples` | Profili C2 (montati in sola lettura) |
| `./rules` | Blocklist e file sorgente delle regole importati (montati in sola lettura) |
| `./data` | Database SQLite e profili generati (persistiti) |
| `certs` | Certificati TLS (condivisi tra proxy e certbot) |
| `geoip` | Database GeoLite2 (popolati dal servizio `geoip-update`) |
| `pwndrop-data` | File caricati su PwnDrop e database |
| `ollama-data` | Pesi del modello Ollama e configurazione |
## Architettura```
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
Se desideri contribuire al progetto, crea un nuovo branch con il nome della versione e specifica lo stesso nome della versione nella pull request. Es. branch=v1.2.3 | [v1.2.3] Aggiunto elemento blah.
Licenza BSD 2-Clause. Vedi LICENSE per i dettagli.
Copyright (c) 2026, Whispergate
| Endpoint | Metodo | Descrizione |
|---|
/api/instances | GET | Elenca tutte le istanze con stato di salute |
/api/stats | GET | Statistiche aggregate da tutte le istanze |
/api/requests | GET | Log richieste interleaved da tutte le istanze |
/api/intel/whitelist | POST | Aggiunge un IP alla whitelist su tutte le istanze |
/api/intel/blocklist | POST | Blocca un IP su tutte le istanze |
/api/intel/blocklist | DELETE | Sblocca un IP su tutte le istanze |
/ws/events | WS | Eventi live multiplexati da tutte le istanze |
| Funzione | RedWarden | InfraGuard |
|---|
| Architettura | Singolo file di ~99KB | Pacchetto modulare |
| Parsing dei profili | Macchina a stati regex | Parser strutturato con supporto completo per blocchi/transform |
| Supporto C2 | Solo Cobalt Strike | Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk, PoshC2 |
| Gestione dei profili | Modifica manuale dei file | Procedura guidata della dashboard con generazione, importazione, hot-swap e assistenza AI |
| Protocolli | Solo HTTP | HTTP, DNS, MQTT, WebSocket |
| Modello di filtro | Superato/non superato binario | Basato su punteggio (soglia 0.0--1.0), catena di 10 filtri |
| Impronta TLS | Nessuna | Blocco JA3 (Masscan, ZGrab2, Shodan, curl, Python requests, Nmap) |
| Rilevamento sandbox | Nessuno | Browser headless / Safe Links / punteggio di UA e header sandbox |
| Rilevamento enumerazione | Nessuno | Enumerazione dei percorsi + monitoraggio DNS NXDOMAIN con blocco automatico |
| Rilevamento bruciatura | Nessuno | Monitoraggio dei log CT, reputazione del dominio, rilevamento di analisti cross-domain, punteggio di confidenza |
| Resilienza dell'infrastruttura | Nessuna | Circuit breaker, failover di protocollo, dead man's switch, rotazione dell'infrastruttura |
| Consegna dei payload | Nessuna | PwnDrop, archivio file Mythic, filesystem, proxy HTTP con consegna condizionale |
| Protezione dei payload | Nessuna | Token monouso, rate limiting per route, protezioni di consegna |
| Protezione phishing | Nessuna | Validazione dei token della campagna (lista statica o con firma HMAC) |
| Interfaccia operatore | Nessuna | Dashboard web + interfaccia terminale + Command Post multi-istanza |
| Osservabilità | Nessuna | Metriche Prometheus, report degli engagement, logging strutturato |
| Generazione configurazione | Nessuna | Nginx, Caddy, Apache con personalizzazione completa |
| Acquisizione delle regole | Nessuna | Parser .htaccess + robots.txt |
| Feed di threat intelligence | Nessuno | Aggiornamento automatico da 5 fonti pubbliche |
| Sistema di plugin | Interfaccia di base a 4 metodi | Event-driven con hook on_event + configurazione per plugin |
| Integrazione SIEM | Nessuna | Elasticsearch, Wazuh, Syslog (CEF/JSON) |
| Avvisi webhook | Nessuno | Discord, Slack, webhook generico |
| Intelligence delle whitelist | Nessuna | Arricchimento automatico dei CIDR con ASN/org/paese all'avvio |
| Anti-replay | Hash SQLite | SQLite persistente con cache L1 in memoria, sopravvive ai riavvii |
| Azioni di drop | redirect, reset, proxy | redirect, reset, proxy, tarpit |
| Gestione TLS | Solo manuale | Autofirmati automatici + integrazione Let's Encrypt |
| Distribuzione edge | Nessuna | Proxy edge Cloudflare Worker + AWS Lambda con domain fronting |
| Sicurezza della configurazione | Nessuna | Crittografia con age e SOPS, controlli di validazione, gestione delle chiavi API |
| Distribuzione | Manuale | Docker Compose con health check |
| Asincrono | Callback di Tornado | async/await nativo (ASGI + uvicorn) |