| 操作目标 | 主要命令 (推荐, 适用于现代系统) | 传统/备用命令 |
|---|---|---|
| 保存规则 | sudo netfilter-persistent save |
sudo service iptables-persistent save (Debian/Ubuntu) sudo /sbin/iptables-save > /etc/sysconfig/iptables (CentOS/RHEL 6) |
| 重启服务 | sudo systemctl restart iptables |
sudo service iptables restart |
| 启用开机自启 | sudo systemctl enable iptables |
sudo chkconfig iptables on (旧版) |
详细说明和最佳实践
重启 iptables 服务
重启服务意味着让 iptables 守护进程重新加载当前内存中的规则,但不会改变已保存的规则文件。

对于使用 systemd 的新系统 (如 Ubuntu 16.04+, Debian 8+, CentOS 7+, RHEL 7+)
这是目前最主流的方式。iptables 服务通常由 iptables 或 netfilter-persistent 包提供。
# 重启 iptables 服务 sudo systemctl restart iptables # 如果使用 netfilter-persistent (常见于 Ubuntu/Debian) sudo systemctl restart netfilter-persistent
对于使用 SysVinit 的旧系统 (如 CentOS 6, RHEL 6)
这些系统使用 service 命令来管理服务。
sudo service iptables restart
保存 iptables 规则
这一点至关重要! 在你对 iptables 规则进行任何修改(如添加、删除、修改)后,这些规则默认只存在于内存中,一旦系统重启,所有未保存的规则都会丢失。
在重启服务或系统之前,务必先保存你的规则。

对于使用 iptables-persistent 或 netfilter-persistent 的系统 (Debian/Ubuntu)
这是最简单、最推荐的方式,安装 iptables-persistent 时会提示你保存当前的 IPv4 和 IPv6 规则。
# 安装时保存规则 sudo apt-get install iptables-persistent # 手动保存规则 (推荐) sudo netfilter-persistent save
对于使用 service 的系统 (CentOS/RHEL 6)
在 CentOS/RHEL 6 中,规则通常保存在 /etc/sysconfig/iptables 文件中。
# 保存规则 sudo service iptables save
这个命令会执行 iptables-save 并将输出重定向到 /etc/sysconfig/iptables 文件。
手动保存规则 (通用方法)
如果你不想依赖服务脚本,也可以手动保存和恢复。

# 保存当前规则到文件 sudo iptables-save > /etc/iptables/rules.v4 # 保存 IPv4 规则 sudo ip6tables-save > /etc/iptables/rules.v6 # 保存 IPv6 规则 # 从文件恢复规则 sudo iptables-restore < /etc/iptables/rules.v4 sudo ip6tables-restore < /etc/iptables/rules.v6
注意:
/etc/iptables/rules.v4和/etc/iptables/rules.v6是iptables-persistent默认使用的文件路径。
完整的工作流程示例
假设你刚刚修改了一条防火墙规则,现在需要让它永久生效并立即生效。
-
添加/修改规则
# 示例:允许来自 192.168.1.100 的 SSH 访问 sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
-
查看规则确认
sudo iptables -L -n -v
-
保存规则 (这是最关键的一步!)
-
在 Ubuntu/Debian 上:
sudo netfilter-persistent save
-
在 CentOS/RHEL 7+ 上:
# 安装并启用服务 sudo yum install iptables-services sudo systemctl enable iptables # 保存规则 sudo service iptables save
-
在 CentOS/RHEL 6 上:
sudo service iptables save
-
-
重启服务 (确保新加载的规则是最新保存的)
# 现代系统 sudo systemctl restart iptables # 或旧系统 sudo service iptables restart
常见问题
Q: 为什么我重启系统后,iptables 规则又没了?
A: 因为你只修改了内存中的规则,但没有将它们保存到硬盘上,请务必在修改后执行 保存规则 的命令。
Q: sudo systemctl restart iptables 提示 "Failed to restart iptables.service: Unit iptables.service not found." 怎么办?
A: 这说明你的系统上没有安装 iptables 服务包,在基于 Debian/Ubuntu 的系统上,可以安装 iptables-persistent;在基于 RHEL/CentOS 的系统上,可以安装 iptables-services。
# Ubuntu/Debian sudo apt-get update sudo apt-get install iptables-persistent # CentOS/RHEL sudo yum install iptables-services sudo systemctl enable iptables
Q: iptables 和 firewalld 有什么区别?
A: 它们是 Linux 上两个不同的防火墙管理工具。
iptables是传统的、功能强大的工具,直接操作内核中的netfilter框架,规则是静态的,修改后需要手动保存和加载。firewalld(CentOS/RHEL 7+, Fedora, openSUSE) 是一个更动态的管理器,它支持“区域”(zones)和“运行时/永久”规则,无需重启即可应用大部分更改,更易于管理。
在 CentOS/RHEL 7+ 等系统上,默认是 firewalld,如果你习惯使用 iptables,可以先停用 firewalld。
# 停用并禁用 firewalld sudo systemctl stop firewalld sudo systemctl disable firewalld # 然后安装并启用 iptables sudo yum install iptables-services sudo systemctl enable iptables sudo systemctl start iptables
