NDB群集安全性和网络问题
在本节中,我们讨论与NDB群集相关的基本网络安全问题。记住“开箱即用”的 NDB群集并不安全,这一点非常重要。您或您的网络管理员必须采取适当的步骤,以确保您的群集不会在网络上受到威胁。
群集通信协议本质上是不安全的,并且群集中节点之间的通信中未使用加密或类似的安全措施。由于网络速度和延迟直接影响群集的效率,因此也不建议对节点之间的网络连接使用SSL或其他加密方法,因为这样的方案将有效地减慢通信速度。
同样,没有身份验证可用于控制API节点对NDB群集的访问。与加密一样,强加身份验证要求的开销将对群集性能产生不利影响。
此外,访问群集时,不会检查以下两项之一的源IP地址:
SQL或API节点使用文件中的空白或节创建的“可用插槽”
[mysqld]
[api]
config.ini
这意味着,如果有任何空的
[mysqld]
或[api]
部分的在config.ini
文件中,那么知道管理服务器的主机名(或IP地址)和端口的任何API节点(包括SQL节点)可以连接到群集,并访问其数据不受任何限制。(有关此问题和相关问题的更多信息,请参见“ NDB群集和MySQL特权”。)注意
通过
HostName
为文件中的all[mysqld]
和[api]
section 指定一个参数,可以对SQL和API节点对群集的访问进行某种控制config.ini
。但是,这还意味着,如果希望将API节点从以前未使用的主机连接到群集,则需要在文件中添加一个[api]
包含其主机名的部分config.ini
。在本章的其他地方可以找到有关该
HostName
参数的更多信息。另请参见“ NDB群集的快速测试设置”,以获取HostName
与API节点一起使用的配置示例。任何ndb_mgm客户端
这意味着任何获得了管理服务器的主机名(或IP地址)和端口(如果不是标准端口)的群集管理客户端都可以连接到群集并执行任何管理客户端命令。这包括诸如
ALL STOP
和的命令SHUTDOWN
。
由于这些原因,有必要在网络级别上保护群集。群集的最安全的网络配置是将群集节点之间的连接与任何其他网络通信隔离开的配置。这可以通过以下任何一种方法来完成:
将群集节点保留在与任何公共网络物理隔离的网络上。此选项是最可靠的。但是,这是实施起来最昂贵的。
我们在此处显示使用这样的物理隔离网络的NDB群集设置示例:
具有硬件防火墙的NDB群集
此设置具有两个网络,一个用于群集管理服务器和数据节点的专用(实心框),另一个用于SQL节点所在的公用(虚线框)。(我们展示了使用千兆交换机连接的管理和数据节点,因为这提供了最佳性能。)这两个网络都受到硬件防火墙(有时也称为基于网络的防火墙)的保护。
这种网络设置是最安全的,因为任何包都无法从网络外部到达群集的管理或数据节点,并且群集的内部通信都不能到达外部,而无需通过SQL节点,只要SQL节点不允许要转发的数据包。当然,这意味着必须保护所有SQL节点免受黑客攻击。
重要
关于潜在的安全漏洞,SQL节点与任何其他MySQL服务器没有什么不同。有关可用于保护MySQL服务器安全的技术的说明,请参见“使MySQL免受攻击者的攻击”。
使用一个或多个软件防火墙(也称为基于主机的防火墙)来控制哪些数据包从不需要访问网络的网络部分传递到群集。在这种类型的设置中,必须在群集中的每个主机上安装软件防火墙,否则可以从本地网络外部访问该防火墙。
基于主机的选件实现起来成本最低,但是纯粹依靠软件来提供保护,因此最难保证安全。
NDB群集的此类网络设置如下所示:
具有软件防火墙的NDB群集
使用这种类型的网络设置意味着NDB群集主机有两个区域。每个群集主机都必须能够与群集中的所有其他计算机进行通信,但是仅允许那些承载SQL节点的服务器(虚线框)与外部进行任何接触,而位于包含数据节点和管理区域的计算机中节点(实心框)必须与不属于群集的任何计算机隔离。使用这些应用程序的集群和用户应用程序必须不能被允许具有管理和数据节点主机的直接访问。
为此,您必须根据每台群集主机计算机上运行的节点类型,设置将流量限制为下表所示类型的软件防火墙:
基于主机的防火墙群集配置中的节点类型
节点类型 允许的流量 SQL或API节点 - 它源自管理或数据节点的IP地址(使用任何TCP或UDP端口)。
- 它源自群集所在的网络内部,并且位于应用程序正在使用的端口上。
数据节点或管理节点 - 它源自管理或数据节点的IP地址(使用任何TCP或UDP端口)。
- 它源自SQL或API节点的IP地址。
对于给定的节点类型,除表中显示的流量外,其他流量均应拒绝。
防火墙的具体配置因防火墙应用程序的不同而异,超出了本手册的范围。iptables是一个非常常见且可靠的防火墙应用程序,经常与APF一起用作前端以简化配置。如果您选择实施这种类型的NDB群集网络设置,或者选择下一个项目中讨论的“混合”类型的NDB群集网络设置,则可以(并且应该)查阅所用软件防火墙的文档。
也可以采用前两种方法的组合,同时使用硬件和软件来保护群集,即同时使用基于网络和基于主机的防火墙。就安全级别和成本而言,这在前两个方案之间。这种类型的网络设置将群集保留在硬件防火墙之后,但允许传入的数据包传播到连接所有群集主机的路由器之外,到达SQL节点。
此处显示了结合使用硬件和软件防火墙对NDB群集进行的一种可能的网络部署:
结合了硬件和软件防火墙的NDB群集
在这种情况下,您可以在硬件防火墙中设置规则,以拒绝除SQL节点和API节点以外的任何外部流量,然后仅允许应用程序所需的端口上的流量通过。
无论使用哪种网络配置,请记住,从确保群集安全的角度来看,您的目标都保持不变–防止任何不必要的流量到达群集,同时确保群集中节点之间的最有效通信。
由于NDB群集要求打开大量端口以进行节点之间的通信,因此建议的选择是使用隔离的网络。这是防止不必要的流量到达群集的最简单方法。
注意如果希望远程(即从本地网络外部)管理NDB群集,建议的方法是使用ssh或其他安全登录Shell访问SQL节点主机。然后,可以从该主机运行管理客户端,以从群集自身的本地网络中安全地访问管理服务器。
即使理论上可以这样做,也不建议使用ndb_mgm直接从运行群集的本地网络外部管理群集。由于在管理客户端和管理服务器之间既没有进行身份验证,也没有进行加密,因此这表示管理集群的方法非常不安全,并且几乎肯定会迟早受到损害。