使用 bpftool 附加 netfilter 程序

问题描述 投票:0回答:1

我使用

成功加载了
netfilter

程序
sudo bpftool prog load filter.bpf.o /sys/fs/bpf/filter

现在我想将程序附加到内核。

$ bpftool net help
Usage: bpftool net { show | list } [dev <devname>]
       bpftool net attach ATTACH_TYPE PROG dev <devname> [ overwrite ]
       bpftool net detach ATTACH_TYPE dev <devname>
       bpftool net help

       PROG := { id PROG_ID | pinned FILE | tag PROG_TAG | name PROG_NAME }
       ATTACH_TYPE := { xdp | xdpgeneric | xdpdrv | xdpoffload | tcx_ingress
                        | tcx_egress }
       OPTIONS := { {-j|--json} [{-p|--pretty}] | {-d|--debug} }

Note: Only xdp, tcx, tc, netkit, flow_dissector and netfilter attachments
      are currently supported.
      For progs attached to cgroups, use "bpftool cgroup"
      to dump program attachments. For program types
      sk_{filter,skb,msg,reuseport} and lwt/seg6, please
      consult iproute2.

bpftool
声明
netfilter
支持附件,但它们未在
ATTACH_TYPE
选项中列出。

$ sudo bpftool net attach netfilter id 122 dev eth0
Error: invalid net attach/detach type: netfilter

如何使用

bpftool
将 netfilter 程序附加到接口?

linux ebpf bpf netfilter
1个回答
0
投票

bpftool 声称支持 netfilter 附件,但它们未在 ATTACH_TYPE 选项中列出。

我找不到那个。我能找到的唯一提及是

bpftool net { show | list } [ dev NAME ]
命令提到它可以显示它们。

列出内核网络子系统中的 bpf 程序附件。

目前,实现了设备驱动程序 xdp 附件、tcx、netkit 和旧式 tc 分类器/操作附件、flow_dissector 以及 netfilter 附件,即针对程序类型 BPF_PROG_TYPE_XDP、BPF_PROG_TYPE_SCHED_CLS、BPF_PROG_TYPE_SCHED_ACT、BPF_PROG_TYPE_FLOW_DISSECTOR、 BPF_PROG_TYPE_NETFILTER。

但没有关于附加的内容。

这可能是因为与大多数其他程序类型相比,netfilter 程序在附加时需要一些额外的信息。具体来说,在创建链接时您应该指定:

  • pf
    (协议系列
    NFPROTO_IPV4
    (2) 或
    NFPROTO_IPV6
    (10))
  • hooknumber
    (
    NF_INET_PRE_ROUTING
    (0),
    NF_INET_LOCAL_IN
    (1), 之一,
    NF_INET_FORWARD
    (2)、
    NF_INET_LOCAL_OUT
    (3) 或
    NF_INET_POST_ROUTING
    (4))
  • priority
    一个数字(介于 -2147483647 和 2147483646 之间)

bpftool 维护者似乎不想扩展 CLI 来支持所有这些,至少在撰写本文时不想。您必须使用 libbpf 之类的东西来附加您的程序。

© www.soinside.com 2019 - 2024. All rights reserved.