zenith-runtime 0.1.0

Zenith 全链路数据面运行时:WorkerRuntime(eBPF + XSK + Worker 集成)、三级 Supervisor、ChangeSet 热切换、RuntimeGraph 拓扑规划
docs.rs failed to build zenith-runtime-0.1.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.

Zenith(齐天)

L2→L7 全栈网络安全数据面框架:AF_XDP + eBPF + TLS 1.3 + HTTP/1-2-3 + Web + Proxy + WAF + Cache + Fingerprint + Forward

从内核旁路到应用层的完整 Rust 网络框架,既能构建系统级网络防火墙,也能构建 CDN 边缘节点和 API 网关。

项目介绍 · 快速上手 · 安全报告 · 赞助公示 · 参与贡献 · 商业授权

Zenith 是一个面向极端性能场景的L2→L7 全栈网络安全数据面框架,采用 feature-gated facade 设计, 用户可按需启用所需能力,避免拖入不必要的重依赖(如 libbpf-rsrustlsring)。 在 Linux 上启用 AF_XDP/eBPF/io_uring 零拷贝数据面,在 Windows/其他平台自动降级到 std::net 仍全功能可用。

📚 文档导航

文档 说明
项目介绍 架构分层、Crate 一览、安全与性能特性总览
快速上手 安装、示例与快速启动指南
安全报告 漏洞报告流程、报告模板与支持范围
参与贡献 如何提交代码、报告问题与商业合作
赞助公示 赞助方式、分级与致谢名单
商业授权 多许可证选型、企业支持与 SLA

📜 许可证

Zenith 采用多许可证模型发布,您可以为自己的用例任选其一:

  • GPL-2.0 — 适用开源项目与社区贡献
  • MIT — 适用追求最大灵活性、易于集成的场景
  • Apache-2.0 — 适用需要明确专利授权与企业合规的场景

有关企业支持、闭源商用与许可证选型的详细信息,请参阅 COMMERCIAL.md

⚙️ 核心能力

层级 Crate 说明
L7 zenith-web 编译期 Trie 路由、类型化 Extractor、中间件 DAG、静态文件服务、ProtocolServer(H1/H2/H3)、SecurityPipeline 8 步安全管道、RuntimeConfig 无锁原子热更新(WAF/指纹/监听/缓存/HTTP 各协议参数全旋钮)
L7 zenith-waf WAF(SQLi/XSS/SSRF/命令注入/路径穿越/BotThreat 6 检测器,50ms 预算 fail-closed,解码后 NULL 字节压缩);规则集运行时增删改查/启停/自定义检测器
L3-L7 zenith-fingerprint 全链路指纹识别与阻断(34 采集器结构体、37 collect 入口、256B 特征向量、决策引擎、XDP/L4/L7 三级阻断)
L7 zenith-cache CDN 缓存(16 分片、条件请求 304/206/416、stale-while-revalidate、租户隔离);容量运行时热更新
L7 zenith-proxy 反向代理(6 种负载均衡 + 熔断器 + 连接池 + H3 真实 QUIC 客户端 + Auto 最优路径);ProxyConfig 20+ 旋钮运行时热更新
L7 zenith-http1/2/3 RFC 7230 / 7540 / 9114 全协议实现
L6 zenith-tls TLS 1.3 引擎(rustls+ring)、证书代际管理、SNI/ALPN 路由、JA3/JA4/JA4S/JA4O/JA4H 指纹
L4 zenith-forward L4 TCP/UDP 转发(TcpRelay 跨平台统一 API)、CIDR 白名单 SSRF 防护、协议转换、背压与带宽配额;ForwardConfig 容量/带宽运行时热更新
L4 zenith-net TCP 状态机 / UDP 会话表 / 端口过滤 / QUIC 传输(RFC 9000,真实 QuicServer);每包解析预算可配
L3 zenith-net SourceAdmissionEngine IP 黑名单/白名单、协议+端口三维过滤
L2 zenith-linux AF_XDP Socket + UMEM + 四环、io_uring 批量 IO、splice/sendfile 零拷贝、CPU 亲和;XskConfig 收发缓冲/预填分块可配
L2 zenith-ebpf eBPF 预编译字节码嵌入、libbpf 加载、双 Bank 热更新;config_map 键(MTU/协议白名单/fail-closed)热更新
API zenith-api 三协议收敛到 CanonicalRequest/Response,固定容量数组,零堆分配
Core zenith-core FramePool、资源账本、时间轮、恒定时间比较、Huffman、varint
Runtime zenith-runtime 全局 Tokio 运行时、三级 Supervisor、ChangeSet 八态热切换、AutoOptimizer
Capability zenith-capability 环境探测、PermissionSet 能力安全、Profile 三级自动降级
Observability zenith-observability Prometheus 指标、审计日志、故障快照、分布式追踪
Testkit zenith-testkit 测试工具、Demo、压力测试

