什么加载 nft_compat

什么加载 nft_compat

我正在运行 AlmaLinux 9,启动时我看到警告

Warning: Deprecated Driver is detected: nft_compat will not be maintained in a future major release and may be disabled

但是加载该驱动程序的是什么?我禁用了firewalld服务。我想(正确地)消除这个警告。

附加信息:

[root@server ~]# lsmod | grep  nft_compat
nft_compat             20480  14
nf_tables             278528  98 nft_compat,nft_counter,nft_chain_nat
nfnetlink              20480  2 nft_compat,nf_tables


[root@server ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
NETAVARK_FORWARD  all  --  0.0.0.0/0            0.0.0.0/0            /* netavark firewall plugin rules */

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain NETAVARK_FORWARD (1 references)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            10.88.0.0/16         ctstate RELATED,ESTABLISHED
ACCEPT     all  --  10.88.0.0/16         0.0.0.0/0

Chain NETAVARK_ISOLATION_2 (1 references)
target     prot opt source               destination

Chain NETAVARK_ISOLATION_3 (0 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0
NETAVARK_ISOLATION_2  all  --  0.0.0.0/0            0.0.0.0/0

答案1

关于消息本身:它不是上游内核消息,而是 AlmaLinux 9 中添加的特定消息(可能继承自 RHEL 9)。

nft_compat模块是允许运行的兼容层iptables超过nftables并且仍然使用非 nftables 模块。

CONFIG_NFT_COMPAT: Netfilter x_tables 通过 nf_tables 模块

[...]

  • 内置模块:nft_compat

帮助文本

如果您打算在 nf_tables 框架上使用任何现有的 x_tables 匹配/目标扩展,则这是必需的。

任何使用的 xtables 模块iptables-nft而不是iptables-nft翻译iptables规则为仅限本机nftables规则需要nft_compat发挥作用。

从一个干净的虚拟机开始,不运行任何与网络相关的内容,因此没有nft_compat加载,几乎任何不为空的东西都会加载它。

这不会:

iptables-nft -A -j ACCEPT

因为它纯粹翻译成nftables代码:

# uname -r
6.1.0-0.deb11.5-amd64
# iptables -V
iptables v1.8.7 (nf_tables)
# iptables -A -j ACCEPT
# nft --debug=netlink list ruleset
ip filter INPUT 2 
  [ counter pkts 0 bytes 0 ]
  [ immediate reg 0 accept ]

table ip filter {
    chain INPUT {
        type filter hook input priority filter; policy accept;
        counter packets 0 bytes 0 accept
    }
}
# lsmod | grep nft_compat
# 

几乎任何其他东西都会(直到用户空间和内核版本允许将其转换为本机nftables,所以这可能取决于iptables版本和给定规则的内核版本)。

# iptables -A INPUT -j REJECT
# lsmod | grep nft_compat
nft_compat             20480  1
nf_tables             286720  4 nft_compat
x_tables               61440  2 nft_compat,ipt_REJECT
nfnetlink              20480  2 nft_compat,nf_tables
# nft --debug=netlink list ruleset
ip filter INPUT 2 
  [ counter pkts 8 bytes 608 ]
  [ immediate reg 0 accept ]

ip filter INPUT 3 2 
  [ counter pkts 0 bytes 0 ]
  [ target name REJECT rev 0 ]

table ip filter {
    chain INPUT {
        type filter hook input priority filter; policy accept;
        counter packets 8 bytes 608 accept
        counter packets 0 bytes 0 reject
    }
}
# 

显示的任何条目nft --debug=netlink ...都包含其中之一target name(对于iptables-nft .. -j 目标)或match name(对于iptables-nft ... -m 模块x_tables) 表示它通过兼容模块使用相应的内核模块nft_compat

要摆脱它,请完全不要使用iptables-nft或使用其库的工具(libip4tc2,...)。当然,恢复到iptables-legacy(如果甚至提供了?)会更糟糕:这个层打算在上游被弃用,并且兼容性层打算保留很长时间以取代它。

这可能意味着:不要使用 Docker,不要使用 podman,不要使用......

结论:我不知道如何摆脱这个消息。

相关内容