在本節中,我們將討論與 NDB 叢集相關的基本網路安全問題。務必記住,NDB 叢集“開箱即用”並非安全;您或您的網路管理員必須採取適當的步驟,以確保您的叢集不會透過網路遭到入侵。
叢集通訊協定本質上是不安全的,並且叢集中節點之間的通訊不使用加密或類似的安全措施。由於網路速度和延遲會直接影響叢集的效率,因此不建議在節點之間的網路連線上使用 SSL 或其他加密方式,因為這種方案會導致通訊速度變慢。
此外,沒有使用任何驗證機制來控制 API 節點對 NDB 叢集的存取權。與加密一樣,實施驗證要求的額外負擔會對叢集效能產生不利影響。
此外,在存取叢集時,以下兩者都不會檢查來源 IP 位址
SQL 或 API 節點使用 “可用插槽”,這些插槽是由
config.ini
檔案中空的[mysqld]
或[api]
區段建立的這表示,如果
config.ini
檔案中有任何空的[mysqld]
或[api]
區段,則任何知道管理伺服器主機名稱(或 IP 位址)和連接埠的 API 節點(包括 SQL 節點)都可以連線到叢集並無限制地存取其資料。(請參閱第 25.6.21.2 節「NDB 叢集和 MySQL 權限」,以取得有關此問題和相關問題的詳細資訊。)注意您可以藉由在
config.ini
檔案中,為所有[mysqld]
和[api]
區段指定HostName
參數,來對 SQL 和 API 節點存取叢集進行一些控制。但是,這也表示,如果您希望從先前未使用的主機將 API 節點連線到叢集,則需要將包含其主機名稱的[api]
區段新增至config.ini
檔案。關於
HostName
參數的詳細資訊,請參閱本章的其他部分。另請參閱第 25.4.1 節「NDB 叢集快速測試設定」,以取得使用 API 節點搭配HostName
的組態範例。任何 ndb_mgm 用戶端
這表示,任何獲得管理伺服器主機名稱(或 IP 位址)和連接埠(如果不是標準連接埠)的叢集管理用戶端都可以連線到叢集,並執行任何管理用戶端命令。這包括諸如
ALL STOP
和SHUTDOWN
之類的命令。
基於這些原因,有必要在網路層級保護叢集。叢集最安全的網路組態是將叢集節點之間的連線與任何其他網路通訊隔離。這可以透過以下任何一種方法來完成
將叢集節點保留在與任何公用網路實體隔離的網路上。此選項最可靠;但是,其部署成本最高。
我們在這裡展示使用這種實體隔離網路的 NDB 叢集設定範例
此設定有兩個網路,一個是私有網路(實線方塊),用於叢集管理伺服器和資料節點,另一個是公用網路(虛線方塊),其中駐留著 SQL 節點。(我們顯示使用 Gigabit 交換器連線的管理和資料節點,因為這樣可以提供最佳效能。)這兩個網路都受到硬體防火牆的保護,硬體防火牆有時也稱為網路型防火牆。
此網路設定最安全,因為在沒有通過 SQL 節點的情況下,外部沒有任何封包可以到達叢集的管理或資料節點,叢集的內部通訊也沒有任何封包可以到達外部,前提是 SQL 節點不允許轉發任何封包。當然,這表示所有 SQL 節點都必須受到保護,以防範駭客入侵。
重要事項關於潛在的安全漏洞,SQL 節點與任何其他 MySQL 伺服器沒有什麼不同。請參閱第 8.1.3 節「保護 MySQL 免受攻擊」,其中說明您可以用來保護 MySQL 伺服器的技術。
使用一個或多個軟體防火牆(也稱為主機型防火牆)來控制哪些封包從不需要存取叢集的網路部分傳遞到叢集。在這種設定中,必須在叢集中每個主機上安裝軟體防火牆,否則這些主機可能會從本機網路外部存取。
主機型選項的部署成本最低,但完全依賴軟體來提供保護,因此最難以保持安全。
NDB 叢集的這種網路設定會在此處說明
使用這種網路設定表示 NDB 叢集主機有兩個區域。每個叢集主機都必須能夠與叢集中的所有其他電腦進行通訊,但是只有託管 SQL 節點的主機(虛線方塊)才能與外部進行任何接觸,而位於包含資料節點和管理節點的區域(實線方塊)中的主機必須與任何不是叢集一部分的電腦隔離。使用叢集的應用程式和這些應用程式的使用者不得被允許直接存取管理和資料節點主機。
為此,您必須根據在每個叢集主機電腦上執行的節點類型,設定軟體防火牆來限制流量,使其只能符合下表所示的類型
表 25.40 主機型防火牆叢集組態中的節點類型
節點類型 允許的流量 SQL 或 API 節點 它源自管理或資料節點的 IP 位址(使用任何 TCP 或 UDP 連接埠)。
它源自叢集所在的網路內部,並且位於應用程式正在使用的連接埠上。
資料節點或管理節點 它源自管理或資料節點的 IP 位址(使用任何 TCP 或 UDP 連接埠)。
它源自 SQL 或 API 節點的 IP 位址。
除了表中針對特定節點類型顯示的流量外,應拒絕任何其他流量。
設定防火牆的具體方式會因防火牆應用程式而異,這超出本手冊的範圍。 iptables 是一個非常常見且可靠的防火牆應用程式,通常與 APF 搭配使用,作為前端,以簡化組態。如果您選擇實施此類 NDB 叢集網路設定,或實施如下一項所述的“混合”類型設定,您可以(而且應該)查閱您使用的軟體防火牆的文件。
也可以結合使用前兩種方法,同時使用硬體和軟體來保護叢集,也就是同時使用網路型和主機型防火牆。就安全層級和成本而言,這介於前兩個方案之間。這種網路設定會將叢集保留在硬體防火牆後面,但允許傳入的封包通過連接所有叢集主機的路由器,到達 SQL 節點。
以下顯示使用硬體和軟體防火牆組合的 NDB 叢集的一種可能網路部署方式
在這種情況下,您可以設定硬體防火牆中的規則,以拒絕除了 SQL 節點和 API 節點以外的任何外部流量,然後僅允許通過應用程式所需的連接埠傳輸至它們的流量。
無論您使用哪種網路組態,請記住,從保持叢集安全性的角度來看,您的目標仍然是相同的,即防止任何不必要的流量到達叢集,同時確保叢集中節點之間最有效的通訊。
由於 NDB 叢集需要大量連接埠保持開啟,以便在節點之間進行通訊,因此建議的選項是使用隔離網路。這是防止不必要的流量到達叢集的最簡單方法。
如果您希望遠端管理 NDB Cluster (也就是從本機網路外部管理),建議的方式是使用 ssh 或其他安全登入 shell 來存取 SQL 節點主機。從這部主機,您就可以在叢集本身的本機網路內,安全地執行管理用戶端來存取管理伺服器。
即使理論上可以這麼做,但不建議直接從執行叢集的本機網路外部使用 ndb_mgm 來管理叢集。由於管理用戶端和管理伺服器之間不會進行驗證或加密,這代表一種極不安全的叢集管理方式,而且幾乎肯定遲早會遭到入侵。