🛡️ 系统级网络防火墙能力(L2→L4)

Zenith 区别于普通 Web 框架的核心——具备构建系统级网络防火墙的全部基础组件:

层级 组件 能力 等效系统工具
L2 AF_XDP + eBPF/XDP 网卡驱动层线速包过滤(XDP_DROP/XDP_PASS) xdp-bpf / tc-bpf
L3 SourceAdmissionEngine 源 IP 精确匹配黑名单/白名单 iptables -s / nft
L3 AddressWhitelist CIDR 子网级过滤(/8, /16, /24) iptables -s 10.0.0.0/8
L4 端口过滤 源端口/目标端口精确匹配 iptables -p tcp --dport
L4 协议过滤 TCP(6)/UDP(17)/ICMP(1,58)/Any iptables -p
L4 TcpRelay 端口转发/协议转换(TCP↔UDP) iptables DNAT / socat
L4 ForwardEngine L4 转发 + 双向白名单 SSRF 防护 haproxy mode tcp

🔐 安全能力

能力 说明
WAF SQLi/XSS/SSRF/命令注入/路径穿越/BotThreat 6 检测器,50ms 预算 fail-closed;解码后就地删除(压缩)NULL 字节防注入绕过(保留 NULL 后载荷,杜绝截断漏检)
TLS 指纹 JA3/JA4/JA4S/JA4O/JA4H/JA4L blocklist 前缀阻断 + 64 分片速率限制;TCP/TLS 与 HTTP/3(QUIC) 连接均采集(QUIC 裸 handshake ClientHello 经 from_quic_client_hello 解析,fingerprint_h3_block_test 实测黑名单 403)
全链路指纹 34 采集器结构体(L3×5 + L4 TCP×6 + L4 UDP×3 + L6 TLS×8 + L6 QUIC×1 + L7 HTTP×5 + L7 H2×2 + L7 H3×2 + Timing×2,共 37 collect 入口),256B 固定宽度特征向量(Copy、零堆分配),决策引擎(规则+加权评分+黑白名单+64 分片速率+LRU 信誉),XDP/L4/L7 三级阻断
身份一致性 SNI ↔ Host ↔ :authority 四元一致,不一致 → 421
请求走私防护 HTTP/1.1 CL.TE/TE.CL/TE.TE 检测
恒定时间比较 DCID/Token/密码/模式匹配防时序侧信道,ct_compare 使用 core::hint::black_box 增强
私钥零化 CertGeneration 使用 Zeroizing<PrivateKeyDer>,作用域结束自动擦除私钥材料
CORS 安全默认 allow_origin 默认为空——不发送任何 CORS 头,需显式 with_origin 配置
X-Forwarded-For 反向代理自动追加客户端 IP 到 XFF 头
H3 响应限制 drive_h3 强制 max_response_bytes,与 H1 路径对齐
QUIC 帧解析 STOP_SENDING(0x05)独立解析,CRYPTO 缓冲区限制 65536 字节,Initial 保留位 Fixed Bit(0x40) 校验
连接池安全 ForwardLease 实现 Drop + pool_idx 跟踪,panic 时防止连接池泄漏
TCP 连接表 ConnectionTable 使用 free_stack 实现 O(1) 槽位分配
BPF redirect 安全 bpf_redirect_map 使用 XDP_PASS flags,XSKMAP 竞态删除时回退到内核协议栈
审计日志默认脱敏 log() 默认执行 IP 脱敏与敏感字段脱敏,log_raw() 保留原始写入
PermissionSet u16 位掩码从 u8 扩展为 u16,编译期断言防止溢出
QoS 继承 新 Worker 扩容后强制重放当前 QoS 设置
TCP ACK 校验一致 SynReceived 状态 ACK 序列号校验客户端/服务端一致(RFC 9293 §3.10)
指纹向量槽位独立 每个采集器写入独立 FingerprintField 变体,消除数据覆盖丢失
/metrics 认证 未配置 metrics_auth_token 时端点返回 404,配置时校验 Authorization: Bearer 恒定时间比较
QPACK 总字节上限 decode_field_lines 内同步累加 name+value 总字节,超 MAX_TOTAL_HEADER_SIZE 拒绝(解压炸弹防护)
ForwardEngine 三态 None=允许透明转发,Some(empty)=fail-closed 拒绝全部,Some(non-empty)=按白名单过滤
UMEM incref 安全 compare_exchange 循环消除 load-then-fetch_add TOCTOU 窗口,ref_count=0 时 incref 失败

