
InfraGuard is a Command & Control Redirection Proxy and Manager which protects your Red Team Infrastructure against threat attribution
Red Team-Infrastruktur-Tracker und C2-Redirector – eine moderne Alternative zu RedWarden.
InfraGuard sitzt zwischen dem Internet und Ihrem C2-Teamserver, validiert jede eingehende Anfrage gegen Ihr Malleable-C2-Profil und blockiert alles, was nicht konform ist. Scanner, Bots und Blue Team-Sonden werden auf eine Tarnseite umgeleitet, während legitimer Beacon-Traffic zu Ihrem Teamserver durchgelassen wird.


ssl_fingerprint, HAProxy natives JA3) oder eigenem asyncio-Protokoll; optionaler Allowlist-Modus erzwingt Beacon-JA3.htaccess- und robots.txt-Dateienmythic_file-Backend proxyt Mythics /direct/download/{uuid} unter sauberen URLs; feste UUID (URL-Aliasing) oder Proxy-Modus (UUID aus Pfad); Zugriffskontrolle erfolgt vollständig über den Filter-Stack von InfraGuardon_event-Hooks, Pro-Plugin-Konfiguration, Ereignisfilterung (only_blocked, min_score, Domain-Ein-/Ausschluss).env-Datei wird automatisch geladen; ${VAR}-Syntax funktioniert in allen Konfigurationswerten und -schlüsselnSchauen Sie sich die Wiki-Seite für die Installation an.
infraguard --version Version anzeigen
infraguard --help Hilfe anzeigen
infraguard run -c config.yaml Reverse Proxy starten
infraguard run -c config.yaml --port 8443 Listen-Port überschreiben
infraguard run -c config.yaml --host 0.0.0.0 Bind-Adresse überschreiben
infraguard dashboard -c config.yaml Web-Dashboard starten
infraguard dashboard -c config.yaml --port 9090 Dashboard-Port überschreiben
infraguard tui TUI mit Anmeldebildschirm starten
infraguard tui --url http://host:8080 --token TOK Automatisch mit Dashboard verbinden
infraguard tui -c config.yaml URL/Token aus Konfiguration lesen
infraguard command-post -c command-post.yaml Multi-Instanz-Dashboard starten
infraguard command-post --instance name:url:token Instanz über CLI hinzufügen (wiederholbar)
infraguard profile parse <file> C2-Profil parsen und anzeigen
infraguard profile parse <file> --format json Als JSON ausgeben
infraguard profile parse <file> --type brute_ratel Profiltyp erzwingen
infraguard profile convert <file> -o out.json Profil nach JSON konvertieren
# Unterstützte --type-Werte: auto, cobalt_strike, mythic, brute_ratel, sliver, havoc, nighthawk, poshc2
# Auto-Erkennung: .profile = CS, .toml = Havoc, .yaml = PoshC2, .json = Auto-Erkennung anhand von Schlüsseln
infraguard ingest <files...> .htaccess/robots.txt-Regeln importieren
infraguard ingest <files...> --format blocklist Als IP-Blockliste ausgeben
infraguard ingest <files...> --format json Als JSON ausgeben
infraguard ingest <files...> -o banned_ips.txt Blockliste in Datei schreiben
infraguard generate nginx -c config.yaml Nginx-Konfiguration generieren
infraguard generate caddy -c config.yaml Caddyfile generieren
infraguard generate apache -c config.yaml Apache-VirtualHost generieren
infraguard init -o config.yaml Starter-Konfiguration generieren
infraguard validate -c config.yaml Konfigurationsdatei validieren
Der generate-Befehl akzeptiert zusätzliche Flags zur Operator-Anpassung:
Wenn mehrere InfraGuard-Instanzen auf verschiedenen VPSen oder Cloud-Anbietern betrieben werden, aggregiert der Command Post Statistiken, Anfragen und Live-Ereignisse aller Knoten in einem einzigen Dashboard.
┌─────────────────────────────┐
│ Command Post Dashboard │
│ http://localhost:9090 │
└──────────┬──────────────────┘
│ paralleler Abruf
┌─────┼──────┬──────────┐
▼ ▼ ▼ ▼
IG-1 IG-2 IG-3 ... IG-N

