msaadshabir/ZTAP
GitHub: msaadshabir/ZTAP
跨平台零信任微隔离引擎,在内核层(eBPF/WFP/pf)执行网络策略,支持 etcd 分布式同步与多云安全编排。
Stars: 3 | Forks: 1
# ZTAP:零信任访问平台
[](https://go.dev/)
[](docs/concepts/ebpf.md)
[](https://kubernetes.io/)
[](docs/guides/setup.md)
[](docs/guides/testing.md)
[](https://csrc.nist.gov/publications/detail/sp/800-207/final)
[](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)**
## 功能特性
## 文档
完整文档位于 [`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) |
## 示例策略
**更多示例请见 [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)
```
## 可观测性
### 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/) 框架
| ### 安全与执行 - **内核级过滤** – 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) |
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) 了解策略注解和映射文件。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 ```
**注意:** 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, 上游代理, 内核级安全, 子域名突变, 安全编排, 容器安全, 微隔离, 日志审计, 服务发现, 混合云, 策略执行, 网络安全, 网络访问控制, 自定义请求头, 防火墙, 隐私保护, 零信任, 默认拒绝