
Um proxy reverso com foco em segurança, criado para proteger a web livre.
Um proxy reverso com foco em segurança, criado para proteger a web livre.
Operações tranquilas na borda.
Documentação • Playground • Benchmarks • Discussões • Contribuição
Zentinel é um proxy reverso de alto desempenho construído sobre o Cloudflare Pingora. Ele oferece limites explícitos, comportamento previsível e padrões de nível de produção para ambientes onde os operadores precisam dormir tranquilos.
Desempenho: Menor latência p99 nos benchmarks em comparação com Envoy, HAProxy, Nginx e Caddy. Testes de resistência de 1M de requisições com 99,95% de taxa de sucesso e zero vazamentos de memória. O mecanismo WAF em Rust puro processa tráfego limpo a 912K req/s — 30x mais rápido que a referência C++ ModSecurity.
Núcleo pronto para produção (proxy, roteamento, TLS, cache, balanceamento de carga). Os agentes são versionados individualmente — WAF, Auth e AI Gateway são estáveis; os demais são beta ou alpha. Consulte zentinelproxy.io/agents para o status de cada agente.
┌────────┐ ┌──────────┐
│ Client │ │ Upstream │
└────┬───┘ └─────▲────┘
│ │
▼ │
╔═══════════ Zentinel (core, single binary) ══════════╤════╗
║ │ ║
║ Listener ─▶ Routing ─▶ Filter chain ─▶ Forward ────┘ ║
║ TLS, H2 priority rate-limit, LB, ║
║ + LRU cache, hooks retries ║
║ │ ║
╚══════════════════════════════╪═══════════════════════════╝
│ UDS / gRPC (v2 agent protocol)
▼
╔═══════ External agents (separate processes) ═══════╗
║ WAF · Auth · Rate-limit · … ║
║ crash-isolated, any language ║
╚════════════════════════════════════════════════════╝
A resposta percorre a cadeia de filtros de volta até o Cliente. Logs de acesso e métricas são emitidos na conclusão.
O dataplane é executado como um único binário. A lógica de segurança e políticas que é pesada em parsing ou arriscada operacionalmente fica em agentes externos atrás de UDS ou gRPC, de modo que um agente com bugs não pode derrubar o proxy junto. Consulte o Manifesto para entender o raciocínio, e crates/proxy/docs/architecture.md para os detalhes de cada fase.
# Install (binary only)
curl -fsSL https://get.zentinelproxy.io | sh
# Install and start as a systemd service (Linux, root or sudo)
curl -fsSL https://get.zentinelproxy.io | sh -s -- --enable-service
# Or via Cargo
cargo install zentinel-proxy
# Or via Docker
docker run -v $(pwd)/zentinel.kdl:/etc/zentinel/zentinel.kdl \
ghcr.io/zentinelproxy/zentinel --config /etc/zentinel/zentinel.kdl
Em hosts com systemd, o script de instalação também cria /etc/systemd/system/zentinel.service, um trecho de sysusers e uma configuração inicial em /etc/zentinel/zentinel.kdl. A habilitação e inicialização do serviço são opcionais via --enable-service. Consulte crates/proxy/docs/deployment.md.
Salve isto como zentinel.kdl — ele faz proxy de localhost:8080 para um backend na porta 8081:
system {
worker-threads 0 // auto-detect CPU cores
}
listeners {
listener "http" {
address "0.0.0.0:8080"
protocol "http"
}
}
routes {
route "default" {
matches {
path-prefix "/"
}
upstream "backend"
}
}
upstreams {
upstream "backend" {
target "127.0.0.1:8081"
}
}
# Run
zentinel --config zentinel.kdl
# Validate config without starting
zentinel test --config zentinel.kdl
Fazendo proxy para um backend HTTPS? Adicione um bloco tls ao upstream:
upstreams {
upstream "backend" {
target "api.example.com:443"
tls {
sni "api.example.com"
}
}
}
Sem o bloco tls, o Zentinel se conecta com HTTP em texto simples, independentemente da porta.
Mais exemplos: config/examples/ cobre gateways de API, balanceamento de carga, WebSocket, cache, roteamento de inferência e muito mais. Ou use o construtor de configuração para gerar uma configuração interativamente.
| Recurso | Descrição |
|---|---|
| Tipos de Serviço | Web, API, Static, Builtin e Inference (LLM/AI) |
| Balanceamento de Carga | 14 algoritmos: round-robin, weighted, least connections, Maglev, Peak EWMA e mais |
| Segurança | TLS/mTLS, limitação de taxa, filtragem GeoIP, WAF, proteção contra zip bomb |
| Protocolos Agênticos | Reconhecimento nativo de MCP e A2A — permissão/negação por método e por ferramenta, resolvida a partir do corpo JSON-RPC em vez de confiar em cabeçalhos espelhados |
| Protocolo de Agentes | Agentes externos para WAF, autenticação e lógica personalizada — isolados contra falhas, em qualquer linguagem |
| Cache HTTP | Cache de respostas baseado no Pingora com prevenção de stampede e evicção LRU (backends em memória, disco ou híbrido) |
| Proxy WebSocket | Compatível com RFC 6455 com inspeção de agente por frame e afinidade de sessão |
| Observabilidade | Métricas Prometheus, logging estruturado, tracing OpenTelemetry |
| Hot Reload | Atualizações de configuração sem downtime via SIGHUP com validação e troca atômica (rotas, upstreams, agentes; alterações em listeners exigem reinicialização) |
Veja a lista completa de recursos em zentinelproxy.io/features.