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

Architecture

Funzionalità
Proxy e listener
- Proxy multi-dominio -- inoltra più domini simultaneamente, ciascuno con profili C2, upstream e regole indipendenti
- Listener multi-protocollo -- listener HTTP/HTTPS, DNS, MQTT e WebSocket in esecuzione simultanea con intelligenza IP condivisa e tracciamento degli eventi
- Interruttore automatico (circuit breaker) -- protezione dai guasti per singolo upstream con stati chiuso/aperto/semi-aperto; in caso di backend non raggiungibili, si ripiega sull'azione di drop del dominio
- Failover di protocollo -- failover e failback automatici tra i protocolli dei listener ordinati per priorità
Supporto profili C2
- Validazione dei profili C2 -- analizza e applica i profili di Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk e PoshC2 come regole del redirector
- Profili sostituibili a caldo -- sostituisci il profilo C2 attivo di un dominio a runtime dalla dashboard senza riavviare il proxy
- Procedura guidata per la generazione di profili -- genera nuovi profili C2 da zero per tutti gli 8 tipi supportati tramite un modulo guidato, oppure importa e carica profili esistenti con rilevamento automatico del tipo e validazione
- Generazione di profili assistita dall'IA -- l'integrazione opzionale con Ollama fornisce un pannello di chat nella dashboard per assistenza nella creazione dei profili e consigli OPSEC
Pipeline di filtraggio
- Pipeline di filtraggio basata su punteggi -- 10 filtri contribuiscono ciascuno con un punteggio 0.0--1.0; una soglia configurabile determina blocco/permesso. Filtri: JA3, IP, bot, header, DNS, geo, profilo, replay, enumerazione, sandbox.
- Filtraggio dell'impronta TLS JA3 -- blocca Masscan, ZGrab2, Shodan, curl, Python requests e Nmap a livello di handshake TLS prima che vengano scambiati dati HTTP; funziona tramite header reverse-proxy o protocollo asyncio personalizzato; la modalità allowlist opzionale applica il JA3 del beacon
- Rilevamento di sandbox e browser headless -- accumulo di punteggi basato su segnali HTTP: UA HeadlessChrome, Accept-Language mancante, Chrome senza sec-ch-ua, UA degli scanner Safe Links e msnbot, ordinamento Accept non da browser
- Rilevamento dell'enumerazione dei percorsi -- tracciamento degli URI univoci per IP in una finestra scorrevole; blocca dirbuster/ffuf/gobuster prima che mappino lo spazio degli URI
- Rilevamento dell'enumerazione dei sottodomini DNS -- tiene traccia delle risposte NXDOMAIN per IP client; blocca automaticamente gli IP sorgente al superamento della soglia
- Anti-bot / anti-crawling -- oltre 40 pattern User-Agent di scanner/bot noti, rilevamento di anomalie negli header
- Protezione dal replay -- rifiuta richieste duplicate tramite hash del contenuto; gli hash vengono persistiti su SQLite così la protezione sopravvive ai riavvii
- Azioni di drop -- reindirizzamento, reset TCP, proxy verso sito esca o tarpit (risposta a goccia lenta per far perdere tempo agli scanner)
Intelligence
- Intelligence IP -- blocklist CIDR integrate per 19 range di vendor di sicurezza (Shodan, Censys, Rapid7, ecc.), filtraggio GeoIP, corrispondenza per parole chiave nel DNS inverso
- Feed di threat intelligence -- aggiornamento automatico delle blocklist da fonti pubbliche (abuse.ch, Emerging Threats, Spamhaus DROP, Binary Defense) con intervallo di aggiornamento configurabile e cache su disco
- Blocco IP dinamico -- blocca gli IP al di fuori dei range in whitelist; whitelist automatica degli IP dopo N richieste C2 valide
- Arricchimento della whitelist -- i CIDR in whitelist vengono arricchiti automaticamente con dati ASN, organizzazione, paese e continente all'avvio tramite i database GeoIP
- Rilevamento di bruciatura (burn detection) -- monitoraggio dei log Certificate Transparency tramite crt.sh, auto-monitoraggio della reputazione del dominio tramite URLhaus/OpenPhish/Google Safe Browsing e rilevamento di analisti cross-domain quando un singolo IP accede a più domini dell'operatore
- Punteggio di confidenza di bruciatura -- punteggio continuo da 0 a 100 basato su 6 segnali ponderati: diversità JA3, picchi di volume, nuovi ASN, esposizione nei log CT, segnalazioni di reputazione e tentativi di autenticazione falliti. Include azioni consigliate: monitora, ruota o brucia immediatamente.
- Iniezione di token canary -- pixel di tracciamento, link honeypot e moduli honeypot iniettati automaticamente nelle pagine esca per rilevare le indagini del blue team
- Monitoraggio DNS passivo -- interroga CIRCL PDNS per la risoluzione esterna dei tuoi domini; rileva nuovi record, picchi NXDOMAIN e la prima esposizione
Consegna dei payload
- Route di consegna dei contenuti -- servi payload, esche e file statici su percorsi specifici tramite PwnDrop, file store di Mythic, filesystem locale o backend proxy HTTP; consegna condizionale opzionale per servire contenuti reali ai target ed esche agli scanner
- Staging dei file Mythic -- il backend
mythic_fileinoltra/direct/download/{uuid}di Mythic su URL puliti; modalità UUID fisso o proxy; controllo accessi fornito dallo stack di filtri di InfraGuard - Token payload monouso -- token emessi automaticamente quando un beacon viene aggiunto dinamicamente alla whitelist; l'applicazione atomica del monouso su SQLite impedisce il replay dell'URL da parte di analisti o sandbox; TTL e numero massimo di utilizzi configurabili
- Rate limiting per route -- limitatore di download per-IP a finestra scorrevole sulle route di contenuti; il superamento del limite serve l'esca per scanner configurata o un 429
- Protezioni di consegna -- controllo basato sull'ambiente per le route di contenuti: richiedi IP del beacon, allowlist UA, valori header obbligatori, header vietati; i controlli falliti servono l'azione di drop del dominio, non un 403 grezzo
- Token per campagne di phishing -- limita l'accesso alle pagine di phishing tramite token per campagna incorporati nei link delle email; elenco statico di token o token auto-validanti firmati HMAC con TTL configurabile
Resilienza
- Rotazione dell'infrastruttura -- rotazione blue-green Terraform in un clic su 5 provider cloud con controlli pre-flight, rollback e stato cifrato con age
- Pianificazione della rotazione -- policy di rotazione automatizzate: intervallo fisso, attivata da burn, soglia sul numero di richieste e rotazione scaglionata
- Domain fronting -- instradamento C2 basato su CDN tramite separazione SNI/header Host, con rimozione degli header CDN e protezione SSRF
- Interruttore di emergenza (dead man's switch) -- TTL dell'heartbeat dell'operatore che interrompe automaticamente l'inoltro C2 se l'operatore non effettua il check-in
- Proxy edge -- Cloudflare Worker e AWS Lambda per il domain fronting attraverso infrastrutture CDN, blocco per paese a livello edge e riscrittura dell'host
Dashboard e strumenti per l'operatore
- Dashboard web -- SPA in tempo reale con pagina di login, feed live delle richieste, statistiche sui domini, IP bloccati principali, streaming di eventi WebSocket e azioni inline di blocco/whitelist/sblocco
- Gestione delle pagine esca -- elenca, visualizza in anteprima e modifica le pagine HTML esca direttamente dalla dashboard
- Command Post -- dashboard di aggregazione multi-istanza che unisce statistiche, richieste ed eventi live da più nodi InfraGuard in un'unica vista
- Interfaccia terminale -- TUI basata su Textual con schermata di login, polling live dell'API e log delle richieste codificato a colori
- Report degli engagement -- report auto-contenuti in HTML, JSON o CSV con ripartizione per dominio, efficacia dei filtri e audit trail dell'operatore
- Metriche Prometheus -- endpoint
/metricsche espone contatori delle richieste, istogrammi di latenza upstream, stato del circuit breaker, freschezza dei feed e connessioni attive
Integrazioni e plugin
- Integrazione SIEM -- plugin integrati per Elasticsearch, Wazuh e Syslog (CEF/JSON) con inoltro in batch
- Avvisi webhook -- plugin integrati per Discord (embeds), Slack (Block Kit) e webhook generico; gli avvisi di burn detection passano attraverso lo stesso sistema di plugin
- Integrazione Phishing.club -- ricevitore webhook firmato HMAC che acquisisce eventi di phishing e aggiunge automaticamente alla allowlist gli IP dei target che cliccano
- Sistema di plugin -- architettura guidata dagli eventi con hook
on_event, configurazione per plugin e filtraggio degli eventi
Configurazione e deploy
- Cifratura della configurazione -- cifratura age (intero file) e SOPS (per valore) con supporto per file
.env - Validazione della configurazione -- strumento diff CLI e oltre 20 controlli di validazione di sicurezza, operatività e TLS
- Gestione delle chiavi API -- crea, revoca e ruota chiavi API con rate limit per chiave, monitoraggio dell'utilizzo e quote
- Generazione di configurazioni backend -- genera configurazioni Nginx, Caddy o Apache con TLS, filtraggio IP, controlli header, alias e header personalizzati
- Importazione di regole -- importa blocklist IP e pattern User-Agent da file
.htaccesserobots.txtesistenti - Deploy Docker -- Dockerfile + docker-compose con opzionali Let's Encrypt, downloader GeoIP, server payload PwnDrop e assistente IA Ollama
- Supporto GeoIP -- tutti e tre i database GeoLite2 (City, ASN, Country) con download automatico Docker
- Fallback TLS autofirmato -- genera automaticamente i certificati quando i percorsi configurati non esistono
- Supporto variabili d'ambiente -- file
.envcaricato automaticamente; la sintassi${VAR}funziona in tutti i valori e le chiavi di configurazione - Endpoint di health configurabile -- modifica il percorso del health check per evitare il fingerprinting
- Log strutturati -- log strutturati in formato JSON tramite structlog
- Tracciamento e persistenza -- SQLite con modalità WAL per log delle richieste, statistiche, registro dei nodi, hash di replay e token dei payload
Guida all'installazione
Consulta la Pagina Wiki per l'installazione
Riferimento 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
### 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

Avvio rapido```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
### 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}"
Cosa mostra
- Statistiche aggregate -- totale richieste, consentite, bloccate sommate su tutte le istanze
- Barra di salute delle istanze -- stato verde/rosso per ogni nodo connesso
- Log richieste interleaved -- richieste da tutte le istanze ordinate per timestamp, ciascuna etichettata con il nome della propria istanza
- Top IP bloccati aggregati -- aggregati su tutte le istanze
- Statistiche per dominio -- domini da tutte le istanze con tassi di blocco ricalcolati
- Flusso eventi in tempo reale -- eventi WebSocket multiplexati da tutti i nodi
- Azioni di blocco/whitelist -- propagate a tutte le istanze o a una specifica
Endpoint API
| 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 |
Distribuzione con Docker
Avvio rapido```bash
cp .env.example .env
Edit .env with your domain, teamserver, and token
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:
- La porta 80 deve essere raggiungibile da internet
INFRAGUARD_DOMAINdeve risolvere all'IP pubblico di questo hostINFRAGUARD_DOMAIN_EMAILdeve essere un indirizzo email valido
Con i database 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 (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.
Scalabilità```bash
Run multiple redirector nodes
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
Confronto con RedWarden
| 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) |
Contributi
- Mgeeky - Idea originale (RedWarden)
- curi0usJack - regole .htaccess
- Profili
- threatexpress - jquery-c2.3.14.profile
- InfinityCurve - Havoc Profile
- Framework C2
- Cobalt Strike - Supporto profili Malleable C2
- Mythic - Supporto profili HTTPX + staging dei file
- Brute Ratel C4 - Supporto profili di configurazione server
- Sliver - Supporto profili HTTP C2
- Havoc - Supporto profili TOML
- Nighthawk - Supporto configurazione listener JSON
- PoshC2 - Supporto configurazione YAML
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
Licenza BSD 2-Clause. Vedi LICENSE per i dettagli.
Copyright (c) 2026, Whispergate