使用 iptables命令定义的规则,手动删除前,其生效期限为 kernel 存活期限,当系统重启之后,定义的规则会消失。
iptables持久化方案,如何让防火墙规则重启后依旧有效?
- 推荐使用 iptables-persistent 工具:
#首先安装
apt install iptables-persistent
#保存当前设置的iptables防火墙规则,
/etc/init.d/netfilter-persistent save
#重新载入防火墙规则
netfilter-persistent reload
#保存的规则文件路径如下:
/etc/iptables/rules.v4
/etc/iptables/rules.v6
- 原理:iptalbes-persistent save 和 reload 脚本内调用的命令
- netfilter-persistent save
- netfilter-persistent reload
save_rules()
{
if [ ! "${IPTABLES_SKIP_SAVE}x" = "yesx" ]; then
touch /etc/iptables/rules.v4
chmod 0640 /etc/iptables/rules.v4
iptables-save > /etc/iptables/rules.v4
fi
}
load_rules()
{
if [ "${IPTABLES_RESTORE_NOFLUSH}x" = "yesx" ]; then
NOFLUSH='--noflush'
else
NOFLUSH=''
fi
#load IPv4 rules
if [ ! -f /etc/iptables/rules.v4 ]; then
echo "Warning: skipping IPv4 (no rules to load)"
else
iptables-restore $NOFLUSH < /etc/iptables/rules.v4
fi
}
命令行实现
1. 保存现有规则导出到文件:
iptables-save > /etc/iptables/rules.v4
2. 加载保存的规则:
iptables-restore < /etc/iptables/rules.v4
3. 实现开机自动加载规则:
rocky: vim /etc/rc.d/rc.local 增加如下行:
iptables-restore < /etc/iptables/rules.v4
ubuntu 中没有 rc.local文件,要自行在/etc目录下创建
vim /etc/rc.local
#
#有时候会因为依赖关系 ,无法成功开机加载配置。
#建议使用 service管理启动或使用上面的iptables-persistent 工具