
InfraGuard è un proxy e gestore di reindirizzamento Command & Control che protegge la tua infrastruttura Red Team dall'attribuzione delle minacce.
Tracker di infrastrutture per red team e redirector C2 – un'alternativa moderna a RedWarden.
InfraGuard si posiziona tra internet e il tuo teamserver C2, validando ogni richiesta in entrata 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 al tuo teamserver.


.htaccess e robots.txt esistentimythic_file fa da proxy per /direct/download/{uuid} di Mythic su URL puliti; UUID fisso (alias URL) o modalità proxy (UUID dal percorso); il controllo accessi è fornito interamente dallo stack di filtri di InfraGuardon_event, configurazione per plugin, filtraggio eventi (solo_bloccati, punteggio_minimo, inclusione/esclusione dominio).env viene caricato automaticamente; la sintassi ${VAR} funziona in tutti i valori e chiavi di configurazioneConsulta la Pagina Wiki per l'installazione
infraguard --version Mostra versione
infraguard --help Mostra aiuto
infraguard run -c config.yaml Avvia il proxy inverso
infraguard run -c config.yaml --port 8443 Sovrascrive porta di ascolto
infraguard run -c config.yaml --host 0.0.0.0 Sovrascrive indirizzo di bind
infraguard dashboard -c config.yaml Avvia la dashboard web
infraguard dashboard -c config.yaml --port 9090 Sovrascrive porta dashboard
infraguard tui Avvia TUI con schermata di login
infraguard tui --url http://host:8080 --token TOK Connessione automatica alla dashboard
infraguard tui -c config.yaml Legge URL/token dal config
infraguard command-post -c command-post.yaml Avvia dashboard multi-istanza
infraguard command-post --instance name:url:token Aggiunge istanza tramite CLI (ripetibile)
infraguard profile parse <file> Analizza e mostra un profilo C2
infraguard profile parse <file> --format json Output in JSON
infraguard profile parse <file> --type brute_ratel Forza tipo profilo
infraguard profile convert <file> -o out.json Converte profilo in JSON
# Valori --type supportati: auto, cobalt_strike, mythic, brute_ratel, sliver, havoc, nighthawk, poshc2
# Auto-rilevamento: .profile = CS, .toml = Havoc, .yaml = PoshC2, .json = auto-rilevamento per chiavi
infraguard ingest <files...> Importa regole .htaccess/robots.txt
infraguard ingest <files...> --format blocklist Output come lista nera IP
infraguard ingest <files...> --format json Output come JSON
infraguard ingest <files...> -o banned_ips.txt Scrive lista nera su file
infraguard generate nginx -c config.yaml Genera configurazione Nginx
infraguard generate caddy -c config.yaml Genera Caddyfile
infraguard generate apache -c config.yaml Genera VirtualHost Apache
infraguard init -o config.yaml Genera configurazione iniziale
infraguard validate -c config.yaml Valida file di configurazione
Il comando generate accetta flag aggiuntivi per la personalizzazione dell'operatore:
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'unica dashboard.
┌─────────────────────────────┐
│ Dashboard Command Post │
│ http://localhost:9090 │
└──────────┬──────────────────┘
│ fetch parallelo
┌─────┼──────┬──────────┐
▼ ▼ ▼ ▼
IG-1 IG-2 IG-3 ... IG-N