🔄 跨平台自动降级

高性能环境 (XDP Native + AF_XDP + 零拷贝 + BTF/CO-RE)
  → Performance (tier=3)  splice(2) + io_uring + AF_XDP + eBPF 全启用

中等环境 (XDP Generic + BPF,无 Native/零拷贝)
  → Balanced (tier=2)  XDP Generic + BPF,io_uring 可用

低能力环境 (无 XDP/AF_XDP/eBPF,如 Windows/最小容器)
  → Minimal (tier=1)  仅 std::net basic_socket,TcpRelay 回退 std::io::copy
  → WAF/代理/缓存/路由/转发 全功能可用

EnvironmentDetector 真实探测 → ProfileSelector 多目标评分自动选择 → degrade() 三级降级链。

🔄 运行时热更新(全链路 L2→L7)

作为依赖库,除固定协议规范标准外,所有运行参数均支持运行时热更新(无需重建服务器/引擎),实现最高自由度:

  • L7 webserver.update_runtime(|r| ...) 无锁原子热更新:WAF 开关/按 host 黑白名单/规则集、指纹安全/限流/阻断、UDP/L4 转发会话、Supervisor 熔断、HTTP/1.1 请求上限/空闲超时、请求体上限、读/写缓冲、HTTP/2 帧长/并发流、HTTP/3 字段段、/metrics 令牌、监听地址、缓存容量
  • L7 代理set_proxy_config/update_proxy_configProxyConfig 20+ 旋钮;转发超时对既有路由立即生效,池/健康阈值对新路由生效
  • L4 转发set_forward_configForwardConfig(并发会话上限/单会话带宽)即时生效
  • L2/L3 — eBPF config_map(MTU/协议白名单/fail-closed/期望策略)、XskConfig 收发缓冲/预填分块、每包解析预算 parse_packet_with_budget

性能:热路径标量一律 AtomicU64/AtomicBool 单指令原子加载(零锁零竞争);host 名单仅启用时才触碰 RwLock;写(热更新)低于微秒级,不触碰读热路径,更新对所有 clone 副本立即生效。 固定内容:协议规范常量(头长、帧长、MTU 标准值、QUIC 版本等)与 Worker MAX_BATCH_SIZE(固定栈数组零堆分配优化)不可改。

📦 按需导入

Zenith 默认仅启用最小核心(api + core),其余能力按需开启。

最小依赖(仅类型定义)

[dependencies]
zenith = { path = "...", default-features = false, features = ["api"] }
use zenith::api::{CanonicalRequest, Method};

let mut req = CanonicalRequest::empty();
req.method = Method::Get;
req.set_path("/api/users");

仅 Web 框架(不拖入 AF_XDP / eBPF / 运行时数据面)

[dependencies]
zenith = { path = "...", default-features = false, features = ["web"] }
use zenith::web::{App, WebError};
use zenith::api::{CanonicalRequest, CanonicalResponse};

let mut app = App::new();
app.get("/health", |_req, _params| Ok(CanonicalResponse::new(204)));

仅 HTTP 协议解析(无 Linux 数据面)

[dependencies]
zenith = { path = "...", default-features = false, features = ["http"] }

完整生产协议栈

[dependencies]
zenith = { path = "...", features = ["full-stack"] }

全部能力(含测试工具)

[dependencies]
zenith = { path = "...", features = ["full"] }

