We Put an L7 Firewall in the Kernel
2 days ago
- #eBPF
- #firewall
- #JavaScript
- 防火墙在内核中使用 eBPF 在纳秒级做出 HTTP/2 头部决策,从而避免用户空间代理延迟。
- 策略以 JavaScript 应用形式编写,允许通过 git push 进行更新,无需重建、重新部署或重启。
- 使用布尔逻辑规则匹配 HTTP/2 头部,如 :authority、User-Agent 和源地址。
- 利用 XDP hook 进行早期数据包过滤,在内核套接字分配前丢弃数据包,实现最低成本。
- 将被禁用的 User-Agent 子字符串编译成单个 Aho-Corasick 自动机,实现线性时间扫描,可扩展到数千种模式。
- 通过实时跟踪动态表来处理 HPACK 压缩,确保头部在请求间的可见性。
- 通过 Prometheus 和 Grafana 暴露实时指标,包括碎片化头部等规避尝试。
- 以 Docker 容器形式部署,目前已在生产环境的企业流量中通过测试。