25.6.21.1 NDB 集群安全性和网络问题
在本节中,我们讨论了与 NDB 集群相关的基本网络安全问题。请记住,NDB 集群出厂时是没有安全性的;你或你的网络管理员必须采取适当措施来确保集群不会通过网络被破坏。
集群通信协议本身是不安全的,没有在节点之间的通信中使用加密或类似的安全措施。由于网络速度和延迟对集群效率有直接影响,因此也不建议在节点之间的网络连接上使用 SSL 或其他加密方案,因为这些方案会导致通信变慢。
同样,没有用于控制 API 节点访问 NDB 集群的身份验证。正如加密一样,要求身份验证将对集群性能产生负面影响。
此外,对于以下两种情况,当访问集群时,也没有检查源 IP 地址:
-
使用 “空闲插槽” 由空的
[mysqld]
或[api]
部分在config.ini
文件中创建的 SQL 或 API 节点这意味着,如果
config.ini
文件中有任何空的[mysqld]
或[api]
部分,那么知道管理服务器主机名(或IP地址)和端口的所有API节点(包括SQL节点)可以连接到集群并无限制地访问其数据。(查看第25.6.21.2节,“NDB集群和MySQL权限”,了解更多关于此类问题的信息。)Note您可以通过在
config.ini
文件中为所有[mysqld]
和[api]
部分指定一个HostName
参数来对SQL和API节点对集群的访问进行一些控制。然而,这也意味着,如果您希望将API节点从以前未使用的主机连接到集群,您需要在config.ini
文件中添加一个包含其主机名的[api]
部分。有关
HostName
参数的更多信息,请参阅本章节其他地方。另外,查看第25.4.1节,“NDB集群快速测试设置”,了解如何使用HostName
参数配置API节点的示例。 -
任何ndb_mgm客户端
这意味着任何给定管理服务器主机名(或IP地址)和端口(如果不是标准端口)的集群管理客户端都可以连接到集群并执行任何管理客户端命令。这包括像
ALL STOP
和SHUTDOWN
这样的命令。
因此,为了保护集群,我们需要在网络层面上采取措施。对于Cluster来说,最安全的网络配置是将Cluster节点与其他网络通信隔离。这可以通过以下任何方法实现:
-
将Cluster节点放在一个不接触公网的物理网络中。这一选项最为可靠,但也是实施成本最高的。
我们在这里展示了使用这样的物理隔离网络的NDB Cluster设置示例:
这个设置有两个网络,一個私人(实线框)用于Cluster管理服务器和数据节点,另一个是公网(点线框),SQL节点位于其中。我们将管理和数据节点连接到以太网交换机上,因为这提供了最佳的性能。两者都由硬件防火墙保护,这也被称为网络基于的防火墙。
这种网络设置是最安全的,因为没有任何数据包可以从外部网络到达集群的管理或数据节点——而且集群内部的所有通信都不能到达外部——除非通过SQL节点,这一前提下,SQL节点必须不允许任何数据包被转发。这意味着,当然,所有的SQL节点都必须对抗黑客攻击。
Important关于潜在的安全漏洞,一个SQL节点和任何其他MySQL服务器没有区别。请参阅第8.1.3节,“如何保护MySQL免受攻击”,了解如何保护MySQL服务器不受攻击。
-
使用一或多个软件防火墙(也称为主机基于的防火墙)来控制哪些数据包可以通过到达不需要访问集群的网络部分。这种类型的设置中,必须在每个可能从外部网络访问的集群主机上安装软件防火墙。
主机基于的选项是最经济实惠的实现方式,但完全依赖于软件提供保护,因此保持安全性相对较为困难。
NDB集群的这种网络设置示例如下:
使用这种网络设置意味着有两个NDB集群主机区域。每个集群主机必须能够与所有其他集群机器通信,但只有运行SQL节点(点线框)的主机才能允许与外部的联系,而那些位于包含数据节点和管理节点(实线框)区域的主机则必须与非集群机器隔离。使用集群的应用程序及其用户不得直接访问管理和数据节点主机。
为了实现这一点,您必须设置软件防火墙,以限制流量类型或类型,如下表所示,根据每台集群主机计算机上运行的节点类型:
表25.40 节点类型在主机基于防火墙集群配置中
Node Type Permitted Traffic SQL or API node -
It originates from the IP address of a management or data node (using any TCP or UDP port).
-
It originates from within the network in which the cluster resides and is on the port that your application is using.
Data node or Management node -
It originates from the IP address of a management or data node (using any TCP or UDP port).
-
It originates from the IP address of an SQL or API node.
除了表格中为给定节点类型显示的流量之外,所有其他流量都应被拒绝。
配置防火墙的具体细节因防火墙应用程序而异,这些内容超出了本手册的范围。iptables 是一种非常常见且可靠的防火墙应用程序,经常与 APF 一起使用,以简化配置。您可以(并应该)查阅您所使用软件防火墙的文档,如果您决定实施一个类似于NDB集群网络设置的混合类型设置,或者讨论在下一项中提到的“混合”类型设置。
-
-
还有可能采用两种方法的组合,使用硬件和软件来保护集群——即既使用网络防火墙又使用主机防火墙。这在安全性水平和成本上介于前两种方案之间。这种网络设置将集群放在硬件防火墙后面,但允许来自连接所有集群主机的路由器的入站数据包穿过并到达SQL节点。
使用硬件和软件防火墙组合的一个可能的NDB集群网络部署示例如下:
在这种情况下,您可以将硬件防火墙设置为拒绝任何外部流量,除了SQL节点和API节点之外,然后只允许它们通过所需的端口进行通信。
无论您使用哪种网络配置,都要记住,从安全角度保护集群的目标始终是一致的——防止非必要的流量到达集群,同时确保节点之间的通信效率。
由于NDB集群需要打开大量端口进行节点之间的通信,因此推荐使用隔离网络。这是防止不必要流量到达集群的最简单方法。
如果您希望远程管理NDB集群(即从本地网络之外),推荐的方法是使用ssh或其他安全的登录壳来访问SQL节点主机。从这个主机,您可以运行管理客户端以安全地访问管理服务器,且在集群自己的本地网络内。
尽管理论上是可能的,但使用ndb_mgm直接从集群运行的网络之外管理集群是不推荐的。由于管理客户端和管理服务器之间既无身份验证也无加密,这种方式在管理集群时极其不安全,几乎肯定会被破坏。