Linux 系统上的 iptables 防火墙是一个非常有用的功能,它允许系统管理员精确地控制系统允许或拒绝哪些网络流量。
经验丰富的 Linux 管理员可能知道系统重新启动完全清除系统的 iptables 规则所带来的挫败感和痛苦。这是因为默认情况下 iptables 规则在重新启动后不会保留。配置系统的 iptables 规则后,您必须执行一个更重要的步骤,以确保规则在重新启动后仍然存在。
在本教程中,您将了解如何在所有主要 Linux 发行版(包括基于 DEB 和 RPM 的系统)上重新启动后使 iptables 规则保持不变。
在本教程中您将学习:
-
如何在 DEB 发行版上安装 iptables-persistent 包
-
如何在 RPM 发行版上安装 iptables-services 包
-
如何使用 iptables-save 命令使规则在重启后仍然保留
-
如何删除已保存的规则
如何在 Linux 上重启后使 iptables 规则保持不变 分步说明
你知道吗?
一些 iptables 前端,例如基于 Red Hat 的系统的 firewalld 和基于 Ubuntu 的系统的 ufw,将自动为您保存您的规则,即使重新启动后它们也会保留。
在继续之前,请确保您已在系统上配置了一些规则。特别是,本教程假设您已使用 iptables 配置规则,而不是使用 firewalld 或 ufw 等前端防火墙应用程序。
要查看系统上的规则,您可以使用以下 iptables 命令。
$ sudo iptables -L
根据您使用的 Linux 发行版,请按照下面的正确部分操作以保存您配置的 iptables 规则。
注意
基于 DEB 的系统是 Debian、Ubuntu、Linux Mint 和其他衍生版本等发行版。 基于 RPM 的系统包括 Red Hat、Fedora、CentOS、AlmaLinux、Rocky Linux 和其他基于 Red Hat 的发行版。这也包括 openSUSE。
在基于 DEB 的系统上保存 iptables 规则
-
为了使您的 iptables 规则在重新启动后保持不变,请使用 apt 软件包管理器安装 iptables-persistent 软件包:
$ sudo apt install iptables-persistent
当前建立的任何 iptables 规则都将保存到以下相应的 IPv4 和 IPv6 文件中:
/etc/iptables/rules.v4 /etc/iptables/rules.v6
-
要使用新规则更新持久 iptables,只需使用 iptables 命令将新规则包含到您的系统中。要使更改在重新启动后永久生效,请运行 iptables-save 命令:
$ sudo iptables-save > /etc/iptables/rules.v4 OR $ sudo ip6tables-save > /etc/iptables/rules.v6
-
要删除持久性 iptables 规则,只需打开相关的 /etc/iptables/rules.v* 文件并删除包含所有不需要的规则的行。
在基于 RPM 的系统上保存 iptables 规则
-
为了使您的 iptables 规则在重新启动后保持不变,请使用 dnf 包管理器安装 iptables-services 包:
$ sudo dnf install iptables-services
当前建立的任何 iptables 规则都将保存到以下相应的 IPv4 和 IPv6 文件中:
/etc/sysconfig/iptables /etc/sysconfig/ip6tables
-
确保禁用 firewalld 并启用 systemd 中的 iptables 服务。
$ sudo systemctl stop firewalld $ sudo systemctl disable firewalld $ sudo systemctl start iptables $ sudo systemctl enable iptables
然后,您可以使用以下命令确保该服务正在运行:
$ sudo systemctl status iptables
-
要使用新规则更新持久 iptables,只需使用 iptables 命令将新规则包含到您的系统中。要使更改在重新启动后永久生效,请运行 iptables-save 命令:
$ sudo iptables-save > /etc/sysconfig/iptables OR $ sudo ip6tables-save > /etc/sysconfig/ip6tables
-
要删除持久性 iptables 规则,只需打开相关的 /etc/sysconfig/iptables 或 /etc/sysconfig/ip6tables 文件并删除包含所有不需要的规则的行。