问题描述
我创建了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祝你好运!
最佳解决办法
简单的方法是使用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
次佳解决办法
保存iptables规则的通用方法是使用写入stdout的命令iptables-save。
iptables-save > /etc/network/iptables.rules
iptables-save创建的输出可以通过iptables-restore读取标准输入。如果在服务器上没有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。