我为 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。