温馨提示×

ubuntu iptables为何重启丢失

小樊
63
2026-10-01 01:37:00
栏目: 智能运维

在 Ubuntu 中,iptables 规则重启后丢失,根本原因通常只有一个:

iptables 本身不会自动持久化规则,系统重启后内核中的 netfilter 规则会被清空。

下面分点说明原因和解决方案。


一、为什么会丢失?

1. iptables 规则存在哪里?

  • iptables 规则 只存在于内核内存中
  • 断电 / 重启 → 内核重新加载 → 规则全部清空

2. Ubuntu 默认不会自动保存

  • 老版本 Ubuntu(≤14.04):有 iptables-save / iptables-restore,但不会自动执行
  • 新版本 Ubuntu(≥16.04):
    • 默认使用 netfilter-persistent
    • 但需要手动启用和保存

二、常见情况及解决方法

✅ 方法一(推荐):使用 netfilter-persistent

1. 安装

sudo apt update
sudo apt install iptables-persistent

安装过程中会提示是否保存当前规则,选 Yes

2. 保存规则

sudo netfilter-persistent save

3. 开机自动加载

sudo systemctl enable netfilter-persistent

规则文件位置:

/etc/iptables/rules.v4
/etc/iptables/rules.v6

✅ 方法二:手动保存 / 恢复(不推荐长期使用)

保存:

sudo iptables-save > /etc/iptables.rules

恢复(加到启动脚本):

iptables-restore < /etc/iptables.rules

例如加到:

/etc/rc.local

⚠️ Ubuntu 新版本默认没有 rc.local


三、Ubuntu 18.04+ 特别注意(nftables)

Ubuntu 默认后端可能是 nftables

查看:

sudo update-alternatives --list iptables

如果是:

/usr/sbin/iptables-nft

说明你在用 nft 后端,但 iptables 命令依然可用,netfilter-persistent 仍然适用。


四、常见误区

❌ “我写了iptables命令,应该会保存”
✅ 不会,必须显式保存

❌ “写在 bashrc / profile 里”
✅ 只对用户登录生效,不适用于系统网络启动

❌ “Docker 自动加的规则也会保存”
✅ Docker 规则是动态的,重启由 Docker 自己重建


五、总结一句话

Ubuntu 中 iptables 重启丢失,是因为规则没有持久化;用 iptables-persistent 保存并启用即可解决。

如果你愿意,我可以:

  • 帮你检查当前系统用的是 iptables 还是 nftables
  • 给你一份“最稳妥的防火墙持久化配置示例”

0 踩