nftables规则重启后生效需两步:先执行sudo nft list ruleset > /etc/nftables.conf保存规则,再启用sudo systemctl enable --now nftables服务,启动时自动加载配置。

要让nftables规则在系统重启后依然生效,核心是两步:把当前规则保存成文件,并让systemd在启动网络之后自动加载它。这和iptables的持久化思路一致,但nftables原生支持更简洁的机制,不需要额外工具也能完成。
保存当前规则到配置文件
nftables本身不自动保存规则,必须手动导出。推荐使用标准路径,便于后续管理:
- 执行 sudo nft list ruleset > /etc/nftables.conf 将全部规则(含表、链、规则)保存为纯文本
- 确保目录可写:sudo mkdir -p /etc/nftables.d(如需分文件管理,可另存为/etc/nftables.d/*.nft)
- 检查文件内容是否有效:sudo nft -f /etc/nftables.conf 应无报错,说明格式正确
启用nftables systemd服务
主流发行版(Ubuntu 20.04+、Debian 11+、RHEL 8+/CentOS Stream、麒麟OS V10 SP2+)都自带nftables.service,默认已适配持久化流程:
- 确认服务存在:systemctl list-unit-files | grep nftables,应显示 nftables.service enabled
- 若未启用,运行:sudo systemctl enable --now nftables
- 该服务启动时会自动读取/etc/nftables.conf(或/etc/nftables.d/下所有.nft文件),无需额外配置
验证加载是否成功
不要只依赖服务状态,要确认规则真正在内核中运行:
- 重启后立即执行:sudo nft list ruleset | head -n 10,比对是否与保存前一致
- 模拟服务重载:sudo systemctl restart nftables && sudo nft list tables,应无错误且表仍在
- 若使用自定义路径(如/etc/nftables.d/firewall.nft),需修改服务配置:sudo systemctl edit nftables,加入Environment="NFTABLES_CONF=/etc/nftables.d/firewall.nft"
进阶:按协议族分离与脚本化管理
大型部署建议拆分规则,提升可维护性:
- IPv4专用规则存为/etc/nftables.d/ip4-filter.nft,IPv6存为/etc/nftables.d/ip6-filter.nft
- 创建加载脚本/usr/local/bin/load-nft-rules.sh,用nft -f依次加载多个文件,再设为systemd ExecStart
- 避免混用iptables和nftables:检查lsmod | grep ip_tables,若无输出说明iptables模块未加载,更干净

















