我正在运行 Debian,并尝试使用 iptables 设置一些防火墙规则,但收到一个错误:
iptables/1.8.2 Failed to initialize nft: Protocol not supported
无论我尝试设置哪种规则,它都会给出相同的错误。我尝试在 Google 上搜索错误,但没有找到任何内容。
这些是我想要设置的规则:
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
有谁有想法吗?谢谢
答案1
Debian 10 使用默认情况下使用 iptables 而不是 nftables。这意味着不同的iptables
命令(iptables-nft
)正在与内核 nftables API 进行通信:它实际上翻译了每一个iptables统治成nftables规则,同时保持表格当扩展不存在直接的本地翻译时,模块扩展兼容性。
因为,不知何故,你的内核nftablesAPI 不起作用(我猜它不是标准的 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
你仍然需要调查你的非功能性nftables功能。由于从 iptables 切换到(原生)nftables 带来了巨大的优势,因此如果不能这样做就太糟糕了。
答案2
我的解决方案来自这里:内核升级后我需要重启。最简单的方法当然是:
# as root
shutdown -r now