文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙尺寸) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (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 位址

  • SQL 或 API 節點使用 空閒插槽,這些插槽是由 config.ini 檔案中空的 [mysqld][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 的快速測試設定」,其中包含使用 HostName 和 API 節點的組態範例。

  • 任何 ndb_mgm 用戶端

    這表示,任何被授予管理伺服器主機名稱 (或 IP 位址) 和連接埠 (如果不是標準連接埠) 的叢集管理用戶端都可以連接到叢集並執行任何管理用戶端命令。這包括諸如 ALL STOPSHUTDOWN 等命令。

基於這些原因,必須在網路層級保護叢集。叢集最安全的網路組態是將叢集節點之間的連線與任何其他網路通訊隔離的組態。這可以使用下列任何方法達成

  1. 將叢集節點保留在與任何公用網路實體分離的網路上。此選項最可靠;但是,實施成本最高。

    我們在這裡顯示使用此類實體隔離網路的 NDB Cluster 設定範例

    圖 25.7 具有硬體防火牆的 NDB Cluster

    Content is described in the surrounding text.

    此設定有兩個網路,一個是專用的 (實線框),用於叢集管理伺服器和資料節點,一個是公用的 (虛線框),用於 SQL 節點所在的位置。(我們顯示使用 Gigabit 交換器的連接管理和資料節點,因為這樣可以提供最佳效能。) 這兩個網路都受到硬體防火牆的保護,有時也稱為 網路型防火牆

    此網路設定最安全,因為除非經過 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 叢集的一種可能的網路配置

    圖 25.9:結合硬體和軟體防火牆的 NDB 叢集

    Content is described in the surrounding text.

    在這種情況下,您可以在硬體防火牆中設定規則,拒絕除了 SQL 節點和 API 節點之外的任何外部流量,然後僅允許您的應用程式所需的連接埠上的流量進入它們。

無論您使用何種網路配置,請記住,從保持叢集安全的角度來看,您的目標仍然相同:防止任何不必要的流量到達叢集,同時確保叢集中節點之間最有效的通訊。

由於 NDB 叢集需要開放大量連接埠才能在節點之間進行通訊,因此建議的選項是使用隔離網路。這是防止不必要的流量到達叢集的最簡單方法。

注意

如果您希望遠端管理 NDB 叢集(即從本機網路外部),建議的方法是使用 ssh 或其他安全登入 shell 來存取 SQL 節點主機。從此主機,您可以執行管理用戶端,從叢集自身的本機網路內安全地存取管理伺服器。

即使理論上可以這樣做,但建議使用 ndb_mgm 直接從叢集正在執行的本機網路外部管理叢集。由於管理用戶端和管理伺服器之間沒有進行身份驗證或加密,這是一種極不安全的叢集管理方法,幾乎肯定遲早會被入侵。