我使用
成功加载了
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 程序附加到接口?
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 之类的东西来附加您的程序。