簡體   English   中英

如何保護Redis群集?

[英]How to secure Redis Cluster?

我知道Redis Cluster仍然不穩定,但是很久以來它已經通過了所有的單元測試,所以我開始使用它。

我想知道如果節點需要身份驗證,Redis群集是否能正常工作。 我傾向於認為是,因為它們通過不同的端口連接並使用不同的協議,但我不確定,也無法在規范中找到任何文檔或任何內容來確認這一點。

此外,如果redis群集協議飛過身份驗證障礙,那么它不是安全漏洞嗎? 我的數據庫可以被外界訪問嗎? (該端口至少必須是可訪問的,以便它可以與其他節點通信)

SSH隧道可能是一個簡單的解決方案:

  1. 您不需要將redis端口暴露給外部世界。 只有ssh一個。
  2. SSH支持數據壓縮,可以減少數據中心之間的傳輸。

快速示例: ssh -f -L 1234:localhost:6379 server.com -NC

這會將任何傳入連接到localhost:1234路由到遠程server.com:6379。 因此,您可以在redis配置文件中將local.com:6379替換為localhost:1234。

您可以查看man ssh以獲取更多信息。

如果任何協議通過互聯網飛行,您將需要加密(“ssl”),例如跨數據中心。 這通常會影響性能。 在Redis的當前安全規范中 -

http://redis.io/topics/security

建議不支持ssl,您需要SSL代理。 這通常會導致系統性能下降,例如您必須考慮的延遲。

理想情況下,群集節點應該位於同一位置。 如果它們不能,那么集群的設計應該限制跨站點數據傳輸,或者在沒有任何實時約束的情況下離線。

我還選擇在每個節點的基礎上禁用/啟用命令(請參閱上面的安全規范中的詳細信息)。 我不確定它是否在群集模式下受支持。

由於Redis在群集中的運行方式,因此無法使用具有SSL的Redis群集。

要使SSL在Redis部署中工作,您需要安裝和配置stunnel或隧道應用程序。

從Redis文檔:請注意,要使Redis群集正常工作,您需要為每個節點:用於與客戶端通信的普通客戶端通信端口(通常為6379),以便向需要訪問群集的所有客戶端開放,以及所有其他群集節點(使用客戶端端口進行密鑰遷移)。 必須可以從所有其他群集節點訪問群集總線端口(客戶端端口+ 10000)。

您可以將stunnel配置為在某個端口接收流量,並將流量重定向到6379或redis-server正在偵聽的任何其他端口。 在集群模式下,redis-server宣布其“cluster_port”,以便客戶端和其他節點可以連接到與其連接的此端口。 如果覆蓋設置“cluster_announce_port”,則ssl-clients將成功連接到節點,但是redis-cli和cluster_port上的節點間通信將失敗。

似乎AWS ElastiCache / Redis Enterprise支持帶集群的SSL,但不支持Open Source Redis。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM