
無料のウェブを守るために構築された、セキュリティ優先のリバースプロキシ。
自由なウェブを守るために作られた、セキュリティ第一のリバースプロキシ。
エッジで安心して眠れる運用を。
ドキュメント • プレイグラウンド • ベンチマーク • ディスカッション • コントリビューション
Zentinel は Cloudflare Pingora 上に構築された高性能リバースプロキシです。明示的な制限、予測可能な挙動、そして運用者が安心して眠れる環境のための本番グレードのデフォルト設定を提供します。
パフォーマンス: Envoy、HAProxy、Nginx、Caddy に対するベンチマークで最低の p99 レイテンシを記録。100万リクエストのソークテストで成功率 99.95%、メモリリークはゼロ。Pure 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 ║
╚════════════════════════════════════════════════════╝
レスポンスはフィルタチェーンを逆にたどって Client に戻ります。アクセスログとメトリクスは完了時に出力されます。
データプレーンは単一バイナリとして動作します。パース負荷が高く、あるいは運用上のリスクがあるセキュリティおよびポリシーロジックは、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 のアルゴリズム: ラウンドロビン、重み付き、最小接続数、Maglev、Peak EWMA など |
| セキュリティ | TLS/mTLS、レート制限、GeoIP フィルタリング、WAF、zip 爆弾対策 |
| エージェントプロトコル | ネイティブな 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"