如何在流量过滤器 (tc-bpf) 中保护 eBPF 防火墙

How to protect an eBPF firewall in traffic filter (tc-bpf)

我打算在流量控制分类器(man 8 tc-bpf) 上实施防火墙。防火墙用于过滤传出流量。 但是,有一点使这项任务变得非常困难。我的用户空间代理必须知道,过滤器(分类器)是否加载并通过自身传递所有传出流量。 请告诉我:

  1. 如何保护已加载的过滤器不被卸载(tc filter [ replace | 删除]) 或其他可以使其远离所有流量的措施?
  2. 如何连接流量控制过滤器更改为让 用户空间代理采取适当的措施。
  3. 实现此类防火墙的其他方法。
  1. 需要权限才能设置(或删除)TC 分类器,因此没有权限的用户应该无法删除您的过滤器。我不记得所需的确切功能集,在最近的内核上,这可能是 CAP_BPFCAP_NET_ADMIN,较旧的内核可能需要 CAP_SYS_ADMIN(root)。

  2. 我认为当分类器改变时应该有一个 Netlink 通知,你可能会挂钩到那个。

  3. 问题很笼统。你问的是如何在 Linux 上设置防火墙?有几个可用的框架。如果你想用 eBPF 来做,XDP hook(在驱动层)是需要考虑的,它会比在 TC 上 hook 有更好的性能。