21.5.17.1 NDB 群集安全性和网络问题

在本节中,我们讨论与 NDB 群集相关的基本网络安全问题。记住“开箱即用”的 NDB 群集并不安全,这一点非常重要。您或您的网络 Management 员必须采取正确的步骤,以确保您的群集不会在网络上受到威胁。

群集通信协议本质上是不安全的,并且群集中节点之间的通信中未使用加密或类似的安全措施。由于网络速度和延迟直接影响群集的效率,因此也不建议对节点之间的网络连接使用 SSL 或其他加密,因为这样的方案将有效地减慢通信速度。

同样,没有身份验证可用于控制 API 节点对 NDB 群集的访问。与加密一样,强加身份验证要求的开销将对群集性能产生不利影响。

此外,访问群集时,不会检查以下两项之一的源 IP 地址:

  • config.ini文件中空的[mysqld][api]节创建的使用“可用插槽”的 SQL 或 API 节点

这意味着,如果config.ini文件中有任何空的[mysqld][api]部分,则任何知道 Management 服务器的主机名(或 IP 地址)和端口的 API 节点(包括 SQL 节点)都可以连接到集群并访问其数据。没有限制。 (有关此问题和相关问题的更多信息,请参见第 21.5.17.2 节“ NDB 群集和 MySQL 特权”。)

Note

通过为config.ini文件中的所有[mysqld][api]部分指定HostName参数,可以对 SQL 和 API 节点对群集的访问进行一些控制。但是,这也意味着,如果希望将 API 节点从以前未使用的主机连接到群集,则需要在config.ini文件中添加一个包含其主机名的[api]部分。

本章其他地方提供了有关HostName参数的更多信息。有关在 API 节点上使用HostName的配置示例,另请参见第 21.3.1 节“ NDB 群集的快速测试设置”

这意味着,获得 Management 服务器的主机名(或 IP 地址)和端口(如果不是标准端口)的任何群集 ManagementClient 端都可以连接到群集并执行任何 ManagementClient 端命令。这包括ALL STOPSHUTDOWN之类的命令。

由于这些原因,有必要在网络级别保护群集。群集的最安全的网络配置是将群集节点之间的连接与任何其他网络通信隔离开的配置。这可以通过以下任何一种方法来完成:

  • 将群集节点保留在与任何公共网络物理隔离的网络上。此选项是最可靠的。但是,这是实施起来最昂贵的。

我们在此处显示使用这样的物理隔离网络的 NDB 群集设置示例:

图 21.40 具有硬件防火墙的 NDB 群集

内容在周围的 Literals 中描述。

此设置有两个网络,一个用于群集 Management 服务器和数据节点的专用(实心框),另一个用于 SQL 节点所在的公用(虚线框)。 (我们展示了使用千兆交换机连接的 Management 和数据节点,因为这提供了最佳性能.)这两个网络都受到硬件防火墙(有时也称为基于网络的防火墙)的保护。

这种网络设置是最安全的,因为任何包都无法从网络外部到达群集的 Management 或数据节点,并且群集的内部通信都不能到达外部,而无需通过 SQL 节点,只要 SQL 节点不允许要转发的数据包。当然,这意味着必须保护所有 SQL 节点免受黑客攻击。

Important

关于潜在的安全漏洞,SQL 节点与任何其他 MySQL 服务器没有什么不同。有关可用于保护 MySQL 服务器安全的技术的说明,请参见第 6.1.3 节“使 MySQL 安全防范攻击者”

  • 使用一个或多个软件防火墙(也称为基于主机的防火墙)来控制哪些数据包从不需要访问网络的网络部分传递到群集。在这种类型的设置中,必须在群集中的每个主机上安装软件防火墙,否则可以从本地网络外部访问该防火墙。

基于主机的选件实现起来成本最低,但是纯粹依靠软件来提供保护,因此最难保证安全。

NDB 群集的这种网络设置类型如下所示:

图 21.41 具有软件防火墙的 NDB 群集

内容在周围的 Literals 中描述。

使用这种类型的网络设置意味着 NDB 群集主机有两个区域。每个群集主机都必须能够与群集中的所有其他计算机进行通信,但是仅允许那些承载 SQL 节点的服务器(虚线框)与外部进行任何接触,而位于包含数据节点和 Management 区域的计算机中节点(实心框)必须与不属于群集的任何计算机隔离。不得*不允许使用集群的应用程序和这些应用程序的用户直接访问 Management 和数据节点主机。

为此,您必须根据每台群集主机计算机上运行的节点类型,设置软件防火墙,以将流量限制为下 table 所示的一种或多种类型:

table21.281 基于主机的防火墙群集配置中的节点类型

Node TypePermitted Traffic
SQL 或 API 节点它源自 Management 或数据节点的 IP 地址(使用任何 TCP 或 UDP 端口)。


它源自群集所在的网络内部,并且位于应用程序正在使用的端口上。
|数据节点或 Management 节点|它源自 Management 或数据节点的 IP 地址(使用任何 TCP 或 UDP 端口)。
它源自 SQL 或 API 节点的 IP 地址。

对于给定的节点类型,除 table 中显示的流量外,其他流量均应拒绝。

防火墙的具体配置因防火墙应用程序的不同而异,超出了本手册的范围。 iptables 是一个非常常见且可靠的防火墙应用程序,经常与 APF **一起用作前端以简化配置。如果您选择实施这种类型的 NDB 群集网络设置,或者在下一项讨论的“混合”类型的 NDB 群集网络设置,则可以(并且应该)查阅所使用软件防火墙的文档。

  • 还可以将前两种方法结合使用,既使用硬件又使用软件来保护群集,即同时使用基于网络的防火墙和基于主机的防火墙。就安全级别和成本而言,这在前两个方案之间。这种类型的网络设置将群集保留在硬件防火墙后面,但允许传入的数据包传播到连接所有群集主机的 Router 之外,到达 SQL 节点。

此处显示了结合使用硬件和软件防火墙的 NDB 群集的一种可能的网络部署:

图 21.42 结合了硬件和软件防火墙的 NDB 群集

内容在周围的 Literals 中描述。

在这种情况下,您可以在硬件防火墙中设置规则以拒绝除 SQL 节点和 API 节点以外的任何外部流量,然后仅允许应用程序所需的端口上的流量通过。

无论使用哪种网络配置,请记住,从保持群集安全的角度来看,您的目标都保持不变–防止任何不必要的流量到达群集,同时确保群集中节点之间的最有效通信。

因为 NDB 群集需要打开大量端口才能进行节点之间的通信,所以建议的选择是使用隔离的网络。这是防止不必要的流量到达群集的最简单方法。

Note

如果要远程(即从本地网络外部)ManagementNDB 群集,建议的方法是使用 ssh 或其他安全登录 Shell 程序来访问 SQL 节点主机。然后,可以从该主机运行 ManagementClient 端,以从群集自己的本地网络中安全地访问 Management 服务器。

尽管从理论上讲可以这样做,但不建议使用ndb_mgm直接从运行群集的本地网络外部直接 Management 群集。由于在 ManagementClient 端和 Management 服务器之间既没有进行身份验证,也没有进行加密,因此这 table 示 Management 集群的方法非常不安全,并且几乎肯定会迟早受到损害。