Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  NDB Cluster Security and Networking Issues

25.6.21.1 NDB 集群安全和网络问题

在本节中,我们讨论了 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 STOPSHUTDOWN 命令。

由于这些原因,因此需要在网络级别保护集群。最安全的网络配置是将集群节点与其他网络通信隔离。这可以通过以下方法实现:

  1. 将集群节点放在与公共网络分离的网络上。这是最可靠的选项,但实施起来最昂贵。

    我们在这里展示了使用物理隔离网络的 NDB 集群设置示例:

    图 25.7 使用硬件防火墙的 NDB 集群

    Content is described in the surrounding text.

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

    这种网络设置是最安全的,因为没有数据包可以从外部网络到达集群的管理或数据节点,或者从集群内部通信到达外部网络——只要 SQL 节点不允许任何数据包被转发。这意味着所有 SQL 节点都必须被保护免受黑客攻击。

    Important

    关于潜在的安全漏洞,SQL 节点与其他 MySQL 服务器没有区别。请参阅 第 8.1.3 节,“保护 MySQL 免受攻击”,了解保护 MySQL 服务器的技术。

  2. 使用一个或多个软件防火墙(也称为基于主机的防火墙)来控制哪些数据包可以从不需要访问集群的网络部分传递到集群中。在这种设置中,每个集群主机都需要安装软件防火墙。

    基于主机的选项是最便宜的实现方式,但它纯粹依赖软件来提供保护,因此是最难以保持安全的。

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

    图 25.8 使用软件防火墙的 NDB 集群

    Content is described in the surrounding text.

    使用这种网络设置意味着 NDB 集群主机分为两个区域。每个集群主机都必须能够与集群中的所有其他机器通信,但只有 SQL 节点(虚线框)可以与外部世界通信,而数据节点和管理节点(实线框)必须与集群外的机器隔离。使用集群的应用程序和用户不得直接访问管理节点和数据节点主机。

    为实现这一点,您必须设置软件防火墙,以限制流量类型,如下表所示,根据每个集群主机上的节点类型:

    表 25.68 基于主机的防火墙集群配置中的节点类型

    Node Type Permitted Traffic
    SQL 节点或 API 节点
    • 它来自管理节点或数据节点的 IP 地址(使用任何 TCP 或 UDP 端口)。

    • 它来自集群所在的网络内部,并使用应用程序所使用的端口。

    数据节点或管理节点
    • 它来自管理节点或数据节点的 IP 地址(使用任何 TCP 或 UDP 端口)。

    • 它来自 SQL 节点或 API 节点的 IP 地址。


    任何不在表格中显示的流量都应该被拒绝。

    防火墙应用程序的配置细节超出了本手册的范围。iptables 是一个非常常见且可靠的防火墙应用程序,通常与 APF 结合使用,以便更容易配置。如果您选择实施这种类型的 NDB 集群网络设置,或者混合类型的网络设置,请务必查看您所使用的软件防火墙的文档。

  3. 另一种可能性是使用硬件防火墙和软件防火墙的组合来保护集群——这在安全级别和成本之间提供了一个折衷方案。这种网络设置将集群置于硬件防火墙之后,但允许入站数据包到达 SQL 节点。

    使用硬件防火墙和软件防火墙组合的 NDB 集群网络部署示例如下:

    图 25.9 使用硬件防火墙和软件防火墙的 NDB 集群

    Content is described in the surrounding text.

    在这种情况下,您可以在硬件防火墙中设置规则,以拒绝所有外部流量,除了 SQL 节点和 API 节点,并且只允许流量到达应用程序所需的端口。

无论您使用什么网络配置,记住您的目标始终是防止不必要的流量到达集群,同时确保集群中的节点之间的通信尽可能高效。

由于 NDB 集群需要打开大量端口以便节点之间的通信,因此推荐的选项是使用隔离的网络。这是防止不必要流量到达集群的最简单方式。

Note

如果您想远程管理 NDB 集群(即从本地网络外部),推荐的方式是使用 ssh 或其他安全登录 shell 来访问 SQL 节点主机。从这个主机,您可以安全地访问管理服务器,使用管理客户端,从集群的本地网络内部。

虽然从理论上讲这是可能的,但是不推荐使用 使用ndb_mgm 直接从集群所在的本地网络外部管理集群。由于在管理客户端和管理服务器之间没有身份验证或加密,这种方式非常不安全,几乎肯定会被攻破。