NFTables 出口挂钩?

NFTables 出口挂钩?

我希望在出口上应用防火墙规则来控制 Docker 容器的 DHCP 输出。我不希望 DHCP 容器共享主机的网络堆栈,因为添加CAP_NET_ADMIN有效地赋予了容器对网络堆栈的控制权。

我注意到这里在内核 5.7 中的 netfilter 中添加了一个出口钩子(uname -r说我有 5.10)。

根据资料中提交后,我添加了下表:

table netdev filterfinal_lan {
    chain egress {
        type filter hook egress device enp1s0 priority 0; policy accept;
    }
}

但是,当我尝试应用该配置时,它告诉我它未被识别:

/etc/nftables.conf:107:20-25: Error: unknown chain hook
                type filter hook egress device enp1s0 priority 0; policy accept;
                                 ^^^^^^

我不确定哪个版本的 nftables 支持 egress hook,但我的nft --versionnftables v0.9.8 (E.D.S.).有关出口挂钩的信息似乎很难捉摸。

需要什么才能使用这个钩子?

答案1

实际上nftables内核 5.16 中添加了 egress hook,并fwd在 5.17 中改进了支持 ( )。

早些时候有过几次尝试,其中一次在最初提交的同时被 NACK-ed,使其出现在 5.7 版本的 Kernel Newbies 中,显然甚至nftables' wiki 链接到 Linux 5.7 的 Kernelnewbies 而不是 Linux 5.16 是错误的。

以下是 2020 年 3 月的相关邮件列表链接(内核 5.7 左右):

主题:回复:[PATCH 00/29] Netfilter 更新 net-next
来自:大卫·米勒 <davem() davemloft !网>

来自:阿列克谢·斯塔罗沃伊托夫 <[电子邮件受保护]>
日期:2020 年 3 月 17 日星期二 20:55:46 -1000

2020 年 3 月 17 日星期二下午 2:42 Pablo Neira Ayuso[电子邮件受保护]写道:

  1. 添加来自 Lukas Wunner 的新出口挂钩。

NACKed-by:阿列克谢·斯塔罗沃伊托夫[电子邮件受保护]

抱歉,我在推回此拉取请求后才看到此内容。

请有人通过恢复或类似方式处理此问题。

随后在此提交中恢复了它:netfilter:恢复出口钩子的引入。此回复可能尚未发布在所有相关邮件列表中,这增加了一些混乱。


快进快两年了。问题和疑虑(其中包括与 tc/qdisc 的交互)已得到解决,出口在内核 5.16(2022 年 1 月 9 日)中再次添加。Linux 5.16 的内核新手有这个条目:

网络过滤器

在 Linux 内核驱动程序数据库上:

CONFIG_NETFILTER_EGRESS:Netfilter 出口支持

[...]

  • Linux 内核中发现:5.16–5.19、5.19+HEAD

同样地,nftables用户态支持出口仅在 nf-next 中提交内核支持后才正式添加(因此在 5.16 发布之前),并在nftables 1.0.1 发布

此版本包含 Linux 内核 5.16-rc1 版本之前可用的新功能:

[...]

  • 出口挂钩支持(自 5.16-rc1 起可用)。

OP 的规则集在具有相关内核选项的内核上被接受,CONFIG_NETFILTER_EGRESS该内核选项的版本必须 >= 5.16nftables>= 1.0.1。

相关内容