🧩 Feature 矩阵

Feature 启用能力 重依赖
api 公共类型定义(CanonicalRequest/Response 等)
core 核心基础设施(FramePool/账本/ct_compare/时间轮) thiserror
net L2-L4 协议解析、TCP/UDP/QUIC 状态机、SourceAdmissionEngine、Worker corelinux 数据面由 linux feature 开启
linux AF_XDP Socket、UMEM、四环、io_uring、splice libcio_uring 可选)
ebpf eBPF 程序加载、双 Bank 热更新 libbpf-rslibc
tls TLS 1.3 引擎、证书代际、JA3/JA4/JA4S/JA4O/JA4H 指纹 rustlsring
http1/http2/http3 HTTP 协议解析器 依赖 net
web Web 框架(路由/中间件/静态文件/SecurityPipeline,默认 full) serdeserde_jsonrustc-hashring
proxy 反向代理、6 种负载均衡、熔断器、连接池 rustlsquinn-protobytessmallvec
cache HTTP 缓存层(16 分片、条件请求)
waf Web 应用防火墙(6 检测器、50ms 预算)
fingerprint 全链路指纹识别与阻断(L3-L7 采集 + 决策 + 阻断) 独立运行
forward L4 转发(TcpRelay、CIDR 白名单、协议转换) linux feature 启用 splice
runtime 全链路数据面运行时(Supervisor、ChangeSet、AutoOptimizer) 依赖 net + linux + ebpf,并升级 zenith-webfull
capability 环境探测、能力安全、Profile 三级自动降级
observability 指标、tracing、审计日志、故障快照
audit cargo-audit(netlink 链路) audit(仅 Linux)
testkit 测试工具、Demo、压力测试 依赖 full
http 组合:http1 + http2 + http3
full-stack 组合:完整生产协议栈
full 组合:全部能力

📥 直接引用子 crate

除使用 facade 外,也可直接引用单个子 crate(适合只需求某一独立能力的场景):

[dependencies]
zenith-web = { path = ".../zenith/crates/zenith-web" }

子 crate 的 default 特性均为空,仅包含必需依赖。

🎯 设计原则

  • Fail-Closed:探测/构建/解析失败取安全默认值,永不 panic
  • 热路径零堆分配:固定容量数组替代 String/Vec
  • 单线程本地存储:无锁访问、对象池复用
  • 编译期路由注册:运行期零开销分发
  • unsafe 隔离:所有 unsafe 封装在 zenith-linux/zenith-ebpf 内部,上层零 unsafe
  • Copy 语义:核心类型支持 Copy,避免 Clone 开销
  • 代际安全:证书/配置双 Bank 原子切换
  • 恒定时间比较:DCID/Token/密码/模式匹配防时序侧信道,core::hint::black_box 增强
  • L2→L7 全栈:从网卡驱动层包过滤到应用层 WAF,单一代码库覆盖完整网络安全数据面
  • 跨平台兼容:Linux 极致性能,Windows/其他平台自动降级仍全功能可用

✅ 协议合规验证(真实进程级)

