如何在流量过滤器 (tc-bpf) 中保护 eBPF 防火墙
How to protect an eBPF firewall in traffic filter (tc-bpf)
我打算在流量控制分类器(man 8 tc-bpf) 上实施防火墙。防火墙用于过滤传出流量。
但是,有一点使这项任务变得非常困难。我的用户空间代理必须知道,过滤器(分类器)是否加载并通过自身传递所有传出流量。
请告诉我:
- 如何保护已加载的过滤器不被卸载(tc filter [ replace |
删除]) 或其他可以使其远离所有流量的措施?
- 如何连接流量控制过滤器更改为让
用户空间代理采取适当的措施。
- 实现此类防火墙的其他方法。
需要权限才能设置(或删除)TC 分类器,因此没有权限的用户应该无法删除您的过滤器。我不记得所需的确切功能集,在最近的内核上,这可能是 CAP_BPF
和 CAP_NET_ADMIN
,较旧的内核可能需要 CAP_SYS_ADMIN
(root)。
我认为当分类器改变时应该有一个 Netlink 通知,你可能会挂钩到那个。
问题很笼统。你问的是如何在 Linux 上设置防火墙?有几个可用的框架。如果你想用 eBPF 来做,XDP hook(在驱动层)是需要考虑的,它会比在 TC 上 hook 有更好的性能。
我打算在流量控制分类器(man 8 tc-bpf) 上实施防火墙。防火墙用于过滤传出流量。 但是,有一点使这项任务变得非常困难。我的用户空间代理必须知道,过滤器(分类器)是否加载并通过自身传递所有传出流量。 请告诉我:
- 如何保护已加载的过滤器不被卸载(tc filter [ replace | 删除]) 或其他可以使其远离所有流量的措施?
- 如何连接流量控制过滤器更改为让 用户空间代理采取适当的措施。
- 实现此类防火墙的其他方法。
需要权限才能设置(或删除)TC 分类器,因此没有权限的用户应该无法删除您的过滤器。我不记得所需的确切功能集,在最近的内核上,这可能是
CAP_BPF
和CAP_NET_ADMIN
,较旧的内核可能需要CAP_SYS_ADMIN
(root)。我认为当分类器改变时应该有一个 Netlink 通知,你可能会挂钩到那个。
问题很笼统。你问的是如何在 Linux 上设置防火墙?有几个可用的框架。如果你想用 eBPF 来做,XDP hook(在驱动层)是需要考虑的,它会比在 TC 上 hook 有更好的性能。