1. 程式人生 > 其它 >redis 安全漏洞防禦

redis 安全漏洞防禦

技術標籤:Javaredisjavaredisredis安全

redis 安全漏洞防禦

一、埠安全(限制客戶端ip以及修改密碼)

  1. 置redis密碼
    在這裡插入圖片描述
    找到requirepass,設定新的密碼
  2. 將 redis 啟動在 127.0.0.1 上
    在這裡插入圖片描述
    一般建議方案是將 redis 啟動在 127.0.0.1 上
    但是這種方式不能跨伺服器訪問,一般方式是將 Redis 放到內網,防止公網檢測。如果服務部署在公有云上,需要對 Redis 伺服器設定防火牆
    redis設定防火牆本人還需要再找一些其它的資料
  3. 同時可以修改埠號:可修改也可不修改
    二、指令安全
    使用者建立連線後可能執行 flushdb 之類的指令清空 Redis 記憶體資料庫,雖然已經通過配置 bind 或者 requirepass 配置項阻斷了惡意使用者與線上 Redis 服務建立連線的可能,但是如果是自己不小心在線上 Redis 中執行了 flushdb 指令呢,這個是有可能出現的,就像 MySQL 中的誤刪除一樣。
    為了規避這個問題,我們可以在 Redis 服務端配置檔案中通過 rename-command 配置項對這種危險指令進行重新命名:
  4. 指令重新命名
rename flushdb flush_this_db
rename flushall flush_all_dbs
  1. 如果你覺得這些命令實在不安全,還可以通過如下方式將其徹底禁用:
rename flushdb ""
rename flushall ""

也可以在配置檔案中新增如下語句


三、 記憶體使用與寫入頻率限制

  1. 記憶體限制和淘汰策略
    先在 Redis 服務端配置檔案 redis.conf 中通過 maxmemory 配置項配置 Redis 可用的伺服器記憶體上限
# maxmemory <bytes>

這個配置項預設是註釋起來的,說明沒有做限制,隨著 Redis 佔用記憶體的飆升最終會導致伺服器記憶體耗盡,進而導致部署在這臺機器的其他服務,比如資料庫、Web 應用等不可用。一般而言,如果這臺機器只部署了 Redis 服務,可將其配置為系統記憶體總量的 80%,否則的話根據其他服務佔用記憶體的情況酌情進行分配即可。
假如我們的機器只用來部署一個 Redis 例項,那麼大概留個 1 GB 的記憶體資源來支撐系統本身的執行即可。
但是如果我們部署多個 Redis 例項,或者還要部署其他系統,那麼就要好好計算一翻了;如果設定的最大可用記憶體過大了,就會導致 Redis 例項因為記憶體不足而崩潰了。


2. 配置maxmemory-policy
置了 maxmemory 後,一般還要配置 maxmemory-policy 配置項,用於設定 Redis 記憶體使用量到達上限後的記憶體清理策略,目前支援以下策略選項

  • noeviction:當 Redis 可用記憶體不足以存放新寫入資料時,新寫入操作會報錯;
  • allkeys-lru:當 Redis 可用記憶體不足以存放新寫入資料時,移除最近最少使用的 key;
  • allkeys-random:當 Redis 可用記憶體不足以存放新寫入資料時,隨機移除某個 key;
  • volatile-lru:當 Redis 可用記憶體不足以存放新寫入資料時,在設定了過期時間的 key 中,移除最近最少使用的 key;
  • volatile-random:當 Redis 可用記憶體不足以存放新寫入資料時,在設定了過期時間的 key 中,隨機移除某個 key;
  • volatile-ttl:當 Redis 可用記憶體不足以存放新寫入資料時,在設定了過期時間的 key 中,優先移除即將要過期的 key。
    通常,我們會選擇基於 LRU 淘汰演算法的記憶體清理策略,比如 allkeys-lru,關於 Redis LRU 淘汰演算法,後面在 Redis 底層原理篇我會詳細介紹。