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