SecurityPipeline 8 步管道
ProtocolServer 内置安全管道,依次执行以下检查,任一步失败即拒绝(fail-closed):
SecurityPipeline
1. 协议解析与校验(H1/H2/H3)
2. 请求走私 / 歧义检测(CL.TE / TE.CL / TE.TE)
3. 身份一致性(SNI ↔ Host ↔ :authority,不一致 → 421)
4. TLS/AQL 指纹采集(JA3/JA4 等)
5. 全链路指纹决策(黑白名单 / 评分)
6. WAF 检测(SQLi/XSS/SSRF/命令注入/路径穿越/BotThreat)
7. 准入 / 限流(SourceAdmissionEngine + 速率限制)
8. 路由与业务处理
WAF(zenith-waf)
6 个检测器,采用四阶段处理:解码 → 就地 NULL 压缩 → 检测 → 规则。
- SQLi / XSS / SSRF / 命令注入 / 路径穿越 / BotThreat 6 检测器。
- 50ms 预算 fail-closed,超时即拒绝。
- 解码后就地删除(压缩)NULL 字节,防注入绕过(保留 NULL 后载荷,杜绝截断漏检)。
- 规则 IR(CompiledRule / RuleEngine),规则集运行时增删改查 / 启停。
- 自定义 Box<dyn Detector> 扩展。
指纹识别(zenith-fingerprint)
全链路指纹识别与阻断,覆盖 L3-L7:
- 34 采集器结构体(37 collect 入口),覆盖 L3×5 + L4 TCP×6 + L4 UDP×3 + L6 TLS×8 + L6 QUIC×1 + L7 HTTP×5 + H2×2 + H3×2 + Timing×2。
- FingerprintVector 256B 固定宽度(Copy、零堆分配)。
- 决策引擎:规则 + 加权评分 + 黑白名单 + 64 分片速率 + LRU 信誉。
- XDP / L4 / L7 三级阻断。
TLS 指纹
JA3 / JA4 / JA4S / JA4O / JA4H / JA4L 指纹识别,blocklist 前缀阻断 + 64 分片速率限制(60s/100 次 → 429)。TCP/TLS 与 HTTP/3(QUIC) 连接均采集(QUIC 经 from_quic_client_hello 解析裸 handshake ClientHello)。
身份一致性
SNI ↔ Host ↔ :authority 四元必须一致,不一致 → 421 Misdirected Request。
请求走私防护
HTTP/1.1 的 CL.TE / TE.CL / TE.TE 检测,配合 CRLF 注入拒绝与响应拆分防护。
Fail-Closed 原则
Fail-Closed:任何探测 / 构建 / 解析 / 匹配失败均取安全默认值,永不 panic。安全相关默认值一律保守:无证书不回退明文、无白名单拒绝全部、预算超时拒绝请求。
- 恒定时间比较:DCID / Token / 密码 / 模式匹配统一用 ct_compare,#[inline(never)] + core::hint::black_box 防时序泄漏。
- 私钥零化:Zeroizing<PrivateKeyDer>,drop 时自动擦除。
- CORS 安全默认:allow_origin 默认为空,需显式 with_origin 配置。
- /metrics 认证:未配置 token 返回 404,配置时校验 Bearer 恒定时间比较。
- 审计日志默认脱敏:log() 默认 IP 与敏感字段脱敏。
安全能力已通过真实攻击载荷验证(见
基准)。完整修复历史见
安全审计 页面。