介绍
当从一台服务器迁移到另一台服务器时,通常需要将 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 在启动时加载。
结论
恭喜! 您的防火墙规则已从原始服务器迁移到新服务器。