अपडेट पर वापस जाएँ
New releaseAug 20, 2026

LeitWacht Agent v0.9.0

eBPF + nftables + DNS proxy egress enforcement GitLab Runner CI/CD job containers के लिए — community edition data plane https://leitwacht.eu/

साझा करें

leitwacht-agent

https://leitwacht.eu — सत्य का स्रोत: https://gitlab.com/leitwacht/leitwacht-agent. Issues, MRs और चर्चाएँ GitLab पर रहती हैं।

Pre-1.0. 0.x श्रृंखला पूर्व-स्थिर है; छोटे रिलीज़ में 1.0 आने तक APIs, env-var नामों, helm values.yaml कुंजियों और rule-file स्कीमा में ब्रेकिंग बदलाव हो सकते हैं। प्रोडक्शन में इमेज डाइजेस्ट (फ्लोटिंग टैग नहीं) पर पिन करें। अपग्रेड नोट्स के लिए CHANGELOG.md देखें।

leitwacht GitLab Runner egress-control सिस्टम का डेटा-प्लेन एजेंट। eBPF + nftables + एक in-netns DNS प्रॉक्सी हर CI रनर कंटेनर से जुड़ते हैं और egress नीति लागू करते हैं। CE (यह रेपो) अपने नियमों को एक स्थानीय YAML फ़ाइल से पढ़ता है और पूरी तरह से स्वतंत्र है — कोई बैकएंड नहीं, कोई फ़ोन-होम नहीं, कोई नामांकन नहीं।

एक अलग लाइसेंस वाला Enterprise Edition (gitlab.com/leitwacht/leitwacht) एक प्रबंधित नियंत्रण प्लेन (नियम-लेखन UI, मल्टी-टेनेंसी, ऑडिट, GitLab एकीकरण) जोड़ता है। EE एजेंट इस रेपो से agentcore/ आयात करता है और YAML लोडर को gRPC नियम स्ट्रीम से बदल देता है।

Layout

agentcore/                   data-plane primitives (MPL-2.0)
  enforcer/                  eBPF + nftables + DNS proxy + LSM cred/proc_mem
  watcher/                   container-lifecycle event source (containerd, docker)
  handler/                   lifecycle handler — edition-neutral
  policy/                    ResolvedPolicy + Source interface + loader
  advisory/                  plain-Go advisory type + Sink interface
  violation/                 plain-Go violation reporting Sink interface
  wildcard/                  domain-pattern matching helpers
  version/                   build-version stamp (set via -ldflags)
  cmd/
    leitwacht-initc/          pod init container that gates entrypoints on agent attach

ce/                          Community Edition daemon (MPL-2.0)
  cmd/agent-ce/              the binary
  config/                    env-driven daemon settings
  ruleyaml/                  YAML rule loader + fsnotify hot-reload
  sinks/                     stdout NDJSON / Prometheus / webhook
  helm/agent-ce/             Helm chart
  SCHEMA.md                  YAML rule schema (v1)

examples/
  rules.yaml                 starter rule set

docs/
  EVENT_FLOW.md              watcher → handler → enforcer flow + tunables (with mermaid)

कंटेनर दायरा

leitwacht-agent केवल उन कंटेनरों का निरीक्षण करता है जिनमें GitLab Runner प्रबंधित लेबल com.gitlab.gitlab-runner.managed=true होता है। इस लेबल के बिना कंटेनर — जो कुछ भी आप हाथ से चलाते हैं, साइडकार, एप्लिकेशन वर्कलोड — पूरी तरह से अनदेखा किए जाते हैं (कोई इवेंट नहीं, कोई प्रवर्तन नहीं, कोई उल्लंघन नहीं)। यह जानबूझकर किया गया है: leitwacht CI रनर egress के लिए डेटा प्लेन है, और गैर-रनर वर्कलोड को चुपचाप इंटरसेप्ट नहीं किया जाना चाहिए। गैर-रनर उपयोग के मामले v0.1.0 के दायरे से बाहर हैं।

ज्ञात सीमाएँ (v0.1.0)

  • केवल IPv4. eBPF प्रोग्राम और DNS प्रॉक्सी IPv4 ट्रैफ़िक पर प्रवर्तन करते हैं; नीति की परवाह किए बिना IPv6 egress को netns सीमा पर छोड़ दिया जाता है। जिन CI जॉब्स को IPv6 कनेक्टिविटी की आवश्यकता है, वे इस संबोधित होने तक leitwacht प्रवर्तन का उपयोग नहीं कर सकते।
  • केवल Linux x86_64. arm64 रनर अभी तक समर्थित नहीं हैं (CI amd64 इमेज भेजता है; arm64 उस आर्किटेक्चर के लिए eBPF आर्टिफैक्ट होने के बाद आएगा)।
  • केवल GitLab Runner वर्कलोड। ऊपर "कंटेनर दायरा" देखें।

त्वरित आरंभ

# Build (CGO_ENABLED=0 lets non-Linux hosts cross-compile cleanly).
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build ./...

# Container image
docker build -f Dockerfile.agent-ce -t leitwacht/agent-ce:dev .

# Helm install (Kubernetes). dnsUpstream is required — point it at your
# cluster DNS resolver, not a public one, so internal services keep
# resolving and queries don't leak.
KUBE_DNS_IP=$(kubectl -n kube-system get svc kube-dns -o jsonpath='{.spec.clusterIP}')
helm install leitwacht-ce ./ce/helm/agent-ce \
  -n leitwacht --create-namespace \
  --set-file rules=examples/rules.yaml \
  --set "dnsUpstream=${KUBE_DNS_IP}:53"

rules.yaml का पूर्ण स्कीमा संदर्भ ce/SCHEMA.md में है।

लाइसेंस

agentcore/ और ce/ को Mozilla Public License 2.0 के तहत वितरित किया गया है — LICENSE देखें। MPL-2.0 एक फ़ाइल-स्तरीय कॉपीलेफ्ट लाइसेंस है: आप अपने उत्पादों (वाणिज्यिक या अन्यथा) में इन फ़ाइलों का उपयोग, संशोधन और पुनर्वितरण कर सकते हैं, लेकिन MPL-2.0-लाइसेंस प्राप्त फ़ाइलों में आपके द्वारा किए गए किसी भी बदलाव को उसी लाइसेंस के तहत उपलब्ध कराया जाना चाहिए।

gitlab.com/leitwacht/leitwacht पर Enterprise Edition बैकएंड एक अलग लाइसेंस के तहत वितरित किया गया है। दोनों रेपो एक ही टीम द्वारा सह-विकसित हैं।

योगदान

प्रामाणिक GitLab रेपो (https://gitlab.com/leitwacht/leitwacht-agent) पर मुद्दे और मर्ज अनुरोध। सुरक्षा मुद्दों को SECURITY.md में प्रक्रिया का पालन करना चाहिए। कार्यप्रवाह और शैली नोट्स CONTRIBUTING.md में हैं।

निर्माण

केवल Linux (eBPF + nftables): GOOS=linux GOARCH=amd64 go build ./...

eBPF ऑब्जेक्ट्स (*_bpfel.o) प्रतिबद्ध हैं क्योंकि उन्हें पुनर्जीवित करने के लिए clang + कर्नेल हेडर की आवश्यकता होती है; CI बिल्ड प्रतिबद्ध आर्टिफैक्ट्स पर निर्भर करते हैं। Linux पर स्थानीय रूप से पुनर्जीवित करने के लिए:

go generate ./agentcore/enforcer/

श्रेणियाँ