在 Ubuntu 上 iptables 规则“无法保存”,通常不是 iptables 本身的问题,而是保存方式或系统机制不对。下面按常见原因和正确做法说明。
iptables,但系统用的是 nftablesiptables-save 能看到规则iptables 实际是 nftables 的兼容层ls -l /usr/sbin/iptables
如果看到:
iptables -> /etc/alternatives/iptables
再查:
update-alternatives --list iptables
可能包含:
iptables-legacyiptables-nft✅ Ubuntu 20.04+ 默认使用 nftables
iptables-legacy(传统方式)如果你明确想用传统 iptables:
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6
sudo apt install iptables-persistent
安装时会问是否保存当前规则,选 Yes
开机自动恢复:
sudo systemctl enable netfilter-persistent
✅ 这是最常用、最稳定的方式
nftables(推荐)如果你不需要“必须用 iptables”,建议直接用 nftables
sudo nft list ruleset > /etc/nftables.conf
sudo systemctl enable nftables
sudo systemctl start nftables
⚠️ 注意:
iptables-save 保存的规则 不会影响 nftables
因为:
以下命令只是查看,不保存:
iptables -A ...
iptables-save # 只输出,不写磁盘
❌ 只在终端加规则,不保存
❌ 用 iptables-save 但没重定向到文件
❌ 系统用 nftables,却用 iptables-persistent
❌ 忘了 systemctl enable
# 1. 看当前用的是哪种
iptables -V
# 2. 是否保存过
ls /etc/iptables/
# 3. 是否启用持久化
systemctl status netfilter-persistent
# 或
systemctl status nftables
如果你愿意,可以告诉我:
22.04 / 24.04?)iptables -V 输出我可以直接给你一步到位的可复制命令。