Redis 是一個高效能 內存數據庫,廣泛應用,但基本上並未強化安全性。尤其是通過網路訪問時,錯誤的設定可能導致 數據洩露、黑客攻擊、服務故障等問題的發生。

在這篇文章中,我將為初學者解釋如何 加強 Redis 的網路安全以及主要設定。為了安全運行 Redis,讓我們逐一檢視 需要確認的設定

1. 限制 Redis 無法從外部訪問

✅ 1-1. 僅允許特定 IP 訪問 (bind 設定)

Redis 預設為 可以接受所有網路介面的連接。 也就是說,假如沒有任何設定,任何人都有可能訪問 Redis 伺服器。

為了防止這種情況,必須透過 bind 設定來限制 僅接受特定 IP 地址的訪問

📌 例子:僅允許本地(127.0.0.1)訪問
bind 127.0.0.1 -::1

如上述設定,只有在同一伺服器上執行的客戶端才能訪問 Redis。

📌 如果需要外部 IP 訪問呢?

如果還需要從外部 IP 訪問,可以設定僅允許特定 IP。

bind 192.168.1.100 10.0.0.1

這樣即可讓 192.168.1.100 和 10.0.0.1 兩個 IP 僅能訪問 Redis。

✅ 1-2. 啟用保護模式 (protected-mode)

Redis 提供 保護模式 功能來加強安全性。當保護模式啟用時,將無法在沒有密碼的情況下從外部訪問。

📌 啟用保護模式
protected-mode yes

這樣設定後,Redis 僅在127.0.0.1(本地)能夠訪問

2. Redis 的網路端口和連接限制

✅ 2-1. 設定 Redis 接收的端口 (port)

Redis 預設在 6379端口上運行。

port 6379

如果想要僅使用 Unix socket 而非 TCP socket,可將端口設定為 0。

port 0

✅ 2-2. 僅允許特定端口通信 (bind-source-addr)

Redis 的 發送連接(副本連接到主控、集群間通信等)預設不會綁定於特定網路介面。

bind-source-addr 10.0.0.1

如此設定後,Redis 僅透過 10.0.0.1 介面與外部 Redis 伺服器通信

3. 確保網路連接穩定的設定

✅ 3-1. TCP 連接等待序列大小 (tcp-backlog)

tcp-backlog 511

🔹 處理高流量的伺服器最佳將此值設定為 1,024 或 4,096

✅ 3-2. 客戶端非活動時間 (timeout)

timeout 300

如果客戶端在 5 分鐘內沒有任何操作,連接將自動終止。

4. 增加安全性的額外設定

✅ 4-1. 阻止危險指令 (enable-debug-command)

某些 Redis 命令(DEBUGMODULE LOAD 等)可能在安全上存在風險。

enable-debug-command no
enable-module-command no

如此設定後,將無法執行潛在危險的指令

5. 總結:Redis 網路安全設定檢查清單

  • ✔ 僅允許特定 IP 訪問 Redis (bind)
  • ✔ 啟用保護模式(protected-mode)以阻擋外部訪問
  • ✔ 設定 TCP 端口 (port)限制不必要的訪問
  • ✔ 設定客戶端非活動計時器 (timeout)以阻擋閒置連接
  • ✔ 設定 Keepalive (tcp-keepalive)以保持網路連接
  • ✔ 阻止危險指令 (enable-debug-command no)以增強安全性

Redis 是一個網路安全至關重要的數據庫。 仔細應用上述設定可預防黑客攻擊和數據洩露! 如果你正在運行 Redis 伺服器,立即檢查你的安全設定。 🔐🚀

Redis network security settings