首页 > 解决方案 > 如何在流量过滤器(tc-bpf)中保护 eBPF 防火墙

问题描述

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

  1. 如何保护加载的过滤器不被卸载(tc filter [replace | delete])或其他可能使其远离所有流量的措施?
  2. 如何连接流量控制过滤器更改以让用户空间代理采取适当的措施。
  3. 实现此类防火墙的其他方法。

标签: clinuxfirewalltrafficbpf

解决方案


  1. 需要特权来设置(或删除)TC 分类器,因此非特权用户应该无法删除您的过滤器。我不记得所需的确切功能集,在最近的内核上这可能是CAP_BPF,并且CAP_NET_ADMIN较旧的内核可能需要CAP_SYS_ADMIN(root)。

  2. 我认为当分类器发生变化时应该有一个 Netlink 通知,你可能会陷入其中。

  3. 这个问题非常广泛。您是在问如何在 Linux 上设置防火墙吗?有几个可用的框架。如果你想用 eBPF 来做,XDP 钩子(在驱动程序级别)是值得考虑的,它比钩子在 TC 上具有更好的性能。


推荐阅读