# Tramite file di configurazione
infraguard command-post -c config/command-post.yaml
# Tramite argomenti CLI
infraguard command-post \
--instance "prod:https://ig1.example.com:8080:TOKEN1" \
--instance "staging:https://ig2.example.com:8080:TOKEN2" \
--port 9090
# Tramite Docker
docker compose --profile command-post up -d command-post
Crea config/command-post.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
# Modifica .env con il tuo dominio, teamserver e token
docker compose up -d
Questo avvia due servizi:
# Imposta in .env:
# INFRAGUARD_LETSENCRYPT=true
# INFRAGUARD_DOMAIN=cdn.example.com
# [email protected]
# Ottieni il certificato iniziale
docker compose --profile letsencrypt up certbot
# Avvia il proxy (userà il certificato LE)
docker compose up -d proxy dashboard
# Avvia il rinnovo automatico (controlla ogni 12 ore)
docker compose --profile letsencrypt up -d certbot-renew
Requisiti per Let's Encrypt:
INFRAGUARD_DOMAIN deve risolversi nell'IP pubblico di questo hostINFRAGUARD_DOMAIN_EMAIL deve essere un indirizzo email valido# Scarica tutti e tre i database GeoLite2 (Città, ASN, Paese)
docker compose --profile geoip up geoip-update
# Poi avvia normalmente – i database sono montati su /app/geoip/
docker compose up -d proxy dashboard
# Avvia PwnDrop insieme al proxy
docker compose --profile pwndrop up -d pwndrop
# Accedi all'admin UI di PwnDrop su https://localhost:8443
# InfraGuard lo raggiunge internamente su http://pwndrop:80
Quindi configura le route di contenuto nel tuo config per fare da proxy dei percorsi dei payload verso PwnDrop:
domains:
cdn.example.com:
content_routes:
- path: "/downloads/*"
backend:
type: "pwndrop"
target: "http://pwndrop:80"
auth_token: "${PWNDROP_TOKEN}"
# Esegui più nodi redirector
docker compose up -d --scale proxy-node=3
Decommenta il servizio proxy-node in docker-compose.yml per abilitarlo.
infraguard/
__init__.py Inizializzazione pacchetto
__main__.py Punto di ingresso python -m infraguard
main.py CLI Click
config/ Caricamento configurazione YAML, supporto .env, validazione Pydantic
core/ Motore ASGI proxy (app, proxy, router, TLS, azioni drop, consegna contenuti)
profiles/ Parser profili C2 (Cobalt Strike, Mythic, Brute Ratel, Sliver, Havoc, Nighthawk, PoshC2)
pipeline/ Filtri di validazione richieste (JA3, IP, bot, header, DNS, geo, profilo, replay, enumerazione, sandbox)
intel/ Intelligenza IP (liste nere, GeoIP, rDNS, feed, importazione regole)
tracking/ Persistenza SQLite (logging richieste, statistiche, registro nodi)
plugins/ Sistema di plugin (protocollo, loader, plugin integrati)
ui/
api/ API REST + WebSocket (Starlette)
web/ Dashboard SPA (HTML/JS/CSS)
tui/ Interfaccia terminale (Textual) con schermata di login
command_post/ Dashboard di aggregazione multi-istanza
listeners/ Listener di protocollo (HTTP, DNS, MQTT, WebSocket)
backends/ Generatori di configurazione (Nginx, Caddy, Apache)
models/ Tipi condivisi e modelli di eventi
Se desideri contribuire al progetto, crea un nuovo branch con il nome della versione e specifica lo stesso nome della versione nella pull request. Esempio: branch=v1.2.3 | [v1.2.3] Aggiunto elemento blah.
Licenza BSD 2-Clause. Consulta LICENSE per i dettagli.
Copyright (c) 2026, Whispergate
| Flag | Descrizione |
|---|
--listen-port PORT | Sovrascrive porta di ascolto (predefinito: dal config) |
--ssl-cert PATH | Sovrascrive percorso certificato SSL |
--ssl-key PATH | Sovrascrive percorso chiave SSL |
--redirect-url URL | Sovrascrive URL di reindirizzamento per richieste bloccate |
--default-action redirect|404 | Azione per richieste non corrispondenti |
--no-ip-filter | Omette blocchi IP allow/deny |
--no-header-check | Omette regole di validazione header |
--alias DOMAIN:ALIAS | Aggiunge alias nome server (ripetibile) |
--header NAME:VALUE | Aggiunge header di risposta personalizzato (ripetibile) |
| Endpoint | Metodo | Descrizione |
|---|
/api/instances | GET | Elenca tutte le istanze con stato di salute |
/api/stats | GET | Statistiche unite 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 |
| Volume | Scopo |
|---|
./config | File di configurazione (montati in sola lettura) |
./examples | Profili C2 (montati in sola lettura) |
./rules | Liste nere importate e file sorgente regole (montati in sola lettura) |
./data | Database SQLite (persistente) |
certs | Certificati TLS (condivisi tra proxy e certbot) |
geoip | Database GeoLite2 (popolati dal servizio geoip-update) |
pwndrop-data | File caricati e database di PwnDrop |
| Caratteristica | RedWarden | InfraGuard |
|---|
| Architettura | Singolo file ~99KB | Pacchetto modulare |
| Analisi profili | Macchina a stati regex | Parser strutturato con supporto completo di block/transform |
| Supporto C2 | Solo Cobalt Strike | Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk, PoshC2 |
| Protocolli | Solo HTTP | HTTP, DNS, MQTT, WebSocket |
| Modello filtro | Passa/blocca binario | Basato su punteggio (soglia 0.0-1.0), catena di 10 filtri |
| Fingerprinting TLS | Nessuno | Blocco JA3 (Masscan, ZGrab2, Shodan, curl, Python requests, Nmap) |
| Rilevamento sandbox | Nessuno | Browser headless / Safe Links / punteggio UA sandbox e header |
| Rilevamento enumerazione | Nessuno | Enumerazione percorsi + tracciamento NXDOMAIN DNS con blocco automatico |
| Rilevamento compromissione | Nessuno | Monitoraggio log CT, reputazione dominio (URLhaus/OpenPhish/GSB), rilevamento analista cross-dominio |
| Consegna payload | Nessuno | PwnDrop, file store Mythic, filesystem, proxy HTTP con consegna condizionale |
| Protezione payload | Nessuno | Token monouso, limitazione della frequenza per route, protezioni alla consegna (keying ambiente) |
| Protezione phishing | Nessuno | Validazione token campagna (elenco statico o firmato HMAC) |
| UI operatore | Nessuna | Dashboard web + interfaccia terminale + Command Post multi-istanza |
| Generazione configurazione | Nessuna | Nginx, Caddy, Apache con personalizzazione completa |
| Importazione regole | Nessuna | Parser .htaccess + robots.txt |
| Feed threat intelligence | Nessuno | Aggiornamento automatico da 5 fonti pubbliche |
| Sistema di plugin | Interfaccia base a 4 metodi | Guidato da eventi con hook on_event + configurazione per plugin |
| Integrazione SIEM | Nessuna | Elasticsearch, Wazuh, Syslog (CEF/JSON) |
| Avvisi webhook | Nessuno | Discord, Slack, webhook generico (avvisi compromissione passano attraverso stessi plugin) |
| Intelligenza 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 drop | redirect, reset, proxy | redirect, reset, proxy, tarpit |
| Gestione TLS | Solo manuale | Auto-firmato + integrazione Let's Encrypt |
| Deployment edge | Nessuno | Cloudflare Worker + AWS Lambda edge proxy con domain fronting |
| Deployment | Manuale | Docker Compose con health check |
| Logging | Output colorato personalizzato | JSON strutturato (structlog) |
| Async | Callback Tornado | Async/await nativo (ASGI + uvicorn) |