在本节中,我们讨论了 NDB 集群相关的基本网络安全问题。请牢记,NDB 集群“开箱即用”是不安全的;您或您的网络管理员必须采取适当的步骤,以确保集群不会通过网络被破坏。
集群通信协议本质上是不安全的,不使用加密或类似的安全措施在集群节点之间的通信。由于网络速度和延迟对集群效率的直接影响,因此也不建议使用 SSL 或其他加密方法来加密节点之间的网络连接,因为这些方案会导致通信变慢。
此外,也没有对 API 节点访问 NDB 集群的身份验证。与加密一样,实施身份验证要求将对集群性能产生不良影响。
此外,还没有检查访问集群的源 IP 地址,包括:
-
使用 “空闲槽” 由空的
[mysqld]
或[api]
部分在config.ini
文件中创建的 SQL 或 API 节点这意味着,如果
config.ini
文件中有空的[mysqld]
或[api]
部分,那么任何 API 节点(包括 SQL 节点)只要知道管理服务器的主机名(或 IP 地址)和端口,就可以连接到集群并访问其数据,而不受限制。(请参阅 第 25.6.21.2 节,“NDB 集群和 MySQL 权限”,以获取更多关于此问题的信息。)Note您可以通过在
config.ini
文件中的所有[mysqld]
和[api]
部分指定HostName
参数来控制 SQL 和 API 节点对集群的访问。然而,这也意味着,如果您想从以前未使用的主机连接 API 节点到集群,您需要将其主机名添加到config.ini
文件中的[api]
部分中。有关
HostName
参数的更多信息,请参阅本章的其他部分。elsewhere in this chapter。也请参阅 第 25.4.1 节,“快速测试 NDB 集群设置”,以获取使用HostName
与 API 节点的配置示例。 -
任何 ndb_mgm 客户端
这意味着任何集群管理客户端只要知道管理服务器的主机名(或 IP 地址)和端口(如果不是标准端口),就可以连接到集群并执行任何管理客户端命令,包括
ALL STOP
和SHUTDOWN
命令。
由于这些原因,因此需要在网络级别保护集群。最安全的网络配置是将集群节点与其他网络通信隔离。这可以通过以下方法实现:
-
将集群节点放在与公共网络分离的网络上。这是最可靠的选项,但实施起来最昂贵。
我们在这里展示了使用物理隔离网络的 NDB 集群设置示例:
该设置有两个网络,一个私有网络(实线框)用于集群管理服务器和数据节点,一个公共网络(虚线框)用于 SQL 节点。(我们展示了使用千兆位交换机连接管理和数据节点,因为这提供了最佳性能。)两个网络都受到硬件防火墙的保护,有时也称为 基于网络的防火墙。
这种网络设置是最安全的,因为没有数据包可以从外部网络到达集群的管理或数据节点,或者从集群内部通信到达外部网络——只要 SQL 节点不允许任何数据包被转发。这意味着所有 SQL 节点都必须被保护免受黑客攻击。
Important关于潜在的安全漏洞,SQL 节点与其他 MySQL 服务器没有区别。请参阅 第 8.1.3 节,“保护 MySQL 免受攻击”,了解保护 MySQL 服务器的技术。
-
使用一个或多个软件防火墙(也称为基于主机的防火墙)来控制哪些数据包可以从不需要访问集群的网络部分传递到集群中。在这种设置中,每个集群主机都需要安装软件防火墙。
基于主机的选项是最便宜的实现方式,但它纯粹依赖软件来提供保护,因此是最难以保持安全的。
NDB 集群的这种网络设置如下所示:
使用这种网络设置意味着 NDB 集群主机分为两个区域。每个集群主机都必须能够与集群中的所有其他机器通信,但只有 SQL 节点(虚线框)可以与外部世界通信,而数据节点和管理节点(实线框)必须与集群外的机器隔离。使用集群的应用程序和用户不得直接访问管理节点和数据节点主机。
为实现这一点,您必须设置软件防火墙,以限制流量类型,如下表所示,根据每个集群主机上的节点类型:
表 25.68 基于主机的防火墙集群配置中的节点类型
Node Type Permitted Traffic SQL 节点或 API 节点 -
它来自管理节点或数据节点的 IP 地址(使用任何 TCP 或 UDP 端口)。
-
它来自集群所在的网络内部,并使用应用程序所使用的端口。
数据节点或管理节点 -
它来自管理节点或数据节点的 IP 地址(使用任何 TCP 或 UDP 端口)。
-
它来自 SQL 节点或 API 节点的 IP 地址。
任何不在表格中显示的流量都应该被拒绝。
防火墙应用程序的配置细节超出了本手册的范围。iptables 是一个非常常见且可靠的防火墙应用程序,通常与 APF 结合使用,以便更容易配置。如果您选择实施这种类型的 NDB 集群网络设置,或者混合类型的网络设置,请务必查看您所使用的软件防火墙的文档。
-
-
另一种可能性是使用硬件防火墙和软件防火墙的组合来保护集群——这在安全级别和成本之间提供了一个折衷方案。这种网络设置将集群置于硬件防火墙之后,但允许入站数据包到达 SQL 节点。
使用硬件防火墙和软件防火墙组合的 NDB 集群网络部署示例如下:
在这种情况下,您可以在硬件防火墙中设置规则,以拒绝所有外部流量,除了 SQL 节点和 API 节点,并且只允许流量到达应用程序所需的端口。
无论您使用什么网络配置,记住您的目标始终是防止不必要的流量到达集群,同时确保集群中的节点之间的通信尽可能高效。
由于 NDB 集群需要打开大量端口以便节点之间的通信,因此推荐的选项是使用隔离的网络。这是防止不必要流量到达集群的最简单方式。
如果您想远程管理 NDB 集群(即从本地网络外部),推荐的方式是使用 ssh 或其他安全登录 shell 来访问 SQL 节点主机。从这个主机,您可以安全地访问管理服务器,使用管理客户端,从集群的本地网络内部。
虽然从理论上讲这是可能的,但是不推荐使用 不 使用ndb_mgm 直接从集群所在的本地网络外部管理集群。由于在管理客户端和管理服务器之间没有身份验证或加密,这种方式非常不安全,几乎肯定会被攻破。