
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.


mythic_file faz 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/metrics expondo contadores de requisições, histogramas de latência de upstream, estado do circuit breaker, frescor dos feeds e conexões ativason_event, configuração por plugin e filtragem de eventos.env.htaccess e robots.txt existentes.env carregado automaticamente; a sintaxe ${VAR} funciona em todos os valores e chaves de configuraçãoConfira a Wiki para instalação
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
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

infraguard command-post -c config/command-post.yaml
infraguard command-post
--instance "prod:https://ig1.example.com:8080:TOKEN1"
--instance "staging:https://ig2.example.com:8080:TOKEN2"
--port 9090
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}"
cp .env.example .env
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:
INFRAGUARD_DOMAIN deve resolver para o IP público deste hostINFRAGUARD_DOMAIN_EMAIL deve ser um endereço de email válidodocker compose --profile geoip up geoip-update
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.
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
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 BSD 2-Clause. Consulte LICENSE para detalhes.
Copyright (c) 2026, Whispergate
| 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 |
| 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) |