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