
무료 웹을 보호하기 위해 구축된 보안 우선 리버스 프록시.
Zentinel은 Cloudflare Pingora 기반으로 구축된 고성능 리버스 프록시입니다. 운영자가 편안하게 잠들 수 있어야 하는 환경을 위해 명시적인 제한, 예측 가능한 동작, 프로덕션급 기본값을 제공합니다.
성능: Envoy, HAProxy, Nginx, Caddy를 대상으로 한 벤치마크에서 가장 낮은 p99 지연 시간을 기록했습니다. 100만 건 요청 소크 테스트에서 99.95% 성공률과 메모리 누수 제로를 달성했습니다. 순수 Rust WAF 엔진은 정상 트래픽을 912K req/s로 처리합니다 — C++ ModSecurity 레퍼런스보다 30배 빠릅니다.
프로덕션 준비 완료된 코어(프록시, 라우팅, TLS, 캐싱, 로드 밸런싱). 에이전트는 개별적으로 버전 관리됩니다 — WAF, Auth, AI Gateway는 안정 버전이며, 나머지는 베타 또는 알파입니다. 에이전트별 상태는 zentinelproxy.io/agents를 참조하세요.
┌────────┐ ┌──────────┐
│ 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 ║
╚════════════════════════════════════════════════════╝
응답은 필터 체인을 역순으로 거쳐 클라이언트로 돌아갑니다. 액세스 로그와 메트릭은 완료 시점에 출력됩니다.
데이터플레인은 단일 바이너리로 실행됩니다. 파싱 부하가 크거나 운영상 위험한 보안 및 정책 로직은 UDS 또는 gRPC 뒤의 외부 에이전트에 위치하므로, 버그가 있는 에이전트가 프록시를 함께 다운시키지 못합니다. 그 근거는 Manifesto를, 단계별 세부 사항은 crates/proxy/docs/architecture.md를 참조하세요.
# 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
systemd 호스트에서는 설치 스크립트가 /etc/systemd/system/zentinel.service, sysusers 스니펫, 그리고 /etc/zentinel/zentinel.kdl에 시작용 설정 파일도 함께 배치합니다. 서비스 활성화와 시작은 --enable-service를 통한 옵트인 방식입니다. crates/proxy/docs/deployment.md를 참조하세요.
다음을 zentinel.kdl로 저장하세요 — localhost:8080을 포트 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
HTTPS 백엔드로 프록시하시나요? 업스트림에 tls 블록을 추가하세요:
upstreams {
upstream "backend" {
target "api.example.com:443"
tls {
sni "api.example.com"
}
}
}
tls 블록이 없으면 Zentinel은 포트와 무관하게 평문 HTTP로 연결합니다.
더 많은 예제: config/examples/는 API 게이트웨이, 로드 밸런싱, WebSocket, 캐싱, 추론 라우팅 등을 다룹니다. 또는 설정 빌더를 사용해 대화식으로 설정을 생성할 수 있습니다.
| 기능 | 설명 |
|---|---|
| 서비스 유형 | Web, API, Static, Builtin, Inference (LLM/AI) |
| 로드 밸런싱 | 14가지 알고리즘: round-robin, weighted, least connections, Maglev, Peak EWMA 등 |
| 보안 | TLS/mTLS, 속도 제한, GeoIP 필터링, WAF, zip bomb 보호 |
| 에이전트 프로토콜 | 네이티브 MCP 및 A2A 인식 — 미러링된 헤더를 신뢰하는 대신 JSON-RPC 본문에서 해석한 메서드별 및 도구별 허용/차단 |
| 에이전트 프로토콜 | WAF, 인증, 사용자 정의 로직을 위한 외부 에이전트 — 크래시 격리, 모든 언어 지원 |
| HTTP 캐싱 | 스탬피드 방지와 LRU 제거를 갖춘 Pingora 기반 응답 캐싱 (메모리, 디스크 또는 하이브리드 백엔드) |
| WebSocket 프록싱 | 프레임별 에이전트 검사와 세션 어피니티를 지원하는 RFC 6455 준수 |
| 관측성 | Prometheus 메트릭, 구조화된 로깅, OpenTelemetry 트레이싱 |
| 핫 리로드 | 검증과 원자적 교체를 통한 SIGHUP 기반 무중단 설정 업데이트 (라우트, 업스트림, 에이전트; 리스너 변경은 재시작 필요) |
전체 기능 목록은 zentinelproxy.io/features에서 확인하세요.
gpt-4*, claude-*)을 사용한 모델 라우팅, 프롬프트 인젝션 탐지, OpenAI, Anthropic 및 일반 LLM 제공자를 위한 PII 필터링Mcp-Name 헤더가 한 도구를 지칭하면서 본문이 다른 도구를 호출할 수 없습니다각 사용 사례의 예제 설정: config/examples/
현대의 프록시는 숨겨진 동작, 무한한 복잡성, 스트레스 상황에서 드러나는 운영 위험을 축적합니다. Zentinel은 다른 접근 방식을 취합니다:
목표는 올바르고, 차분하며, 신뢰할 수 있는 인프라입니다. 전체 철학은 MANIFESTO.md를 참조하세요.
Zentinel은 MCP(Model Context Protocol)와 A2A(Agent2Agent)를 네이티브로 이해합니다. 라우트가 허용되는 메서드와 도구를 선언하면, 프록시는 JSON-RPC 봉투를 읽어 이를 적용합니다:
route "mcp" {
matches { path-prefix "/mcp" }
upstream "mcp-server"
mcp {
tools {
allow "get_weather" "search_docs"
deny "execute_sql"
}
}
}