如何保存iptables的规则?

我创建了iptables的规则。但是,当我重新启动电脑时,规则就不起作用了! 在Ubuntu上如何保存这些规则?
问题已解决!
执行iptables命令后,进行以下操作:
 1. sudo su
 2. iptables-save > /etc/iptables.rules
 3. In /etc/network/if-pre-up.d/iptables,put:

 #!/bin/sh
 iptables-restore < /etc/iptables.rules
 exit 0

 4. After, in /etc/network/if-post-down.d/iptables,put:
 #!/bin/sh
 iptables-save -c > /etc/iptables.rules
 if [ -f /etc/iptables.rules ]; then
 iptables-restore < /etc/iptables.rules
 fi
 exit 0
 5. After, give permission to the scripts:
 sudo chmod +x /etc/network/if-post-down.d/iptables
 sudo chmod +x /etc/network/if-pre-up.d/iptables

更多信息: https://help.ubuntu.com/community/IptablesHowTo#Saving_iptables 祝你好运!

https://help.ubuntu.com/community/IptablesHowTo#Saving_iptables - 23 93 26 35 19 57 3 89
我已经做了一切!可还是不起作用!! - Gustavo
1如果您在更新工单时提供了您尝试过的具体细节以及遇到的结果,那将非常有帮助。同时,了解您是进行桌面安装还是服务器安装,以及是否使用NetworkManager等信息也会很有帮助。 - andol
4既然你找到了解决方案,你应该接受导致你得出这个结果的答案,或者将你的答案内容放在“答案”框中,然后接受自己的答案。这样可以让系统标记这个问题为“已回答”,这将帮助其他用户如果他们遇到类似的问题。祝你有个愉快的一天! - weberc2
安装iptables-persistent时的提示信息如下: 当前的iptables规则可以保存到配置文件/etc/iptables/rules.v4中。 这些规则将在系统启动时自动加载。 规则只在软件包安装期间自动保存。请参考iptables-save(8)的手册页面,了解如何保持规则文件的最新更新。 - Craig Hicks
那个信息是一个强烈的暗示,规则的保存并不容易。 - Craig Hicks
netfilter-persistent/iptables-persistent 设计的假设是在安装 iptables-persistent 包时只需保存一次 - 之后每次启动都可以使用相同的规则文件。当然,如果规则是动态变化的,则这个假设是无效的。 - Craig Hicks
很有可能,至少有些回答声称保存规则操作是有效的,只是没有注意到在每次关闭时未刷新安装包中保存的规则。只要它们在启动时加载,就没有问题。 - Craig Hicks
2个回答

使用iptables-persistent是一种简单的方法。
安装iptables-persistent:
sudo apt-get install iptables-persistent

安装完成后,您可以随时保存/重新加载 iptables 规则:

sudo /etc/init.d/iptables-persistent save 
sudo /etc/init.d/iptables-persistent reload

Ubuntu 16.04服务器

按照上述描述进行安装没有问题,但是用于保存和重新加载的两个命令似乎在16.04服务器上不起作用。以下命令适用于该版本:

sudo netfilter-persistent save
sudo netfilter-persistent reload

4谢谢,我想知道为什么它在Ubuntu 16.04上不能工作。 - bluesman
3netfilter-persistent作为一个服务在关机和启动时提供钩子。安装iptables-persistent作为netfilter-persistent的插件后,iptables-persistent插件应该由netfilter-persistent服务调用来进行保存和加载。但在某些配置中似乎有意跳过写入操作。其原因和如何控制它是不透明的。 - Craig Hicks
安装iptables-persistent时的消息如下: 当前的iptables规则可以保存到配置文件/etc/iptables/rules.v4中。 这些规则将在系统启动时自动加载。 规则只会在软件包安装期间自动保存。请参阅iptables-save(8)的手册页,了解如何保持规则文件的最新状态。 - Craig Hicks
2因此,我不能把这个回答看作是一个真正的答案。 - Craig Hicks

通常保存iptables规则的方法是使用iptables-save命令,该命令将内容输出到标准输出(stdout)。
iptables-save > /etc/network/iptables.rules

iptables-save生成的输出可以通过iptables-restore从stdin读取。如果在没有NetworkManager的服务器上,常见的方法是在/etc/network/interfaces中使用pre-up命令。
iface eth0 inet static
        ....
        pre-up iptables-restore < /etc/network/iptables.rules

如果您正在使用NetworkManager,那么应该可以从/etc/NetworkManager/dispatcher.d/目录下的脚本中运行相同的命令。在Community Documentation - iptables howto中查看有关Configuration on Startup for NetworkManager的更多信息。
请注意,命令iptables、iptables-save和iptables-restore仅适用于IPv4流量。对于IPv6流量,等效的命令是ip6tables、ip6tables-save和ip6tables-restore。