返回部落格

如何在 Ubuntu 18.04 上安裝與保護 Redis

如何在 Ubuntu 18.04 上安裝與保護 Redis

Redis 是一款功能強大的記憶體內鍵值儲存,可用作資料庫伺服器、快取和訊息代理。它以其快速的效能、靈活性以及對多種語言的支援而聞名。它是免費且開源的軟體,使用 C 程式語言 撰寫。在本指南中,我們將介紹如何在 Ubuntu 18.04 上安裝和保護 Redis。

先決條件

為了遵循本指南,您需要提前準備幾件事。您需要有一個 Ubuntu 18.04 伺服器,您可以按照我們的教學輕鬆安裝。此外,您需要有一個具有 sudo 權限的非 root 使用者,並配置了基本防火牆。您可以按照我們關於 配置 Linux sudoers 檔案在 Ubuntu 和 Debian 雲端伺服器上設定 UFW

的指南進行設定。現在,讓我們開始吧!

安裝 Redis

Redis 可以直接從官方的 Ubuntu 軟體庫中取得。這是安裝和配置它最簡單的方法。除非有特定原因,否則我們建議採用此方法。由於 Redis 原始碼是免費提供的,因此也可以從原始碼建置 Redis。但是,我們不推薦這樣做,因為管理和更新它會更麻煩。

從 Ubuntu 軟體庫安裝 Redis

首先,更新本地 APT 套件快取:

接下來,使用以下指令安裝 Redis:

從原始碼安裝 Redis

Ubuntu 預設不包含建置工具和必要的函式庫。以下指令將安裝建置 Redis 所需的所有工具:

建置 Redis 還有兩個額外的相依性。這些相依性是使用額外功能(例如 TLS 支援、systemd 整合等)編譯 Redis 所必需的。要編譯支援 TLS 的 Redis,請安裝「libssl-dev」套件。要編譯支援 systemd 的 Redis,請安裝「libsystemd-dev」套件:

Redis 原始碼可在 GitHub 上取得。請查看 Redis GitHub 頁面。接下來,獲取原始碼:

Redis GitHub page

將目前的工作目錄切換到 Redis 原始碼目錄:

之後,執行 make 工具開始編譯。它將在不包含任何額外元素的情況下編譯 Redis:

要啟用 TLS 支援(假設已安裝「libssl-dev」),請改用以下指令:

要啟用對 systemd 的支援(假設已安裝「libsystemd-dev」),請使用以下指令:

接下來,測試編譯是否成功。請注意,執行測試可能需要額外的套件「tcl-dev」和相關的相依性:

最後,執行以下指令安裝 Redis:

如果 Redis 是使用 TLS 建置的,則必須以以下方式執行伺服器:

配置 Redis

安裝完成後,就可以配置 Redis 了。在文字編輯器中開啟 Redis 配置檔案,然後向下捲動到「supervised」區段:

secure redis 1

將「supervised」的值更改為「systemd」。這將確保 Redis 服務由系統管理。要使變更生效,請重新啟動 Redis 服務:

測試 Redis

在進一步使用 Redis 之前,測試其是否正常運作總是一個好主意。以下是幾種測試 Redis 行為的方法。第一步是檢查 Redis 服務是否已啟動並正在執行:

此處 Redis 已經在運行。預設情況下,Redis 服務將在開機時啟動。如果要手動運行 Redis 服務,請將其停用:

下一個測試是使用 Redis 主控台進行檢查。啟動 Redis 命令列用戶端:

執行「ping」命令:

輸出確認與伺服器的連線仍然存活。下一個測試是查看它是否允許設定鍵。建立一個值為「hello world」的「temp」鍵:

使用「get」命令檢索該值:

如果到目前為止一切正常,Redis 應該會毫無問題地傳回該鍵的值。關閉 Redis 命令列用戶端:

Redis command-line

最後一個測試是檢查 Redis 是否能在停止或重新啟動後仍持久化資料。重新啟動 Redis 服務:

如果在執行上述命令時遇到錯誤,請使用 “systemctl enable redis-server” 命令:

啟動 Redis 命令列用戶端並檢索我們之前建立的「temp」鍵的值:

Redis 測試到此結束。您的 Redis 伺服器現在已準備就緒,可用於所需的用途。

保護 Redis 安全

此時,Redis 已完全正常運作。然而,其某些預設設定並未提供最佳的安全性。如果不進行更新,任何惡意行為者都可能利用這個機會存取伺服器及其資料。本節將展示如何緩解這些漏洞。雖然這些步驟是可選的,但強烈建議遵循這些步驟以加強系統安全性。

