
InfraGuard is a Command & Control Redirection Proxy and Manager which protects your Red Team Infrastructure against threat attribution
Rastreador de infraestrutura de equipe vermelha e redirecionador C2 — uma alternativa moderna ao RedWarden.
O InfraGuard fica entre a internet e seu servidor de equipe C2, validando cada requisição de entrada de acordo com seu perfil C2 mutável (malleable) e bloqueando qualquer coisa que não esteja em conformidade. Scanners, bots e sondas da equipe azul são redirecionados para um site falso, enquanto o tráfego legítimo de beacons passa para seu servidor de equipe.


ssl_fingerprint do nginx, JA3 nativo do HAProxy) ou protocolo asyncio personalizado; modo de lista de permissões opcional impõe o JA3 do beaconsec-ch-ua, UAs de scanner Safe Links / msnbot, ordenação de Accept não-navegador; bloqueia Microsoft Safe Links, Cuckoo, ANY.RUN e scanners de URL do VirusTotal.htaccess e robots.txt existentesmythic_file faz proxy de /direct/download/{uuid} do Mythic em URLs limpas; UUID fixo (alias de URL) ou modo proxy (UUID do caminho); controle de acesso fornecido inteiramente pela pilha de filtros do InfraGuardon_event, configuração por plugin, filtragem de eventos (only_blocked, min_score, incluir/excluir domínio).env carregado automaticamente; sintaxe ${VAR} funciona em todos os valores e chaves de configuraçãoConfira a Página Wiki para instalação
infraguard --version Mostra versão
infraguard --help Mostra ajuda
infraguard run -c config.yaml Inicia o proxy reverso
infraguard run -c config.yaml --port 8443 Sobrescreve porta de escuta
infraguard run -c config.yaml --host 0.0.0.0 Sobrescreve endereço de bind
infraguard dashboard -c config.yaml Inicia o painel web
infraguard dashboard -c config.yaml --port 9090 Sobrescreve porta do painel
infraguard tui Inicia TUI com tela de login
infraguard tui --url http://host:8080 --token TOK Conecta automaticamente ao painel
infraguard tui -c config.yaml Lê URL/token da configuração
infraguard command-post -c command-post.yaml Inicia painel multi-instância
infraguard command-post --instance name:url:token Adiciona instância via CLI (repetível)
infraguard profile parse <file> Analisa e exibe um perfil C2
infraguard profile parse <file> --format json Saída como JSON
infraguard profile parse <file> --type brute_ratel Força tipo de perfil
infraguard profile convert <file> -o out.json Converte perfil para JSON
# Valores suportados para --type: auto, cobalt_strike, mythic, brute_ratel, sliver, havoc, nighthawk, poshc2
# Auto-detecção: .profile = CS, .toml = Havoc, .yaml = PoshC2, .json = auto-detecta por chaves
infraguard ingest <files...> Ingere regras .htaccess/robots.txt
infraguard ingest <files...> --format blocklist Saída como lista de bloqueio de IP
infraguard ingest <files...> --format json Saída como JSON
infraguard ingest <files...> -o banned_ips.txt Escreve lista de bloqueio em arquivo
infraguard generate nginx -c config.yaml Gera configuração Nginx
infraguard generate caddy -c config.yaml Gera Caddyfile
infraguard generate apache -c config.yaml Gera VirtualHost Apache
infraguard init -o config.yaml Gera configuração inicial
infraguard validate -c config.yaml Valida arquivo de configuração
O comando generate aceita flags adicionais para personalização do operador:
Ao executar múltiplas instâncias do InfraGuard em diferentes VPSes ou provedores de nuvem, o Posto de Comando agrega estatísticas, requisições e eventos ao vivo de todos os nós em um único painel.
┌─────────────────────────────┐
│ Painel do Posto de Comando │
│ http://localhost:9090 │
└──────────┬──────────────────┘
│ fetch paralelo
┌─────┼──────┬──────────┐
▼ ▼ ▼ ▼
IG-1 IG-2 IG-3 ... IG-N

