Hasty Briefsbeta

双语

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 容器形式部署,目前已在生产环境的企业流量中通过测试。