文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  NDB Cluster 安全性和网络问题

25.6.21.1 NDB Cluster 安全性和网络问题

在本节中,我们将讨论与 NDB Cluster 相关的基本网络安全问题。请务必牢记,NDB Cluster 开箱即用 并非安全;您或您的网络管理员必须采取适当的措施来确保您的集群不会通过网络被入侵。

集群通信协议本质上是不安全的,在集群节点之间的通信中不使用任何加密或类似的安全措施。由于网络速度和延迟会直接影响集群的效率,因此不建议对节点之间的网络连接使用 SSL 或其他加密,因为此类方案会导致通信速度变慢。

同样,也不使用任何身份验证来控制 API 节点对 NDB Cluster 的访问。与加密一样,实施身份验证要求会对集群性能产生不利影响。

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

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

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

    注意

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

    有关 HostName 参数的更多信息,请参阅 本章的其他部分。另请参阅 第 25.4.1 节,“NDB Cluster 的快速测试设置”,了解使用 API 节点的 HostName 的配置示例。

  • 任何 ndb_mgm 客户端

    这意味着,任何被赋予管理服务器的主机名(或 IP 地址)和端口(如果端口不是标准端口)的集群管理客户端都可以连接到集群并执行任何管理客户端命令。这包括 ALL STOPSHUTDOWN 等命令。

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

  1. 将集群节点置于与任何公共网络物理隔离的网络上。此选项最可靠;但是,实施成本最高。

    下面展示了使用此类物理隔离网络的 NDB Cluster 设置示例:

    图 25.7 带有硬件防火墙的 NDB Cluster

    Content is described in the surrounding text.

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

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

    重要

    关于潜在的安全漏洞,SQL 节点与任何其他 MySQL 服务器没有区别。有关用于保护 MySQL 服务器的技术描述,请参阅 第 8.1.3 节,“使 MySQL 抵御攻击者的攻击”

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

    基于主机的选项实施成本最低,但完全依赖软件来提供保护,因此最难保持安全。

    下面展示了这种类型的 NDB Cluster 网络设置:

    图 25.8 带有软件防火墙的 NDB Cluster

    Content is described in the surrounding text.

    使用这种类型的网络设置意味着 NDB Cluster 主机有两个区域。每个集群主机都必须能够与集群中的所有其他机器通信,但只有托管 SQL 节点的机器(虚线框)才允许与外部进行任何联系,而包含数据节点和管理节点的区域中的机器(实线框)必须与任何不是集群一部分的机器隔离开来。使用集群的应用程序以及这些应用程序的用户必须 不能被允许直接访问管理和数据节点主机。

    要实现这一点,您必须设置软件防火墙,根据每个集群主机计算机上运行的节点类型,将流量限制为以下表格中显示的类型或类型:

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

    节点类型 允许的流量
    SQL 或 API 节点
    • 它来自管理节点或数据节点的 IP 地址(使用任何 TCP 或 UDP 端口)。

    • 它来自集群所在的网络内部,并且位于您的应用程序正在使用的端口上。

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

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


    对于给定节点类型,表格中未显示的任何流量都应该被拒绝。

    配置防火墙的具体细节因防火墙应用程序而异,超出了本手册的范围。 iptables 是一种非常常见且可靠的防火墙应用程序,通常与 APF 一起使用作为前端以简化配置。如果您选择实施这种类型的 NDB Cluster 网络设置或在下一项中讨论的 混合 类型,则可以(并且应该)参考您所使用的软件防火墙的文档。

  3. 您也可以结合使用前两种方法,同时使用硬件和软件来保护集群——也就是说,同时使用基于网络的防火墙和基于主机的防火墙。这在安全性级别和成本方面都介于前两种方案之间。这种类型的网络设置将集群置于硬件防火墙之后,但允许传入数据包越过连接所有集群主机的路由器以到达 SQL 节点。

    下面展示了使用硬件和软件防火墙相结合的 NDB Cluster 的一种可能的网络部署:

    图 25.9 带有硬件和软件防火墙组合的 NDB Cluster

    Content is described in the surrounding text.

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

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

由于 NDB Cluster 需要打开大量端口才能在节点之间进行通信,因此推荐的选项是使用隔离网络。这代表了防止不必要的流量到达集群的最简单方法。

注意

如果您希望远程管理 NDB Cluster(即从本地网络外部管理),建议使用 ssh 或其他安全登录 shell 来访问 SQL 节点主机。然后,您可以从该主机运行管理客户端,安全地从集群自己的本地网络内部访问管理服务器。

即使在理论上可以做到,但 建议使用 ndb_mgm 直接从运行集群的本地网络外部管理集群。由于管理客户端和管理服务器之间不进行身份验证或加密,因此这是一种极其不安全的管理集群方法,几乎肯定会迟早被入侵。