# Via arquivo de configuração
infraguard command-post -c config/command-post.yaml
# Via argumentos CLI
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
Crie 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
# Edite .env com seu domínio, teamserver e token
docker compose up -d
Isso inicia dois serviços:
# Defina em .env:
# INFRAGUARD_LETSENCRYPT=true
# INFRAGUARD_DOMAIN=cdn.example.com
# [email protected]
# Obtenha o certificado inicial
docker compose --profile letsencrypt up certbot
# Inicie o proxy (usará o certificado LE)
docker compose up -d proxy dashboard
# Inicie a renovação automática (verifica a cada 12 horas)
docker compose --profile letsencrypt up -d certbot-renew
Requisitos para Let's Encrypt:
INFRAGUARD_DOMAIN deve resolver para o IP público deste hostINFRAGUARD_DOMAIN_EMAIL deve ser um endereço de e-mail válido# Baixe todos os três bancos de dados GeoLite2 (City, ASN, Country)
docker compose --profile geoip up geoip-update
# Em seguida, inicie normalmente — os bancos são montados em /app/geoip/
docker compose up -d proxy dashboard
# Inicie o PwnDrop junto com o proxy
docker compose --profile pwndrop up -d pwndrop
# Acesse a UI de administração do PwnDrop em https://localhost:8443
# O InfraGuard o alcança internamente em http://pwndrop:80
Em seguida, configure rotas de conteúdo em seu arquivo de configuração para fazer proxy de caminhos de payload para o PwnDrop:
domains:
cdn.example.com:
content_routes:
- path: "/downloads/*"
backend:
type: "pwndrop"
target: "http://pwndrop:80"
auth_token: "${PWNDROP_TOKEN}"
# Execute múltiplos nós redirecionadores
docker compose up -d --scale proxy-node=3
Descomente o serviço proxy-node em docker-compose.yml para habilitar.
infraguard/
__init__.py Inicialização do pacote
__main__.py Entrada python -m infraguard
main.py CLI Click
config/ Carregamento de config YAML, suporte a .env, validação Pydantic
core/ Engine de proxy ASGI (app, proxy, router, TLS, ações de queda, entrega de conteúdo)
profiles/ Parsers de perfil C2 (Cobalt Strike, Mythic, Brute Ratel, Sliver, Havoc, Nighthawk, PoshC2)
pipeline/ Filtros de validação de requisição (JA3, IP, bot, cabeçalho, DNS, geo, perfil, replay, enumeração, sandbox)
intel/ Inteligência de IP (listas de bloqueio, GeoIP, rDNS, feeds, ingestão de regras)
tracking/ Persistência SQLite (registro de requisições, estatísticas, registro de nós)
plugins/ Sistema de plugins (protocolo, carregador, embutidos)
ui/
api/ API REST + WebSocket (Starlette)
web/ Painel SPA (HTML/JS/CSS)
tui/ Interface de terminal (Textual) com tela de login
command_post/ Painel de agregação multi-instância
listeners/ Listeners de protocolo (HTTP, DNS, MQTT, WebSocket)
backends/ Geradores de configuração (Nginx, Caddy, Apache)
models/ Tipos compartilhados e modelos de eventos
Se você deseja contribuir com o projeto, crie um novo branch com o nome da versão e especifique o mesmo nome da versão no pull request. Ex.: branch=v1.2.3 | [v1.2.3] Item adicionado.
Licença BSD 2-Cláusulas. Veja LICENSE para detalhes.
Copyright (c) 2026, Whispergate
| Flag | Descrição |
|---|
--listen-port PORT | Sobrescreve porta de escuta (padrão: da config) |
--ssl-cert PATH | Sobrescreve caminho do certificado SSL |
--ssl-key PATH | Sobrescreve caminho da chave SSL |
--redirect-url URL | Sobrescreve URL de redirecionamento para requisições bloqueadas |
--default-action redirect|404 | Ação para requisições não correspondentes |
--no-ip-filter | Omite blocos de permissão/negação de IP |
--no-header-check | Omite regras de validação de cabeçalho |
--alias DOMAIN:ALIAS | Adiciona alias de nome de servidor (repetível) |
--header NAME:VALUE | Adiciona cabeçalho de resposta personalizado (repetível) |
| Endpoint | Método | Descrição |
|---|
/api/instances | GET | Lista todas as instâncias com status de saúde |
/api/stats | GET | Estatísticas mescladas de todas as instâncias |
/api/requests | GET | Log de requisições intercalado de todas as instâncias |
/api/intel/whitelist | POST | Adiciona um IP à lista de permissões em todas as instâncias |
/api/intel/blocklist | POST | Bloqueia um IP em todas as instâncias |
/api/intel/blocklist | DELETE | Desbloqueia um IP em todas as instâncias |
/ws/events | WS | Eventos ao vivo multiplexados de todas as instâncias |
| Volume | Finalidade |
|---|
./config | Arquivos de configuração (montado somente leitura) |
./examples | Perfis C2 (montado somente leitura) |
./rules | Listas de bloqueio ingeridas e arquivos de regras fonte (montado somente leitura) |
./data | Banco de dados SQLite (persistido) |
certs | Certificados TLS (compartilhados entre proxy e certbot) |
geoip | Bancos de dados GeoLite2 (populado pelo serviço geoip-update) |
pwndrop-data | Arquivos enviados e banco de dados do PwnDrop |
| Recurso | RedWarden | InfraGuard |
|---|
| Arquitetura | Arquivo único de ~99KB | Pacote modular |
| Parsing de perfil | Máquina de estados regex | Parser estruturado com suporte completo a blocos/transformações |
| Suporte C2 | Apenas Cobalt Strike | Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk, PoshC2 |
| Protocolos | Apenas HTTP | HTTP, DNS, MQTT, WebSocket |
| Modelo de filtro | Passa/falha binário | Baseado em pontuação (limiar 0.0-1.0), cadeia de 10 filtros |
| Fingerprinting TLS | Nenhum | Bloqueio JA3 (Masscan, ZGrab2, Shodan, curl, Python requests, Nmap) |
| Detecção de sandbox | Nenhum | Pontuação de navegador headless / Safe Links / UA e cabeçalho de sandbox |
| Detecção de enumeração | Nenhum | Enumeração de caminhos + rastreamento de NXDOMAIN DNS com bloqueio automático |
| Detecção de queima | Nenhum | Monitoramento de log CT, reputação de domínio (URLhaus/OpenPhish/GSB), detecção de analista entre domínios |
| Entrega de payload | Nenhum | PwnDrop, armazenamento de arquivos Mythic, sistema de arquivos, proxy HTTP com entrega condicional |
| Proteção de payload | Nenhum | Tokens de uso único, limitação de taxa por rota, guardas de entrega (chaveamento de ambiente) |
| Proteção de phishing | Nenhum | Validação de token de campanha (lista estática ou HMAC) |
| Interface do operador | Nenhum | Painel web + interface de terminal + Posto de Comando multi-instância |
| Geração de configuração | Nenhum | Nginx, Caddy, Apache com personalização completa |
| Ingestão de regras | Nenhum | Parser .htaccess + robots.txt |
| Feeds de inteligência de ameaças | Nenhum | Atualização automática de 5 fontes públicas |
| Sistema de plugins | Interface básica de 4 métodos | Orientado a eventos com hooks on_event + config por plugin |
| Integração SIEM | Nenhum | Elasticsearch, Wazuh, Syslog (CEF/JSON) |
| Alertas de webhook | Nenhum | Discord, Slack, webhook genérico (alertas de queima passam pelos mesmos plugins) |
| Inteligência de lista de permissões | Nenhum | Auto-enriquecimento de CIDRs com ASN/org/país na inicialização |
| Anti-replay | Hash SQLite | SQLite persistente com cache L1 em memória, sobrevive a reinicializações |
| Ações de queda | redirect, reset, proxy | redirect, reset, proxy, tarpit |
| Gerenciamento TLS | Apenas manual | Autoassinado automático + integração Let's Encrypt |
| Implantação de borda | Nenhum | Workers Cloudflare + proxies de borda AWS Lambda com fronting de domínio |
| Implantação | Manual | Docker Compose com health checks |
| Logging | Saída colorida personalizada | JSON estruturado (structlog) |
| Async | Callbacks Tornado | Async/await nativo (ASGI + uvicorn) |