协议 工具 结果
HTTP/1.1 Plain wrk -t4 -c200 -d8s 60,359 req/s,p50 5.14ms(483k 请求),0 socket errors(WSL Ubuntu 26.04,0.0.0.0
HTTP/1.1 Plain 低并发 wrk -t2 -c20 -d5s 90,706 req/s,p50 249µs
HTTP/1.1 Plain POST wrk -t4 -c200 -d8s -s bench/post.lua 32,881 req/s(服务器按 405 正常处理)
HTTP/1.1 Plain 非保活 wrk -t4 -c200 -d8s -s bench/close.lua 26,327 req/s(每请求建连)
HTTP/1.1 TLS curl.exe -k(wrk 4.1.0 不支持 TLS) 200(TLS 1.3,ALPN h2/http1.1)
HTTP/2 h2spec 146/146 通过
HTTP/2 curl.exe --http2 200(TLS ALPN h2 协商成功)
HTTP/3 curl.exe --http3 200(QUIC + io_uring 批量收发)
HTTP/3 h3spec 49/49 通过(IPv4 + IPv6)
HTTP/3 互操作 curl --http3-only 外部 curl(nghttp3/ngtcp2)真实 QUIC 握手 + HTTP/3 200 + 连接复用
TLS 1.3 curl -vk TLS_AES_256_GCM_SHA384 / X25519 / ALPN h2
hping3 TCP hping3 -S SYN 全应答,服务存活(2000 包无丢包)
WAF curl 攻击 payload SQLi/XSS/SSRF/命令注入/路径穿越/NULL 字节注入 全拦截 403;BotThreat UA(sqlmap/nikto 等)403(Plain/TLS/H3 三模式)
IPv6 curl [::1] 200(Plain + TLS + H3 模式;WSL curl 与 Windows curl.exe 双端验证)
指纹阻断 curl.exe Ja3/Ja4 TCP/TLS 与 HTTP/3(QUIC) 黑名单 403 均真实生效
CVE cargo-audit 无风险
内存 进程级 RSS 观测 200 连接负载下稳定于 ~74MB 平台,无泄漏

🧪 测试

# 全量测试(含所有特性)
cargo test --workspace --all-features

# 仅默认特性
cargo test -p zenith

# 单 crate 测试
cargo test -p zenith-web

当前测试基线:3235 项通过 / 0 失败(53 套件,cargo test --workspace --all-features。安全审计修复后基线:aws-lc-rs 已从依赖树彻底移除(rustls + ring 为唯一密码学后端)。

安全审计修复项

v1 审计修复(9 项代码 + 4 项文档):

  • detection.rsVmLk 字段名修正(原 MaxLockedMemory 不存在于 /proc/self/status
  • runtime.rsstart() 控制线程失败时回滚状态到 Created
  • static.rsread_range 统一使用 open_nofollow(TOCTOU 符号链接窗口)
  • cert_manager.rs:代际 ID 溢出改用 saturating_add
  • quic.rscipher_suite()negotiated_cipher_suite() 读取实际协商结果
  • audit.rsclear() 增加置 None 清理残留字节
  • supervisor.rsDomainSupervisor::shutdown 清理 queues ChildSet
  • sni.rsSniproviderSniProvider;SNI 统一 to_ascii_lowercase()
  • graph.rsInsufficientResources 字段语义修正 + worker_id_counter 溢出保护

v2 综合审计(31 个任务,约 100 个子任务):2 CRITICAL + 4 HIGH + 9 P1 MEDIUM + 9 P2 + 8 LOW

  • AuthMiddleware 凭据校验(默认 require_non_empty,可选恒定时间比较)
  • QUIC 流表索引(H3 stream ID 取模 u64 空间)
  • H3 响应大小限制(drive_h3 强制 max_response_bytes
  • TCP 连接表 off-by-one(free_stack O(1) 槽位)
  • ForwardLease Drop(panic 时防连接池泄漏)
  • WAF NULL 字节过滤 + SQLi/XSS/路径穿越模式扩展
  • 私钥零化(Zeroizing<PrivateKeyDer>
  • CORS 安全默认(allow_origin 默认为空)
  • X-Forwarded-For、ct_compare black_box、QUIC STOP_SENDING 独立解析、CRYPTO 缓冲 65536、ChunkedDecoder trailer 8192、TimerWheel 钳位、连接池精确索引

v3 22 维度审计(4 High + 21 Medium + 18 Low):

  • BPF bpf_redirect_map flags 改为 XDP_PASS
  • detect_locked_memory_kbgetrlimit(RLIMIT_MEMLOCK) 读取上限
  • ct_compare 衍生函数添加 black_box
  • 指纹评分模型引入白名单/黑名单
  • 指纹向量槽位冲突修复(新增 TlsAlertSig/QuicExtOrder/TimingRttMs 独立变体)
  • DecisionAction→EnforcementAction 映射、ForwardEngine 无白名单 fail-closed
  • LRU/FIFO 用 BTreeMap O(log n)、Histogram Prometheus 格式、PermissionSet u16、QoS 继承、TCP ACK 校验、审计脱敏

v4 22 维度系统级再审计(6 P0 + 12 P1 + 20 P2):

  • ct_compare 全函数 black_box、ChunkedSig 槽位拆分、Blacklist FxHashSet O(1)
  • TCP SynReceived 簿记修正、ExpectationConfig 布局对齐、/metrics Bearer 认证
  • QPACK 总字节上限接线、ForwardEngine 三态、Histogram 双花括号、timer_wheel 死重移除、UMEM incref TOCTOU、smuggling 去重、escape_json 去重

v5-v7 深度再审计(多轮闭环):

  • QUIC 保留位 Fixed Bit(0x40) 校验(RFC 9000 §17.2)
  • BPF queue_map 跨 crate 缺失(Rust BpfMaps 移除残留字段)
  • BPF 分片策略首分片逃逸(frag_off & 0x3FFF,重编 .o)
  • WAF NULL 字节 SQLi fail-open 修复(就地压缩删除,保留 NULL 后载荷)
  • runtime assign_domain 防超卖 + extreme_planner 容错
  • 指纹评分 RTT 维度覆盖、XdpPolicyWriter 恒 Err 移除、死代码清理(workspace 0 警告)

v8 全链路修复与加固(zenith-fix-hardening,246 项审计发现中可落地项):

  • 恒定时间比较(CORE-001/002/026):ct_compare 5 函数移除提前返回,长度差经累加器聚合,消除令牌/签名时序侧信道
  • FramePool/Ledger 一致性(CORE-004/006/007/008/009/011/012/013/023/024/031):release 错误路径回滚、守恒等式异常路径不破坏、双重计数修正
  • L4 转发资源耗尽(APP-010/030):中继 SO_RCVTIMEO + splice 超时双向 shutdown 回收半开连接
  • HTTP/1-2-3 解析(HTTP-002/004/015/016/020/023/027/035):HPACK 动态表溢出、CONTINUATION 非法通过、QPACK Huffman 位复核(HTTP-025 为审计误报);额外修复 hpack decode_integer 绝对/相对步长 bug(http2 10 fail 清零)
  • 0-RTT 重放/降级(TLS-003/004/011):默认 max_early_data_size=0 + 60s 重放窗口 + TLS1.3 强制校验
  • eBPF/XDP 过滤链(NET-016/011/010/013/014):默认 Bank 走 xdp_main、IPv6 扩展头 PASS、分片策略 1 fail-closed、白名单单一权威来源(WSL2 无法真实挂载,静态修复 + make -C bpf clang 编译验证)
  • WAF 误报收敛(APP-014/015/017):裸单字符操作符/内网 IP 全段扫描收敛,威胁仍 403、良性 200
  • 系统/运行时/代理(SYS-005/006/008/011/014/016/021/024/026 + APP-023/026/028 + NET-018/019/028):背压账本、自动降级阈值、CPU 亲和映射、Cache-Control 严格合并、审计环形缓冲 fail-closed、Header 合并 DoS、H2 响应头上限、HalfOpen 限并发、带宽真实节流、CIDR 匹配、跨族通配、SYN-ACK ISN 校验
  • TCP 状态机加固(NET-020/021):handle_new_syn 非监听 fail-closed、off-path FIN/RST 接入 is_seq_in_rcv_window 窗口校验
  • 错误分层(ENG-006/007/012/013/015):ServerError::Http3 统一 H3 双路径、WebError 结构化、前缀整数/varint 收敛 core、方法单一解析器
  • H3 coalesced 1-RTT 竞态:quic_server 三处守卫(coalesced long/short + 独立 short 路径)握手未完成时推迟到 pending_1rtt,消除 DecryptError
  • 验证:h2spec 146/146、h3spec 49/49、四协议 curl.exe 全 200、IPv6 200、wrk 55,847/79,006 req/s(远超 25k 门槛)、hping3 SYN 514k/UDP 902k 洪水后存活、威胁 403/良性 200、JA3/JA4 阻断(含 H3 QUIC)、L2/L3/L4 23/23+10/10、热更新 18/18

🛠️ 构建要求

  • Rust 1.97.1+(Stable,禁止 Nightly/Beta),edition 2024
  • Linux 内核 5.4+(启用 linux / ebpf / runtime 特性时)
  • libbpf 1.0+(启用 linux / ebpf 特性时)
  • Windows/macOS:无需特殊依赖,自动降级到 std::net

📜 License

Zenith 采用多许可证模型发布,您可以为自己的用例任选其一:

完整的选型指南、企业支持与闭源商用方案请参阅 COMMERCIAL.md