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