【问题标题】:How to protect an eBPF firewall in traffic filter (tc-bpf)如何在流量过滤器(tc-bpf)中保护 eBPF 防火墙
【发布时间】:2021-08-19 13:47:30
【问题描述】:

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

  1. 如何防止加载的过滤器卸载(tc 过滤器 [ 替换 | 删除])或其他可以使其远离所有流量的措施?
  2. 如何连接流量控制过滤器更改为让 用户空间代理采取适当的措施。
  3. 实现此类防火墙的其他方式。

【问题讨论】:

    标签: c linux firewall traffic bpf


    【解决方案1】:
    1. 需要设置(或删除)TC 分类器的权限,因此非特权用户应该无法删除您的过滤器。我不记得所需的确切功能集,在最近的内核上这可能是 CAP_BPFCAP_NET_ADMIN,较旧的内核可能需要 CAP_SYS_ADMIN (root)。

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

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

    【讨论】:

    • 感谢您的回答!在一般情况下,我也在尝试制作一个防火墙来保护恶意的 root 用户。 IE。如果 root 用户卸载或试图绕过我的网络过滤器,则必须通知用户代理应用程序放弃对代理服务的访问。在第三点,我询问了其他实现它的方法。即使那是非 BPF 方法。
    • Root 可以在机器上做他们想做的几乎所有事情,包括加载模块和改变内核本身的行为,所以我不确定你是否可以阻止他们做任何事情,最后那天。您最好的选择确实是在更改时触发警告(尽管如果他们知道,root 可能会禁用它)。 LInux 上的防火墙非常广泛,请参阅 iptables 或 nftables 示例。但据我所知,没有什么是 root 无法撤消的。您可以查看 SELinux 等访问控制模型来限制权限。
    • 我同意你的看法!根可以做任何事情。但无论如何,我想尽可能地保护它。我已经检查了 iptables。它不适合我的目的。在我的 NFQ 操作之前,根可以简单地避免我通过 -j ACCEPT 进行的检查。 SELinux 默认情况下不会出现在任何 linux 上,它使用 iptables 来过滤流量。感谢您的支持!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2021-09-12
    • 1970-01-01
    • 2019-10-07
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多