我有一个在以下位置加载 iptables 的脚本/etc/network/if-pre-up.d/iptablesload
:
#!/bin/sh
iptables-restore < /etc/iptables.rules
ip6tables-restore < /etc/ip6tables.rules
exit 0
我还有一个将 iptables 保存在以下位置的脚本/etc/network/if-post-down.d/iptablessave
:
#!/bin/sh
# By saving the current iptables rules to the file at the specific path,
# then they will be loaded on every startup.
echo "Saving current iptables rules..."
iptables-save -c > /etc/iptables.rules
if [ -f /etc/iptables.downrules ]; then
iptables-restore < /etc/iptables.downrules
fi
ip6tables-save -c > /etc/ip6tables.rules
if [ -f /etc/ip6tables.downrules ]; then
ip6tables-restore < /etc/ip6tables.downrules
fi
exit 0
/etc/iptables.rules
我在路径上有一个包含所有规则的文件。
当我手动执行时iptables-restore < /etc/iptables.rules
,我可以看到所有 iptables 规则。
但是打开 PC 后,所有 iptables 规则都丢失了(全部为空)。
我的结论是文件夹中的脚本/etc/network/if-post-down.d
没有/etc/network/if-pre-up.d
执行。为什么?
(该文件/etc/iptables.rules
存在是因为我手动执行了iptables-save -c > /etc/iptables.rules
。)
我使用的脚本与 Ubuntu 18 使用的完全相同 - 它们运行良好。
我也尝试完全按照他们写的方式复制上面的链接,但 iptables 仍然加载失败。
答案1
更新—networkd
Ubuntu 中的 OOTB 配置现在使用该iptables-persistent
包。如前所述,这是最新版本的解决方案:
sudo apt install iptables-persistent
netfilter-persistent save
netfilter-persistent reload
这将在会话之间保留 iptables 规则。
原始答案
您要查找的文件现在名为
/etc/iptables/rules.v4
例如
sudo cat /etc/iptables/rules.v4
# position 1
*filter
# [snip] -- I checked the rules, they are there
所以你应该能够
# must be root
sudo -i
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
并恢复:
# must be root
sudo -i
iptables-restore < /etc/iptables/rules.v4
ip6tables-restore < /etc/iptables/rules.v6