警告:存在 iptables-legacy 表

警告:存在 iptables-legacy 表

我已通过运行update-alternatives --set iptables /usr/sbin/iptables-nft并重新启动服务器将 Ubuntu Focal 服务器防火墙后端从旧版 iptables 迁移到 netfilter。现在显示的所有表iptables-legacy -S都是空的,但是当我运行时,iptables -S最后一行总是显示:

# Warning: iptables-legacy tables present, use iptables-legacy to see them

从那时起,我就iptables-legacy使用以下命令从替代方案中删除了它:

update-alternatives --remove iptables /usr/sbin/iptables-legacy

现在只显示 netfilter 版本

root@iBug-Server:~# update-alternatives --display iptables
iptables - auto mode
  link best version is /usr/sbin/iptables-nft
  link currently points to /usr/sbin/iptables-nft
  link iptables is /usr/sbin/iptables
  slave iptables-restore is /usr/sbin/iptables-restore
  slave iptables-save is /usr/sbin/iptables-save
/usr/sbin/iptables-nft - priority 20
  slave iptables-restore: /usr/sbin/iptables-nft-restore
  slave iptables-save: /usr/sbin/iptables-nft-save

我怎样才能消除这个警告?

答案1

正如错误消息所示,这是因为存在旧版(非 netfilter)iptables 子系统。最常见的原因是iptables-legacy调用了该命令,从而加载了旧版模块。

有 5 个模块与旧版 iptables 相关,每个表一个。(笔记:模块名称以 开头iptable_,这里没有 S)

iptable_filter
iptable_nat
iptable_mangle
iptable_raw
iptable_security

当其中任何一个被加载时,iptables-nft就会判定存在遗留的 iptables,并发出上述警告。

类似地,对于旧版 IPv6 iptables 还有 5 个模块,每个模块都以ip6table_(这里也没有 S)开头。

迁移到 netfilter 后,可以安全地删除这 10 个模块rmmod并将其列入黑名单。

再次注意这里使用blacklist iptable_filter不起作用,因为该指令只能防止自动加载,而不能防止通过modprobe(8)或其他命令进行手动加载。此解决方案使用install <modulename> /bin/false应该在任何情况下都能正确阻止模块加载。

答案2

docker运行 Ubuntu 22.04 安装程序时选择软件包后出现此警告。(当我跳过选择软件包并手动安装 Docker 时,没有收到此警告。)

迁移到 netfilter 后,可以使用 rmmod 安全地删除这 10 个模块并将其列入黑名单。

如果任何规则导致使用 10 个模块之一,当您尝试删除该模块时,您将收到以下错误

# modprobe -r iptable_nat
modprobe: FATAL: Module iptable_nat is in use.

为了彻底摆脱,# Warning: iptables-legacy tables present我需要彻底消灭iptables、、ip6tablesiptables-legacyip6tables-legacy检查所有四个,并检查是否需要将 s 对中的任何内容legacy合并到相应的非对中legacylegacy下面,在确定我不需要合并来自 s 的任何增量后,我使用已保存的非s 文件legacy

iptables-save > iptables-save.txt
ip6tables-save > ip6tables-save.txt
iptables-legacy-save > iptables-legacy-save.txt
ip6tables-legacy-save > ip6tables-legacy-save.txt

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -F
iptables -X

ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -t nat -F
ip6tables -t nat -X
ip6tables -t mangle -F
ip6tables -t mangle -X
ip6tables -F
ip6tables -X

iptables-legacy -P INPUT ACCEPT
iptables-legacy -P FORWARD ACCEPT
iptables-legacy -P OUTPUT ACCEPT
iptables-legacy -t nat -F
iptables-legacy -t nat -X
iptables-legacy -t mangle -F
iptables-legacy -t mangle -X
iptables-legacy -F
iptables-legacy -X

ip6tables-legacy -P INPUT ACCEPT
ip6tables-legacy -P FORWARD ACCEPT
ip6tables-legacy -P OUTPUT ACCEPT
ip6tables-legacy -t nat -F
ip6tables-legacy -t nat -X
ip6tables-legacy -t mangle -F
ip6tables-legacy -t mangle -X
ip6tables-legacy -F
ip6tables-legacy -X

for x in _raw _mangle _security _nat _filter; do
    modprobe -r "iptable${x}"
    modprobe -r "ip6table${x}"
done

iptables-restore < iptables-save.txt
ip6tables-restore < ip6tables-save.txt

你还需要运行

update-alternatives --remove iptables /usr/sbin/iptables-legacy

请查阅有关 的其他资源update-alternatives,从 iptables 迁移到 nft,以及在机器连接到网络时完全清除 iptables 的安全影响。如果您安装了 Docker,您将无法这样做,apt-get purge iptables因为它是 的依赖项docker-ce

相关内容