msaadshabir/ZTAP

GitHub: msaadshabir/ZTAP

跨平台零信任微隔离引擎,在内核层(eBPF/WFP/pf)执行网络策略,支持 etcd 分布式同步与多云安全编排。

Stars: 3 | Forks: 1

# ZTAP:零信任访问平台 [![Go Version](https://img.shields.io/badge/Go-1.25+-00ADD8?logo=go&logoColor=white)](https://go.dev/) [![eBPF](https://img.shields.io/badge/eBPF-Enabled-orange?logo=linux&logoColor=white)](docs/concepts/ebpf.md) [![Kubernetes](https://img.shields.io/badge/Kubernetes-Compatible-326CE5?logo=kubernetes&logoColor=white)](https://kubernetes.io/) [![AWS](https://img.shields.io/badge/AWS-Integration-FF9900?logo=amazon-aws&logoColor=white)](docs/guides/setup.md) [![Test Coverage](https://img.shields.io/badge/coverage-check%20locally-orange.svg)](docs/guides/testing.md) [![NIST SP 800-207](https://img.shields.io/badge/NIST-SP%20800--207-blue.svg)](https://csrc.nist.gov/publications/detail/sp/800-207/final) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) ## 快速开始 ### 安装 ``` # 构建和安装 go build -o ztap sudo mv ztap /usr/local/bin/ # 关于 Linux 的说明:二进制文件包含预编译的 eBPF 字节码。 # 运行时不需要 clang/llvm 依赖。 ``` ### 首要步骤 ``` # 1. 认证 # 首次运行时 ZTAP 会创建一个管理员账户。 # 初始密码来自 ZTAP_BOOTSTRAP_ADMIN_PASSWORD, # 或者是生成并写入到 ~/.ztap/bootstrap_admin_password.txt。 ztap user login admin ztap user change-password admin # 2. 注册服务 ztap discovery register web-1 10.0.1.1 --labels app=web,tier=frontend ztap discovery register db-1 10.0.2.1 --labels app=database,tier=backend # 3. 执行策略 # 首先验证策略 (CI/CD 友好) ztap policy validate -f examples/web-to-db.yaml # macOS (pf) ztap enforce -f examples/web-to-db.yaml # Windows (WFP) # 注意:在提升权限的终端 (管理员) 中运行。 # 支持 IPv4/IPv6 `ipBlock.cidr` (任意 CIDR) 和 TCP/UDP/ICMP。 # 对于 `protocol: ICMP`,策略 `port` 可通过验证但在执行时会被忽略。 # 可选的严格默认拒绝 可通过以下方式启用:ZTAP_WFP_STRICT=1 ztap enforce -f policy.yaml # Linux (eBPF) # 注意:当执行处于活动状态时,`ztap enforce` 会持续运行。 # 支持 IPv4/IPv6 `ipBlock.cidr` (任意 CIDR) 和 TCP/UDP/ICMP (ICMP 忽略 `port`)。 # 使用选择器目标 (`podSelector` 配合可选的 `namespaceSelector`) 的策略通过发现机制将选择器解析为具体的 `ipBlock` 规则来执行: # - 集群内:运行 `ztap agent` # - 本地/CLI:配置 `discovery.backend: k8s` 运行 `ztap enforce` (运行时自动解析并刷新) # - 使用 `--resolve-labels-interval` 控制刷新 (默认:`5s`;设置为 `0` 则仅解析一次) # - 如果选择器当前解析为零个目标,执行仍会开始;当目标出现并刷新解析时,规则变为活动状态 # 在多命名空间 Kubernetes 部署中: # - `ztap agent --namespaces ns-a,ns-b` 或 `ztap agent --all-namespaces` # - 租户隔离需要 Linux eBPF (iptables 回退无法保证隔离) sudo ztap enforce -f policy.yaml # Dry-run 模式 (所有平台) # 模拟执行而不进行系统更改 ztap enforce -f policy.yaml --dry-run ztap agent --dry-run # 4. 检查状态 ztap status ``` 集群后端: - 默认:内存(单进程) - 生产环境:通过 `config.yaml` 中的 `cluster.*` 配置 etcd(参见 `config.yaml.example`)或使用环境变量如 `ZTAP_ETCD_ENDPOINTS` **[完整安装指南](docs/guides/setup.md)** | **[架构](docs/concepts/architecture.md)** | **[eBPF 设置](docs/concepts/ebpf.md)** ## 功能特性
### 安全与执行 - **内核级过滤** – Linux 上真正的 eBPF - **零停机更新** – 使用 eBPF `bpf_link` 实现平滑、原子性的策略重载 - **旧内核支持** – 针对 5.7 之前内核或非 BPF 环境的 iptables 回退方案 - **双向执行** – Ingress 和 Egress 策略 - **安全通信** – API 和 gRPC 端点支持 HTTPS/TLS - **RBAC** – Admin、Operator、Viewer 角色 - **会话管理** – 可配置 TTL 及持久会话(默认 SQLite) - **防篡改审计日志** – 加密哈希链(可选签名 + 检查点) - **符合 NIST SP 800-207 标准** ### 分布式架构 - **领导者选举** – 自动集群协调 - **策略同步** – 实时策略分发与自动执行 - **多节点支持** – 高可用部署 - **版本跟踪与回滚** – 修订历史记录,支持回滚至先前版本 - **Prometheus 指标** – 7 项用于同步和执行监控的指标 ### 云集成 - **AWS Security Groups** – 自动同步策略(支持清单导出 + 离线选择器/IP 解析) - **Azure NSGs** – 将策略协调为 NSG 安全规则 - **GCP Firewall Rules** – 将策略协调为 VPC 防火墙规则 - **EC2 自动发现** – 基于标签的标记 - **混合视图** – 统一的本地 + 云状态 ### 可观测性 - **流量监控** – Linux 上启用 eBPF 执行时实时监控;Windows 通过 WFP NetEvents(需管理员权限;仅限 ztap);macOS 上为模拟 - **告警** – Slack 和 PagerDuty 通知 - **Prometheus 指标** – 预构建的导出器 - **Grafana 仪表盘** – 自动配置 - **ML 异常检测** – Isolation Forest - **结构化日志** – 过滤与跟踪 ### 开发者体验 - **Kubernetes 风格 YAML** – 熟悉的语法 - **基于标签的发现** – Kubernetes API、DNS 和缓存 - **合规报告** – PCI-DSS、SOC2、HIPAA 策略映射导出和报告 - **REST API 服务器** – 通过 `ztap api serve` 提供最小化 v1 端点 - **gRPC API 服务器** – 通过 `ztap grpc serve` 提供最小化 v1 RPC - **经过测试** – 运行 `go test ./... -cover` 查看当前覆盖率 - **多平台** – Linux (eBPF) + macOS (pf) + Windows (WFP)
## 文档 完整文档位于 [`docs/`](docs/index.md)。 | Section | Key Pages | | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **指南** | [安装设置](docs/guides/setup.md), [部署](docs/guides/deployment.md), [测试](docs/guides/testing.md), [etcd](docs/guides/etcd.md) | | **概念** | [架构](docs/concepts/architecture.md), [eBPF](docs/concepts/ebpf.md), [集群](docs/concepts/cluster.md), [审计](docs/concepts/audit.md), [合规](docs/concepts/compliance.md) | | **参考** | [CLI](docs/reference/cli.md), [配置](docs/reference/config.md), [API](docs/reference/api.md) | | **运维手册** | [Windows 流量监控](docs/runbooks/windows-flow-monitoring.md) | | **项目** | [项目状态](docs/project-status.md), [异常检测](pkg/anomaly/README.md) | ## 示例策略
Web 到数据库(基于标签) ``` apiVersion: ztap/v1 kind: NetworkPolicy metadata: name: web-to-db spec: podSelector: matchLabels: app: web egress: - to: podSelector: matchLabels: app: db ports: - protocol: TCP port: 5432 ```
PCI 合规(基于 IP) ``` apiVersion: ztap/v1 kind: NetworkPolicy metadata: name: pci-compliant annotations: ztap.io/compliance.pci-dss: "10.2.1" spec: podSelector: matchLabels: app: payment-processor egress: - to: ipBlock: cidr: 10.0.0.0/8 ports: - protocol: TCP port: 443 ```
双向(Ingress + Egress) ``` apiVersion: ztap/v1 kind: NetworkPolicy metadata: name: web-tier spec: podSelector: matchLabels: tier: web egress: - to: podSelector: matchLabels: tier: database ports: - protocol: TCP port: 5432 ingress: - from: ipBlock: cidr: 10.0.0.0/24 ports: - protocol: TCP port: 443 ```
合规导出 ``` # JSON 导出 (规范) ztap compliance export -f examples/pci-compliant.yaml --format json # CSV 导出 (电子表格) ztap compliance export -f examples/pci-compliant.yaml --format csv --out compliance.csv # 人类可读报告 ztap compliance report -f examples/pci-compliant.yaml --format md ``` 参见 [合规报告](docs/concepts/compliance.md) 了解策略注解和映射文件。
**更多示例请见 [examples/](examples/)** ## CLI 命令 ``` ztap [command] Commands: api Run REST API server (serve) grpc Run gRPC API server (serve) aws AWS Security Group synchronization (sg-sync, inventory) azure Azure NSG synchronization (nsg-sync) gcp GCP firewall rule synchronization (firewall-sync) agent Run node agent (Kubernetes / in-cluster) compliance Compliance mapping exports and reports enforce Enforce zero-trust network policies version Print ZTAP version status Show on-premises and cloud resource status cluster Manage cluster coordination (status, join, leave, list) policy Distributed policy management (sync, list, watch, show, history, rollback) flows Real-time flow event monitoring (--follow, --action, --protocol) logs View ZTAP logs (with --follow, --level, --policy filters) metrics Start Prometheus metrics server user Manage users (create, login, list, change-password) discovery Service discovery (register, resolve, list) audit Audit log management (view, verify, stats, keygen) ```
API 服务器 ``` # 启动 REST API server (读取 config.yaml 或通过 ZTAP_CONFIG 设置的文件) ztap api serve # 启动 gRPC API server (默认 127.0.0.1:9092) ztap grpc serve # Liveness / Readiness curl -s http://127.0.0.1:8080/healthz curl -s http://127.0.0.1:8080/readyz ``` 参见 [API 参考](docs/reference/api.md) 了解所有端点、gRPC 服务和速率限制详情。 参见 [配置参考](docs/reference/config.md) 了解 `api.*` 和 `grpc.*` 设置。
用户管理 ``` # 创建具有角色的用户 echo "password" | ztap user create alice --role operator ztap user list ztap user change-password alice ```
服务发现 ``` # 通过标签注册和解析服务 ztap discovery register web-1 10.0.1.1 --labels app=web,tier=frontend ztap discovery resolve --labels app=web ztap discovery list ``` 配置(可选): ``` # config.yaml (或通过 ZTAP_CONFIG 设置的文件) discovery: backend: dns # inmemory (default) or dns dns: domain: example.com cache: ttl: 30s # optional cache layer for the selected backend ```
集群与策略管理 ``` # 集群操作 ztap cluster status # View cluster state ztap cluster join node-2 192.168.1.2:9090 # Join a node ztap cluster list # List all nodes # 策略同步 (领导者发起) ztap policy sync examples/web-to-db.yaml # Sync policy to all nodes ztap policy list # List all policies ztap policy watch # Watch real-time updates ztap policy show web-to-db # Show policy details ztap policy history web-to-db # Show revision history ztap policy rollback web-to-db --to 3 # Roll back by creating a new latest version ```
流量监控 ``` # 查看最近的流事件 ztap flows # 实时流式传输流事件 ztap flows --follow # 按动作/协议/方向过滤 ztap flows --action blocked --protocol TCP ztap flows --direction egress --limit 100 # Output formats ztap flows --output table # Default ztap flows --output json ``` 在 Linux 上,如果 `ztap enforce` 处于活动状态,`ztap flows --follow` 会从固定的 eBPF 环形缓冲区映射(`/sys/fs/bpf/ztap/flow_events`)流式传输实时事件。 在 Windows 上,`ztap flows --follow` 流式传输 WFP NetEvents(需要提升的终端权限)。默认情况下,它仅发出 ZTAP 可归因的决策(`ztap-only`),因此请先运行 `ztap enforce`。 在 macOS 上,流量输出仍为模拟。
审计日志 ``` # 查看带有防篡改加密验证的审计日志 ztap audit view # View recent entries ztap audit view --actor admin # Filter by actor ztap audit view --type policy.created # Filter by event type ztap audit view --resource web-policy # Filter by resource ztap audit view --limit 100 # Limit results # 验证加密完整性 ztap audit verify # Detect tampering ztap audit keygen --output-dir ~/.ztap # Generate Ed25519 keypair # 显示统计信息 ztap audit stats # Show log stats ```
## 可观测性 ### Prometheus 指标 | Metric | Description | | ------------------------------------------ | ---------------------------------------- | | `ztap_policies_enforced_total` | 已执行的策略数量 | | `ztap_flows_allowed_total` | 允许的流量计数器 | | `ztap_flows_blocked_total` | 阻断的流量计数器 | | `ztap_anomaly_score` | 当前异常评分 (0-100) | | `ztap_policy_load_duration_seconds` | 策略加载时间直方图 | | `ztap_policies_synced_total` | 总策略同步操作数 | | `ztap_policy_sync_duration_seconds` | 策略同步持续时间直方图 | | `ztap_policy_version_current` | 每个策略的当前版本 | | `ztap_policy_enforcement_duration_seconds` | 策略执行持续时间直方图 | | `ztap_policy_subscribers_active` | 活跃策略订阅者计数 | | `ztap_flows_total` | 按动作/协议/方向统计的流量事件 | ### Grafana 仪表盘 ``` docker compose up -d # Access at http://localhost:3000 (admin/ztap) ``` 仪表盘从 `deployments/grafana/dashboards/ztap-dashboard.json` 自动配置 ## 系统要求 | Component | Requirement | Notes | | -------------- | -------------------------------- | ----------------------------------- | | **OS** | Linux (内核 ≥5.7) 或 macOS 12+ | Linux 用于生产环境,macOS 用于开发 | | **Go** | 1.25+ | 构建要求 | | **eBPF 工具** | clang, llvm, make, linux-headers | 仅在重新编译 eBPF 源码时需要 | | **权限** | Root 或 CAP_BPF + CAP_NET_ADMIN | Linux eBPF 执行 | | **AWS** | EC2/VPC 访问权限(可选) | 用于云集成 | | **Docker** | 最新版(可选) | 用于 Prometheus/Grafana 堆栈 | | **Python** | 3.11+(可选) | 用于异常检测服务 | **[完整 eBPF 设置指南](docs/concepts/ebpf.md)** ## 开发 ``` # 构建 go build # 运行测试 go test ./... # 全面安全审计 (tests + vet + govulncheck + gosec) bash scripts/security_check.sh # eBPF 集成测试 (Linux + root 权限 required) sudo go test -tags=integration ./pkg/enforcer -run TestEBPFIntegration -v # 覆盖率 go test ./... -cover # 竞争检测 go test ./... -race # Lint (CI 使用 golangci-lint,包含 gofmt + go vet) go fmt ./... # 可选:仓库机密扫描 gitleaks detect --source . --redact --no-banner ``` ### 演示 ``` ./demo.sh # Interactive demo with RBAC, service discovery, and policy enforcement ``` ## 许可证 MIT 许可证 - 详见 [LICENSE](LICENSE) ## 项目规范 - 安全策略:`SECURITY.md` - 贡献指南:`CONTRIBUTING.md` - 更新日志:`CHANGELOG.md` ## 致谢 - [NIST SP 800-207](https://csrc.nist.gov/publications/detail/sp/800-207/final) 零信任架构 - [Kubernetes NetworkPolicy](https://kubernetes.io/docs/concepts/services-networking/network-policies/) 规范 - [Cilium](https://cilium.io/) 和 [Tetragon](https://tetragon.io/) 提供的 eBPF 灵感 - [MITRE ATT&CK](https://attack.mitre.org/) 框架
**注意:** macOS 执行 仅用于开发。生产环境请使用 Linux + eBPF。 [eBPF 设置指南](docs/concepts/ebpf.md) | [开始使用](docs/guides/setup.md) | [提交 Issue](../../issues)
标签:AWS, Azure, DevSecOps, Docker镜像, DPI, etcd, EVTX分析, FTP漏洞扫描, GCP, Go, JSONLines, Lerna, NIST SP 800-207, PE 加载器, pf, Python工具, Ruby工具, Web截图, WFP, 上游代理, 内核级安全, 子域名突变, 安全编排, 容器安全, 微隔离, 日志审计, 服务发现, 混合云, 策略执行, 网络安全, 网络访问控制, 自定义请求头, 防火墙, 隐私保护, 零信任, 默认拒绝