如何将iptables防火墙规则迁移到新服务器

来自菜鸟教程
跳转至:导航、​搜索

介绍

当从一台服务器迁移到另一台服务器时,通常需要将 iptables 防火墙规则作为迁移过程的一部分。 本教程将向您展示如何轻松地将您的活动 iptables 规则集从一台服务器复制到另一台服务器。

先决条件

本教程需要两台服务器。 我们将具有现有 iptables 规则的源服务器称为 Server A。 将规则迁移到的目标服务器将被称为 Server B

您还需要拥有超级用户或 sudo 访问两台服务器的权限。

查看现有的 iptables 规则

在迁移您的 iptables 规则之前,让我们看看它们的设置。 您可以在 Server A 上使用此命令执行此操作:

sudo iptables -S
Example output:-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 15.15.15.51/32 -j DROP

上面的示例规则将用于演示防火墙迁移过程。

导出 iptables 规则

iptables-save 命令将当前 iptables 规则写入 stdout(标准输出)。 这为我们提供了一种将防火墙规则导出到文件的简单方法,方法是将 stdout 重定向到文件。

Server A 上,具有要迁移的 iptables 规则的那个,使用 iptables-save 将当前规则导出到名为“iptables-export”的文件中,如下所示:

cd ~
sudo iptables-save > iptables-export

这将在您的主目录中创建 iptables-export 文件。 该文件可以在不同的服务器上用于将防火墙规则加载到 iptables 中。

查看文件内容(可选)

让我们快速浏览一下文件的内容。 我们将使用 cat 命令将其打印到终端:

cat iptables-export
iptables-export contents:# Generated by iptables-save v1.4.21 on Tue Sep  1 17:32:29 2015
*filter
:INPUT ACCEPT [135:10578]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [8364:1557108]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 15.15.15.51/32 -j DROP
COMMIT
# Completed on Tue Sep  1 17:32:29 2015

如您所见,该文件包含活动 iptables 规则的配置。 现在我们准备将此文件复制到我们的目标服务器 Server B

将导出的规则复制到目标服务器

我们需要将规则文件复制到目标服务器 Server B。 最简单的方法是使用 scp 或将文件内容复制并粘贴到 Server B 上的新文件中。 我们将演示如何使用 scp 通过网络将文件复制到 /tmp 目录。

Server A 上,运行此 scp 命令。 请务必将突出显示的部分替换为您的服务器的登录名和 IP 地址:

scp iptables-export user@server_b_ip_address:/tmp

提供适当的身份验证后,该文件将被复制到服务器 B 上的 /tmp 目录。 请注意,/tmp 的内容在重新启动时会被删除——如果您想保留它,请随意将其放在其他地方。

导入 iptables 规则

使用目标服务器上的导出规则,您可以将它们加载到 iptables 中。 但是,根据您的情况,您可能希望使用新的 IP 地址和范围更新文件中的规则,并可能更新接口名称。 如果您想在加载之前更改规则,请务必立即编辑 /tmp/iptables-export 文件。

一旦您准备好将 iptables-export 文件中的规则加载到 iptables 中,让我们使用 iptables-restore 命令来执行此操作。

在目标服务器 Server B 上,运行以下命令以加载防火墙规则:

sudo iptables-restore < /tmp/iptables-export

这会将规则加载到 iptables 中。 您可以使用 sudo iptables -S 命令验证这一点。

保存规则

iptables 规则是短暂的,因此必须特别注意它们在重新启动后仍然存在 - 您可能希望在 Server B 上执行此步骤。 我们将向您展示如何在 Ubuntu 和 CentOS 上保存规则。

Ubuntu

在 Ubuntu 上,保存 iptables 规则的最简单方法是使用 iptables-persistent 包,以便它们在重新启动后仍然有效。 像这样使用 apt-get 安装它:

sudo apt-get install iptables-persistent

在安装过程中,您将询问您是否要保存当前的防火墙规则。 响应 yes,如果要保存当前规则集。

如果您以后更新防火墙规则,并希望保存更改,请运行以下命令:

sudo invoke-rc.d iptables-persistent save

CentOS 6 及更早版本

在 CentOS 6 和更早版本(CentOS 7 默认使用 FirewallD)上,您可以使用 iptables 初始化脚本来保存您的 iptables 规则:

sudo service iptables save

这会将您当前的 iptables 规则保存到 /etc/sysconfig/iptables 文件,该文件由 iptables 在启动时加载。

结论

恭喜! 您的防火墙规则已从原始服务器迁移到新服务器。