
eBPF + nftables + DNS proxy egress enforcement GitLab Runner CI/CD job containers के लिए — community edition data plane https://leitwacht.eu/
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 नियम स्ट्रीम से बदल देता है।
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 के दायरे से बाहर हैं।
# 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/