Redis 怎樣保證數據安全?

問題:Redis 默認是沒有設置密碼

調研:Redis 默認沒有設置密碼是因爲它的設計目標是追求高性能和低延遲。

當 Redis 配置文件中啓用密碼後,客戶端連接 Redis 時需要進行密碼驗證。這個驗證過程會增加 CPU 的負載,並可能導致鏈接響應時間變長,從而影響整體系統性能。特別是在處理大量併發連接時,密碼驗證可能會成爲系統的瓶頸。此外,如果 Redis 和客戶端位於不同的機器上,並且兩者之間的網絡延遲較高,密碼驗證的時間也會增加,進一步影響連接速度。

在默認情況下,Redis 假設運行在受信任的環境中,例如內部網絡或受限制的訪問環境中。因此,密碼認證的額外開銷可能會影響其性能表現。

子問題:那爲什麼 Redis 要支持設置密碼呢?

調研:Redis 的作者認爲,對於需要訪問 Redis 的人員應該具有足夠的權限和訪問控制,以保證系統的安全性。如果 Redis 服務器部署在沒有合適保護措施的公共網絡上,或者需要加強對未經授權訪問的防範,建議使用密碼進行身份驗證。

測試:redis 啓動配置中增加 requirepass,設置密碼,測試性能和不設置基本沒有區別。 

分析:通過測試可觀察到在毫秒級的測試精度下,加密碼和不加密碼性能幾乎沒有區別。建議新建集羣直接採用加密碼的方式。對之前有業務的集羣咱們後面再分析。

問題:Redis 除了密碼認證,還有哪些措施可以保證其安全性?

方案 1:修改綁定地址:默認情況下,Redis 只綁定到本地迴環地址(127.0.0.1)。您可以更改 bind 指令,讓 Redis 監聽其他網絡接口。例如,要將 Redis 綁定到所有可用接口,您可以將其更改爲:

bind 0.0.0.0

要指定某些 IP,也只需要綁定特定 IP 即可,可參考下面官方註釋:

但這樣,應用要增加部署機器,擴容時,就要手動修改配置,很麻煩了。

方案 2:使用防火牆:確保您的服務器防火牆規則只允許受信任的 IP 地址、者地址段、端口訪問 Redis 端口。因爲本身對於其他應用也需要設置嚴格的防火牆策略,各個大廠都在做防火牆策略收斂,強烈推薦此方式。

其他一些通用安全防禦方案,可參考之前寫的《紅藍攻防、紅藍對抗》。下面來說一下,如果 redis 老集羣沒有密碼要改成需要密碼,做平滑升級,需要哪些步驟:

1、新建集羣 B,設置連接需要密碼,區別於原來的老集羣 A 不需要密碼

2、客戶端做雙寫,老集羣 A 和新集羣 B 的數據同步更新

3、同步老集羣 A 的歷史數據到新集羣 B,並進行數據一致性校驗

4、灰度發佈客戶端改成使用新集羣 B。

從上面步驟可以看出,成本還是蠻高的。必要性有多少呢?這樣來看,咱們數據庫連接都是要用戶名密碼的,因爲一個數據庫建議只有一個應用來連,知道密碼的人是有限的。而且數據庫密碼一般都是加密的。

而 redis 密碼是明文寫在配置文件中的,如果內網被攻破了,黑客可以直接訪問配置文件,密碼意義還大嗎?本身 redis 集羣是公用基礎設施,可能一個公司就一套集羣,這意味着所有開發都需要知道用戶名密碼,範圍這麼大了,密碼的意義還大嗎?

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/FcNw9nlfnQGQSEaSw9GC8A