
InfraGuard v0.4.3
InfraGuard é um Proxy de Redirecionamento e Gerenciador de Command & Control que protege sua Infraestrutura de Red Team contra atribuição de ameaças.
Rastreador de infraestrutura para equipe vermelha e redirecionador de C2 — uma alternativa moderna ao RedWarden.
O InfraGuard fica entre a internet e o seu teamserver de C2, validando cada requisição recebida contra o seu perfil maleável de C2 e bloqueando qualquer coisa que não esteja em conformidade. Scanners, bots e sondas de equipe azul são redirecionados para um site isca, enquanto o tráfego legítimo de beacon passa para o seu teamserver.

Arquitetura

Recursos
Proxy e Listeners
- Proxy multi-domínio — proxy para vários domínios simultaneamente, cada um com perfis de C2, upstreams e regras independentes
- Listeners multi-protocolo — listeners HTTP/HTTPS, DNS, MQTT e WebSocket executados simultaneamente com inteligência de IP compartilhada e rastreamento de eventos
- Circuit breaker — proteção contra falhas por upstream com estados fechado/aberto/meio-aberto; recai na ação de drop do domínio quando os backends estão inacessíveis
- Failover de protocolo — failover e failback automáticos entre protocolos de listener classificados por prioridade
Suporte a Perfis de C2
- Validação de perfil de C2 — analisa e aplica perfis do Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk e PoshC2 como regras do redirecionador
- Perfis hot-swappable — troque o perfil de C2 ativo de um domínio em tempo de execução pelo dashboard sem reiniciar o proxy
- Assistente de geração de perfis — gere novos perfis de C2 do zero para todos os 8 tipos suportados por meio de um formulário guiado, ou importe e envie perfis existentes com detecção e validação automáticas de tipo
- Geração de perfis assistida por IA — integração opcional com Ollama que fornece um painel de chat no dashboard para ajudar na criação de perfis e dar conselhos de OPSEC
Pipeline de Filtros
- Pipeline de filtros baseado em pontuação — 10 filtros, cada um contribui com uma pontuação de 0.0 a 1.0; um limite configurável determina bloqueio/permissão. Filtros: JA3, IP, bot, header, DNS, geo, perfil, replay, enumeração, sandbox.
- Filtragem por impressão digital TLS JA3 — bloqueie Masscan, ZGrab2, Shodan, curl, Python requests e Nmap na camada de handshake TLS antes que qualquer dado HTTP seja trocado; funciona via header de proxy reverso ou protocolo asyncio personalizado; modo de allowlist opcional impõe o JA3 do beacon
- Detecção de sandbox e navegador headless — acúmulo de pontuação em sinais HTTP: UA do HeadlessChrome, Accept-Language ausente, Chrome sem sec-ch-ua, UAs de scanner do Safe Links e msnbot, ordenação de Accept que não é de navegador
- Detecção de enumeração de caminhos — rastreamento de URIs únicos por IP em uma janela deslizante; bloqueia dirbuster/ffuf/gobuster antes que eles mapeiem o espaço de URIs
- Detecção de enumeração de subdomínios DNS — rastreia respostas NXDOMAIN por IP de cliente; bloqueia automaticamente IPs de origem ao exceder o limite
- Anti-bot / anti-crawling — mais de 40 padrões conhecidos de User-Agent de scanner/bot, detecção de anomalias em headers
- Proteção contra replay — rejeita requisições duplicadas por hash de conteúdo; hashes persistidos no SQLite para que a proteção sobreviva a reinicializações
- Ações de drop — redirecionamento, reset TCP, proxy para site isca ou tarpit (resposta de gotejamento lento para desperdiçar o tempo do scanner)
Inteligência
- Inteligência de IP — listas de bloqueio CIDR integradas para 19 faixas de fornecedores de segurança (Shodan, Censys, Rapid7, etc.), filtragem GeoIP, correspondência de palavras-chave em DNS reverso
- Feeds de threat intel — listas de bloqueio com atualização automática de fontes públicas (abuse.ch, Emerging Threats, Spamhaus DROP, Binary Defense) com intervalo de atualização configurável e cache em disco
- Bloqueio dinâmico de IP — bloqueia IPs fora das faixas na allowlist; adiciona IPs automaticamente à allowlist após N requisições válidas de C2
- Enriquecimento de allowlist — CIDRs na allowlist são automaticamente enriquecidos com ASN, organização, país e continente na inicialização por meio dos bancos de dados GeoIP
- Detecção de queima — monitoramento de logs de Transparência de Certificados via crt.sh, automonitoramento de reputação de domínio via URLhaus/OpenPhish/Google Safe Browsing e detecção cruzada de analistas quando um único IP acessa múltiplos domínios de operadores
- Pontuação de confiança de queima — pontuação contínua de 0 a 100 a partir de 6 sinais ponderados: diversidade de JA3, picos de volume, novos ASNs, exposição em CT logs, hits de reputação e tentativas de autenticação falhas. Inclui ações recomendadas: monitorar, rotacionar ou queima imediata.
- Injeção de token canário — pixels de rastreamento, links honeypot e formulários honeypot injetados automaticamente em páginas isca para detectar investigação da equipe azul
- Monitoramento de DNS passivo — consulta o CIRCL PDNS para resolução externa dos seus domínios; detecta novos registros, picos de NXDOMAIN e exposição de primeira visualização
Entrega de Payloads
- Rotas de entrega de conteúdo — sirva payloads, iscas e arquivos estáticos em caminhos específicos via PwnDrop, armazenamento de arquivos do Mythic, sistema de arquivos local ou backends de proxy HTTP; entrega condicional opcional para servir conteúdo real a alvos e iscas a scanners
- Staging de arquivos do Mythic — o backend
mythic_filefaz proxy do/direct/download/{uuid}do Mythic em URLs limpas; modo de UUID fixo ou de proxy; controle de acesso fornecido pela pilha de filtros do InfraGuard - Tokens de payload de uso único — tokens emitidos automaticamente quando um beacon é adicionado dinamicamente à allowlist; aplicação atômica de uso único via SQLite impede replay de URL por analistas ou sandboxes; TTL e contagem máxima de usos configuráveis
- Limitação de taxa por rota — limitador de download por IP em janela deslizante em rotas de conteúdo; exceder o limite serve a isca de scanner configurada ou HTTP 429
- Proteções de entrega — chaveamento por ambiente para rotas de conteúdo: exige IP de beacon, allowlist de UA, valores de header obrigatórios, headers proibidos; verificações com falha servem a ação de drop do domínio, não um 403 bruto
- Tokens de campanha de phishing — proteja páginas de phishing com tokens por campanha embutidos em links de e-mail; lista estática de tokens ou tokens autovalidáveis assinados com HMAC e TTL configurável
Resiliência
- Rotação de infraestrutura — rotação Terraform blue-green com um clique em 5 provedores de nuvem com verificações prévias, rollback e estado criptografado com age
- Agendamento de rotação — políticas de rotação automatizadas: intervalo fixo, acionada por queima, limite de contagem de requisições e rotação escalonada
- Domain fronting — roteamento de C2 baseado em CDN via divisão de SNI/header Host com remoção de headers do CDN e proteção contra SSRF
- Chave de homem morto — TTL de heartbeat do operador que interrompe automaticamente o encaminhamento de C2 se o operador não fizer check-in
- Proxies de borda — Cloudflare Worker e AWS Lambda para domain fronting por meio de infraestrutura de CDN, bloqueio de país na borda e reescrita de host
Dashboard e Ferramentas do Operador
- Dashboard web — SPA em tempo real com página de login, feed de requisições ao vivo, estatísticas de domínios, principais IPs bloqueados, streaming de eventos via WebSocket e ações inline de bloqueio/allowlist/desbloqueio
- Gerenciamento de páginas isca — liste, visualize e edite páginas HTML isca diretamente pelo dashboard
- Posto de Comando — dashboard de agregação multi-instância que mescla estatísticas, requisições e eventos ao vivo de vários nós InfraGuard em uma única visualização
- Interface de terminal — TUI baseada em Textual com tela de login, polling de API ao vivo e log de requisições com código de cores
- Relatórios de engajamento — relatórios HTML, JSON ou CSV autocontidos com detalhamento por domínio, eficácia dos filtros e trilha de auditoria do operador
- Métricas Prometheus — endpoint
/metricsexpondo contadores de requisições, histogramas de latência de upstream, estado do circuit breaker, frescor dos feeds e conexões ativas
Integrações e Plugins
- Integração com SIEM — plugins integrados para Elasticsearch, Wazuh e Syslog (CEF/JSON) com encaminhamento em lote
- Alertas via webhook — plugins integrados para Discord (embeds), Slack (Block Kit) e webhook genérico; alertas de detecção de queima passam pelo mesmo sistema de plugins
- Integração com Phishing.club — receptor de webhook assinado com HMAC que ingere eventos de phishing e adiciona automaticamente à allowlist os IPs dos alvos que clicaram
- Sistema de plugins — arquitetura orientada a eventos com hooks
on_event, configuração por plugin e filtragem de eventos
Configuração & Implantação
- Criptografia de configuração — criptografia age (arquivo inteiro) e SOPS (por valor) com suporte a arquivos
.env - Validação de configuração — ferramenta de diff via CLI e mais de 20 verificações de segurança, operacionais e de TLS
- Gerenciamento de chaves de API — crie, revogue e rotacione chaves de API com limites de taxa por chave, rastreamento de uso e cotas
- Geração de configuração de backend — gere configurações para Nginx, Caddy ou Apache com TLS, filtragem de IP, verificações de header, aliases e headers personalizados
- Ingestão de regras — importe listas de bloqueio de IP e padrões de User-Agent de arquivos
.htaccesserobots.txtexistentes - Implantação com Docker — Dockerfile + docker-compose com Let's Encrypt opcional, downloader de GeoIP, servidor de payloads PwnDrop e assistente de IA Ollama
- Suporte a GeoIP — todos os três bancos de dados GeoLite2 (City, ASN, Country) com download automático via Docker
- Fallback de TLS autoassinado — gera certificados automaticamente quando os caminhos configurados não existem
- Suporte a variáveis de ambiente — arquivo
.envcarregado automaticamente; a sintaxe${VAR}funciona em todos os valores e chaves de configuração - Endpoint de saúde configurável — altere o caminho da verificação de saúde para evitar fingerprinting
- Logs estruturados — logs estruturados em formato JSON via structlog
- Rastreamento e persistência — SQLite com modo WAL para logs de requisições, estatísticas, registro de nós, hashes de replay e tokens de payload
Guia de Instalação
Confira a Wiki para instalação
Referência da 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
### Opções do gerador
O comando `generate` aceita flags adicionais para personalização do operador:
| Flag | Descrição |
|---|---|
| `--listen-port PORT` | Substituir porta de escuta (padrão: da configuração) |
| `--ssl-cert PATH` | Substituir caminho do certificado SSL |
| `--ssl-key PATH` | Substituir caminho da chave SSL |
| `--redirect-url URL` | Substituir URL de redirecionamento para requisições bloqueadas |
| `--default-action redirect\|404` | Ação para requisições não correspondentes |
| `--no-ip-filter` | Omitir blocos de permissão/negação de IP |
| `--no-header-check` | Omitir regras de validação de cabeçalho |
| `--alias DOMAIN:ALIAS` | Adicionar alias de nome de servidor (repetível) |
| `--header NAME:VALUE` | Adicionar cabeçalho de resposta personalizado (repetível) |
## Command Post (Painel Multi-Instância)
Ao executar várias instâncias do InfraGuard em diferentes VPSes ou provedores de nuvem, o Command Post agrega estatísticas, requisições e eventos em tempo real de todos os nós em um único painel.```
┌─────────────────────────────┐
│ Command Post Dashboard │
│ http://localhost:9090 │
└──────────┬──────────────────┘
│ parallel fetch
┌─────┼──────┬──────────┐
▼ ▼ ▼ ▼
IG-1 IG-2 IG-3 ... IG-N

Início rápido```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
### Configuração
Crie `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}"
O que mostra
- Estatísticas agregadas -- total de solicitações, permitidas e bloqueadas somadas em todas as instâncias
- Barra de integridade da instância -- status verde/vermelho para cada nó conectado
- Log de solicitações intercalado -- solicitações de todas as instâncias ordenadas por timestamp, cada uma identificada com o nome da sua instância
- Principais IPs bloqueados agregados -- agregados de todas as instâncias
- Estatísticas por domínio -- domínios de todas as instâncias com taxas de bloqueio recalculadas
- Feed de eventos ao vivo -- eventos WebSocket multiplexados de todos os nós
- Ações de bloqueio/permissão -- propagadas para todas as instâncias ou para uma específica
Endpoints da API
| Endpoint | Method | Description |
|---|---|---|
/api/instances | GET | Lista todas as instâncias com status de integridade |
/api/stats | GET | Estatísticas agregadas de todas as instâncias |
/api/requests | GET | Log de solicitações intercalado de todas as instâncias |
/api/intel/whitelist | POST | Coloca um IP na 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 |
Implantação com Docker
Início rápido```bash
cp .env.example .env
Edit .env with your domain, teamserver, and token
docker compose up -d
Isso inicia dois serviços:
- **proxy** -- o redirecionador nas portas 443 e 80
- **dashboard** -- a interface web na porta 8080
### Com 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
Requisitos para Let's Encrypt:
- A porta 80 deve estar acessível a partir da internet
INFRAGUARD_DOMAINdeve resolver para o IP público deste hostINFRAGUARD_DOMAIN_EMAILdeve ser um endereço de email válido
Com bancos de dados 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
### Com PwnDrop (entrega de 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
Em seguida, configure as rotas de conteúdo na sua config para fazer proxy dos caminhos de payload para o PwnDrop:```yaml domains: cdn.example.com: content_routes: - path: "/downloads/*" backend: type: "pwndrop" target: "http://pwndrop:80" auth_token: "${PWNDROP_TOKEN}"
### Com Ollama (geração de perfil assistida por 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
A variável de ambiente do painel INFRAGUARD_OLLAMA_URL está pré-configurada no docker-compose.yml. Quando o Ollama está em execução, o interruptor do Assistente de IA aparece na página de iscas e perfis do painel.
Escalonamento```bash
Run multiple redirector nodes
docker compose up -d --scale proxy-node=3
Descomente o serviço `proxy-node` no `docker-compose.yml` para ativá-lo.
### Volumes
| Volume | Finalidade |
|---|---|
| `./config` | Arquivos de configuração (montados somente leitura) |
| `./examples` | Perfis de C2 (montados somente leitura) |
| `./rules` | Listas de bloqueio ingeridas e arquivos-fonte de regras (montados somente leitura) |
| `./data` | Banco de dados SQLite e perfis gerados (persistidos) |
| `certs` | Certificados TLS (compartilhados entre proxy e certbot) |
| `geoip` | Bancos de dados GeoLite2 (preenchidos pelo serviço `geoip-update`) |
| `pwndrop-data` | Arquivos enviados e banco de dados do PwnDrop |
| `ollama-data` | Pesos e configuração do modelo Ollama |
## Arquitetura```
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
Comparação com RedWarden
| Característica | 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 a C2 | Somente Cobalt Strike | Cobalt Strike, Mythic, Brute Ratel C4, Sliver, Havoc, Nighthawk, PoshC2 |
| Gerenciamento de perfil | Edição manual de arquivos | Assistente de dashboard com geração, importação, hot-swap e assistência de IA |
| Protocolos | Somente HTTP | HTTP, DNS, MQTT, WebSocket |
| Modelo de filtro | Aprovação/reprovação binária | Baseado em pontuação (limiar 0.0--1.0), cadeia de 10 filtros |
| Impressão digital TLS | Nenhum | Bloqueio JA3 (Masscan, ZGrab2, Shodan, curl, Python requests, Nmap) |
| Detecção de sandbox | Nenhum | Navegador headless / Safe Links / pontuação de UA e cabeçalho de sandbox |
| Detecção de enumeração | Nenhum | Enumeração de caminho + rastreamento de DNS NXDOMAIN com bloqueio automático |
| Detecção de exposição | Nenhum | Monitoramento de logs CT, reputação de domínio, detecção de analistas entre domínios, pontuação de confiança |
| Resiliência de infraestrutura | Nenhum | Disjuntor, failover de protocolo, chave de homem morto, rotação de infraestrutura |
| Entrega de payload | Nenhum | PwnDrop, armazenamento de arquivos do Mythic, sistema de arquivos, proxy HTTP com entrega condicional |
| Proteção de payload | Nenhum | Tokens de uso único, limite de taxa por rota, proteções de entrega |
| Proteção contra phishing | Nenhum | Validação de token de campanha (lista estática ou assinado com HMAC) |
| Interface do operador | Nenhum | Dashboard web + interface de terminal + Posto de Comando multi-instância |
| Observabilidade | Nenhum | Métricas do Prometheus, relatórios de engajamento, log estruturado |
| Geração de configuração | Nenhum | Nginx, Caddy, Apache com personalização completa |
| Ingestão de regras | Nenhum | Parser de .htaccess + robots.txt |
| Feeds de inteligência de ameaças | Nenhum | Atualização automática a partir de 5 fontes públicas |
| Sistema de plugins | Interface básica de 4 métodos | Orientado a eventos com hooks on_event + configuração por plugin |
| Integração com SIEM | Nenhum | Elasticsearch, Wazuh, Syslog (CEF/JSON) |
| Alertas por webhook | Nenhum | Discord, Slack, webhook genérico |
| Inteligência de whitelist | Nenhum | Enriquecimento automático 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 drop | redirect, reset, proxy | redirect, reset, proxy, tarpit |
| Gerenciamento de TLS | Somente manual | Auto-assinado automático + integração com Let's Encrypt |
| Implantação de borda | Nenhum | Proxies de borda Cloudflare Worker + AWS Lambda com domain fronting |
| Segurança de configuração | Nenhum | Criptografia age e SOPS, verificações de validação, gerenciamento de chaves de API |
| Implantação | Manual | Docker Compose com health checks |
| Assíncrono | Callbacks Tornado | async/await nativo (ASGI + uvicorn) |
Contribuições
- Mgeeky - Ideia original (RedWarden)
- curi0usJack - Regras .htaccess
- Perfis
- threatexpress - jquery-c2.3.14.profile
- InfinityCurve - Perfil Havoc
- Frameworks C2
- Cobalt Strike - Suporte a perfil Malleable C2
- Mythic - Suporte a perfil HTTPX + staging de arquivos
- Brute Ratel C4 - Suporte a perfil de configuração do servidor
- Sliver - Suporte a perfil C2 HTTP
- Havoc - Suporte a perfil TOML
- Nighthawk - Suporte a configuração de listener JSON
- PoshC2 - Suporte a configuração YAML
Se você quiser 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] Adicionado item qualquer.
Licença
Licença BSD 2-Clause. Consulte LICENSE para detalhes.
Copyright (c) 2026, Whispergate