綁定到 localhost

預設情況下,Redis 僅能從 localhost 存取。然而,如果 Redis 是在遠端伺服器上設定的,則必須更新設定以允許來自任何地方的連線。不過,這可能不如綁定到 localhost 安全。若要將 Redis 重新綁定到 localhost,請在文字編輯器中開啟 Redis 設定檔:

向下滾動並找到以下內容。確保它沒有被註解掉:

Binding to localhost

儲存並關閉檔案。然後,重新啟動 Redis 服務以確保變更立即生效:

驗證變更是否成功:

如果您收到 ‘netstat: command not found’ 的錯誤,請使用命令安裝 net-tools “sudo apt-get install net-tools”。輸出驗證了「redis-server」已成功綁定到 localhost (127.0.0.1),反映了最近所做的變更。如果存在任何其他 IP 位址(例如 0.0.0.0),請重新檢查設定檔並再次重新啟動 Redis 伺服器。

設定 Redis 密碼

設定密碼允許使用 Redis 的內建安全功能 –「AUTH」命令。它要求用戶端進行驗證才能存取資料庫。預設情況下,Redis 未設定密碼。必須在 Redis 設定檔中宣告密碼。在文字編輯器中開啟設定檔:

然後,向下滾動到以下行並取消註解:

取消註解後,「foobared」將成為預設密碼。將其更改為您選擇的密碼。對於 Redis 而言,密碼強度是一個非常值得關注的因素。由於 Redis 是一個高效能的伺服器,它可能更容易受到暴力破解攻擊。這就是為什麼設定檔中直接包含以下警告的原因。以下是產生極強隨機密碼的快速範例。我們將使用 OpenSSL 命令來產生隨機字串:

設定新密碼後,重新啟動 Redis 服務以使變更生效:

現在來測試密碼是否已成功套用。啟動 Redis 命令列主控台:

然後,嘗試設定一個新鍵:

Redis 將拒絕該請求,因為該操作未進行身分驗證。要在伺服器上執行任何操作,使用者必須先獲得授權。使用以下命令授權使用者:

如果密碼正確,Redis 將確認該操作。現在,Redis 將允許存取其伺服器功能:

目前,我們在 Redis 主控台的工作已完成。您可以關閉主控台:

重新命名危險命令

Redis 允許重新命名或完全停用某些被視為危險的命令。這是 Redis 另一個重要的內建安全功能。為什麼命令會被視為危險?如果由未授權的使用者執行,這些命令可能會重新設定、破壞或清除伺服器中的資料。停用/重新命名一系列危險的 Redis 命令是常見的做法。請注意,命令的安全威脅取決於具體情況。例如,以下某些命令可能需要定期使用。在這種情況下,不建議停用它們。在這種情況下,重新命名命令可能會更有利。以下是視為危險的命令的快速清單。這是增強 Redis 伺服器安全性的一個很好的起點:

  • FLUSHDB
  • FLUSHALL
  • KEYS
  • PEXPIRE
  • DEL
  • CONFIG
  • SHUTDOWN
  • BGREWRITEAOF
  • BGSAVE
  • SAVE
  • SPOP
  • SREM
  • RENAME
  • DEBUG

要重新命名或停用命令,必須在 Redis 設定檔中進行宣告。開啟 Redis 設定檔,並新增以下行。在這裡,「rename-command」用於將命令重新命名為空字串。根據需要新增任意數量的項目:

同樣地,也可以將命令重新命名為不同的名稱。在某些情況下,這可能會提供更大的彈性:

rename-command

儲存檔案並退出編輯器。要使變更生效,請重新啟動 Redis 服務:

驗證變更。接下來,啟動 Redis 主控台並進行身分驗證以進行存取:

假設「CONFIG」命令已被停用或重新命名。嘗試使用以下「CONFIG」命令。它將會失敗:

如果該命令已被停用,則在重新啟用之前無法存取。但是,如果它已被重新命名,請使用新的別名:

command_4

結論

本教學示範了如何安裝、保護、設定和驗證 Redis 安裝。它還示範了如何使用 Redis 的內建安全功能,使其不易受到攻擊。然而,如果有人已經登入伺服器,要繞過 Redis 特定的安全功能是相當容易的。這就是為什麼使用防火牆來保護對 Redis 伺服器的存取至關重要的原因。

祝您使用愉快!

author

Hark Labs

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的創意設計師,專注於透過傳統與創新行銷渠道建立一致的企業形象。他擅長將藝術願景與策略行銷相融合,創造具有影響力的品牌敘事。

留言

目前尚無留言。成為第一個留言的人吧。