iptables/1.8.2 初始化 nft 失败:协议不支持

gra*_*alf 5 linux debian iptables

我正在运行 Debian,并尝试使用 iptables 设置一些防火墙规则,但出现错误:

iptables/1.8.2 Failed to initialize nft: Protocol not supported
Run Code Online (Sandbox Code Playgroud)

我尝试设置什么样的规则并不重要,它只会给我同样的错误。我尝试用谷歌搜索错误但没有找到任何东西。

这些是我试图设定的规则:

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?谢谢

A.B*_*A.B 3

Debian 10 默认使用iptables 而不是 nftables。这意味着不同的iptables命令 ( iptables-nft) 正在与内核 nftables API 进行通信:它实际上将每个iptables规则转换为nftables规则,同时在扩展不存在直接本机翻译时保持xtables模块扩展兼容性。

因为不知何故,你的内核nftables API 不起作用(我的猜测是它不是标准的 Debian 10 内核并且未启用 nftables 支持。答案是什么uname -r?),命令失败。您仍然可以选择通过更改实际执行的用户态命令来恢复到仅与 iptables 内核 API 通信的旧版 iptables 命令,如上一个链接中所述:

# update-alternatives --set iptables /usr/sbin/iptables-legacy
# update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
# update-alternatives --set arptables /usr/sbin/arptables-legacy
# update-alternatives --set ebtables /usr/sbin/ebtables-legacy
Run Code Online (Sandbox Code Playgroud)

您仍然需要调查您的非功能性nftables功能。由于从 iptables 切换到(原生)nftables 会带来巨大的优势,因此如果不能这样做就太糟糕了。