如何保存 iptables 规则?

如何保存 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 祝你好运!

答案1

简单的方法是使用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

答案2

保存 iptables 规则的通用方法是使用命令 iptables-save,它将写入 stdout。

iptables-save > /etc/network/iptables.rules

然后,iptables-restore 可以在 stdin 上读取 iptables-save 创建的输出。如果在服务器上没有 NetworkManager,则一种常见的方法是使用 /etc/network/interfaces 中的 pre-up 命令。

iface eth0 inet static
        ....
        pre-up iptables-restore < /etc/network/iptables.rules

如果您正在使用 NetworkManager,那么应该可以从 /etc/NetworkManager/dispatcher.d/ 下创建的脚本运行相同的命令。在社区文档 - iptables 操作指南, 看NetworkManager 启动时的配置了解更多信息。

请注意,iptables、iptables-save 和 iptables-restore 命令仅适用于 IPv4。对于 IPv6 流量,等效命令是 ip6tables、ip6tables-save 和 ip6tables-restore。

相关内容