# Über Konfigurationsdatei
infraguard command-post -c config/command-post.yaml
# Über CLI-Argumente
infraguard command-post \
--instance "prod:https://ig1.example.com:8080:TOKEN1" \
--instance "staging:https://ig2.example.com:8080:TOKEN2" \
--port 9090
# Über Docker
docker compose --profile command-post up -d command-post
Erstellen Sie 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
# Bearbeiten Sie .env mit Ihrer Domain, Ihrem Teamserver und Ihrem Token
docker compose up -d
Dies startet zwei Dienste:
# In .env setzen:
# INFRAGUARD_LETSENCRYPT=true
# INFRAGUARD_DOMAIN=cdn.example.com
# [email protected]
# Erstes Zertifikat einholen
docker compose --profile letsencrypt up certbot
# Proxy starten (verwendet das LE-Zertifikat)
docker compose up -d proxy dashboard
# Automatische Verlängerung starten (prüft alle 12 Stunden)
docker compose --profile letsencrypt up -d certbot-renew
Anforderungen für Let's Encrypt:
INFRAGUARD_DOMAIN muss auf die öffentliche IP dieses Hosts aufgelöst werdenINFRAGUARD_DOMAIN_EMAIL muss eine gültige E-Mail-Adresse sein# Alle drei GeoLite2-Datenbanken herunterladen (City, ASN, Country)
docker compose --profile geoip up geoip-update
# Dann normal starten – Datenbanken sind unter /app/geoip/ eingebunden
docker compose up -d proxy dashboard
# PwnDrop neben dem Proxy starten
docker compose --profile pwndrop up -d pwndrop
# Auf die PwnDrop-Admin-Oberfläche unter https://localhost:8443 zugreifen
# InfraGuard erreicht sie intern unter http://pwndrop:80
Konfigurieren Sie dann Inhaltsrouten in Ihrer Konfiguration, um Payload-Pfade an PwnDrop weiterzuleiten:
domains:
cdn.example.com:
content_routes:
- path: "/downloads/*"
backend:
type: "pwndrop"
target: "http://pwndrop:80"
auth_token: "${PWNDROP_TOKEN}"
# Mehrere Redirector-Knoten ausführen
docker compose up -d --scale proxy-node=3
Kommentieren Sie den proxy-node-Dienst in docker-compose.yml aus, um dies zu aktivieren.
infraguard/
__init__.py Paket-Init
__main__.py python -m infraguard Einstieg
main.py Click-CLI
config/ YAML-Konfigurationsladung, .env-Unterstützung, Pydantic-Validierung
core/ ASGI-Proxy-Engine (App, Proxy, Router, TLS, Drop-Aktionen, Content-Delivery)
profiles/ C2-Profil-Parser (Cobalt Strike, Mythic, Brute Ratel, Sliver, Havoc, Nighthawk, PoshC2)
pipeline/ Anfrage-Validierungsfilter (JA3, IP, Bot, Header, DNS, Geo, Profil, Replay, Enumeration, Sandbox)
intel/ IP-Intelligenz (Blocklisten, GeoIP, rDNS, Feeds, Regelimport)
tracking/ SQLite-Persistenz (Anfrageprotokollierung, Statistiken, Knotenregister)
plugins/ Plugin-System (Protokoll, Lader, Builtins)
ui/
api/ REST-API + WebSocket (Starlette)
web/ SPA-Dashboard (HTML/JS/CSS)
tui/ Terminal-UI (Textual) mit Anmeldebildschirm
command_post/ Multi-Instanz-Aggregations-Dashboard
listeners/ Protokoll-Listener (HTTP, DNS, MQTT, WebSocket)
backends/ Config-Generatoren (Nginx, Caddy, Apache)
models/ Gemeinsame Typen und Ereignismodelle
Wenn Sie zum Projekt beitragen möchten, erstellen Sie bitte einen neuen Branch mit der Versionsnummer und geben Sie dieselbe Versionsnummer im Pull Request an. Z. B. branch=v1.2.3 | [v1.2.3] Element blah hinzugefügt.
BSD 2-Clause Lizenz. Siehe LICENSE für Details.
Copyright (c) 2026, Whispergate
| Flag | Beschreibung |
|---|
--listen-port PORT | Listen-Port überschreiben (Standard: aus Konfiguration) |
--ssl-cert PATH | SSL-Zertifikatspfad überschreiben |
--ssl-key PATH | SSL-Schlüsselpfad überschreiben |
--redirect-url URL | Weiterleitungs-URL für blockierte Anfragen überschreiben |
--default-action redirect|404 | Aktion für nicht übereinstimmende Anfragen |
--no-ip-filter | IP-Allow/Deny-Blöcke weglassen |
--no-header-check | Header-Validierungsregeln weglassen |
--alias DOMAIN:ALIAS | Server-Namensalias hinzufügen (wiederholbar) |
--header NAME:VALUE | Benutzerdefinierten Antwort-Header hinzufügen (wiederholbar) |
| Endpunkt | Methode | Beschreibung |
|---|
/api/instances | GET | Alle Instanzen mit Health-Status auflisten |
/api/stats | GET | Zusammengeführte Statistiken aller Instanzen |
/api/requests | GET | Verschachteltes Anforderungslog aller Instanzen |
/api/intel/whitelist | POST | IP auf allen Instanzen whitelisten |
/api/intel/blocklist | POST | IP auf allen Instanzen blocken |
/api/intel/blocklist | DELETE | IP auf allen Instanzen entsperren |
/ws/events | WS | Multiplexed Live-Ereignisse aller Instanzen |
| Volume | Zweck |
|---|
./config | Konfigurationsdateien (schreibgeschützt eingebunden) |
./examples | C2-Profile (schreibgeschützt eingebunden) |
./rules | Importierte Blocklisten und Regelquellendateien (schreibgeschützt eingebunden) |
./data | SQLite-Datenbank (persistent) |
certs | TLS-Zertifikate (zwischen Proxy und Certbot geteilt) |
geoip | GeoLite2-Datenbanken (vom geoip-update-Dienst befüllt) |
pwndrop-data | Von PwnDrop hochgeladene Dateien und Datenbank |
| Funktion | RedWarden | InfraGuard |
|---|
| Architektur | Einzelne ~99KB-Datei | Modulares Paket |
| Profilparsing | Regex-Zustandsmaschine | Strukturierter Parser mit vollständiger Block-/Transformationsunterstützung |
| C2-Unterstützung | Nur Cobalt Strike | Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk, PoshC2 |
| Protokolle | Nur HTTP | HTTP, DNS, MQTT, WebSocket |
| Filtermodell | Binär (Bestanden/Nicht bestanden) | Bewertungsbasiert (0,0-1,0 Schwellenwert), 10-Filter-Kette |
| TLS-Fingerprinting | Keine | JA3-Blockierung (Masscan, ZGrab2, Shodan, curl, Python Requests, Nmap) |
| Sandbox-Erkennung | Keine | Headless-Browser-/Safe-Links-/Sandbox-UA- und Header-Bewertung |
| Enumerationserkennung | Keine | Pfadenumeration + DNS-NXDOMAIN-Tracking mit automatischer Sperrung |
| Erkennung der Kompromittierung | Keine | CT-Log-Überwachung, Domain-Reputation (URLhaus/OpenPhish/GSB), Cross-Domain-Analystenerkennung |
| Payload-Zustellung | Keine | PwnDrop, Mythic-Dateispeicher, Dateisystem, HTTP-Proxy mit bedingter Auslieferung |
| Payload-Schutz | Keine | Einmalige Token, Pro-Route-Rate-Limiting, Delivery Guards (Umgebungsschlüssel) |
| Phishing-Schutz | Keine | Kampagnen-Token-Validierung (statische Liste oder HMAC-signiert) |
| Operator-UI | Keine | Web-Dashboard + Terminal-UI + Multi-Instanz Command Post |
| Konfigurationsgenerierung | Keine | Nginx, Caddy, Apache mit vollständiger Anpassung |
| Regelimport | Keine | .htaccess + robots.txt-Parser |
| Threat-Intelligence-Feeds | Keine | Automatische Aktualisierung aus 5 öffentlichen Quellen |
| Plugin-System | Einfaches 4-Methoden-Interface | Ereignisgesteuert mit on_event-Hooks + Pro-Plugin-Konfiguration |
| SIEM-Integration | Keine | Elasticsearch, Wazuh, Syslog (CEF/JSON) |
| Webhook-Benachrichtigungen | Keine | Discord, Slack, generischer Webhook (Burn-Alarme werden durch dieselben Plugins geleitet) |
| Whitelist-Intelligenz | Keine | Auto-Anreicherung von CIDRs mit ASN/Org/Land beim Start |
| Anti-Replay | SQLite-Hash | Persistenter SQLite mit In-Memory-L1-Cache, übersteht Neustarts |
| Drop-Aktionen | redirect, reset, proxy | redirect, reset, proxy, tarpit |
| TLS-Management | Nur manuell | Automatisch selbstsigniert + Let's Encrypt-Integration |
| Edge-Bereitstellung | Keine | Cloudflare Worker + AWS Lambda Edge-Proxys mit Domain-Fronting |
| Bereitstellung | Manuell | Docker Compose mit Healthchecks |
| Logging | Benutzerdefinierte farbige Ausgabe | Strukturiertes JSON (structlog) |
| Async | Tornado-Callbacks | Natives async/await (ASGI + uvicorn) |