Ubuntu 24.04 に Redis 8 をインストールして外部接続を許可する方法

Ubuntu 24.04 サーバーに Redis の公式リポジトリを追加して Redis 8 をインストールし、管理者パスワードとアプリケーション専用ユーザーを作成したあと、自分の PC からだけ接続できるように外部接続の設定とファイアウォ…

Ubuntu 24.04Redis 8.10x86_64約 17 分

検証済みのドキュメントです

クラウドサーバーを作成し、このドキュメントのコマンドを最初から最後までそのまま実行して確認したドキュメントです。

OS
Ubuntu 24.04.5 LTS · x86_64
インストールしたバージョン
Redis 8.10.2 (6:8.10.2-1rl1~noble1)
テストサーバー
DigitalOcean · 1 vCPU / 1 GB RAM / 25 GB SSD (s-1vcpu-1gb, sgp1)
最終確認
2026-10-10

このドキュメントにはアフィリエイトリンクが含まれています。リンクから登録するとコードサンドが手数料を受け取ることがありますが、内容や評価には影響しません。

Ubuntu 24.04 サーバーに Redis の公式リポジトリを追加して Redis 8 をインストールし、管理者パスワードとアプリケーション専用ユーザーを作成したあと、自分の PC からだけ接続できるように外部接続の設定とファイアウォールまで設定します。

1. 準備するもの

  • Ubuntu 24.04 LTS サーバー 1 台(メモリ 1GB 以上を推奨)
  • sudo 権限のあるアカウントで SSH 接続できること
  • 外部から接続する PC のグローバル IP アドレス(例: 203.0.113.10)

サーバーがない場合は、DigitalOcean の最小構成の Droplet(1 vCPU・1GB)を作成してみてください。この Droplet でも Redis 8 は十分にインストールできます。このドキュメントのすべての手順は、Droplet(1 vCPU・メモリ 1GB・25GB SSD・Ubuntu 24.04・シンガポール)でサーバーを作成して確認しました。

2. Redis 公式リポジトリの追加

Ubuntu 24.04 の標準リポジトリでインストールされる Redis は 7.0 です。

apt-cache policy redis-server | head -4
redis-server:
  Installed: (none)
  Candidate: 5:7.0.15-1ubuntu0.24.04.4
  Version table:

Redis 8 は、Redis の公式リポジトリ(packages.redis.io)を追加してインストールします。まず、必要なツールをインストールします。Ubuntu 24.04 にはほとんどがすでにインストールされています。

sudo apt update
sudo apt install -y lsb-release curl gpg

リポジトリの署名鍵をダウンロードして保存し、リポジトリのアドレスを登録します。署名鍵は、ダウンロードするパッケージが Redis によって作られたものかを確認するために使われます。$(lsb_release -cs) は、Ubuntu 24.04 のコードネームである noble に置き換わります。

curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
sudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb noble main

パッケージ一覧を更新してから、インストールされるバージョンをもう一度確認します。Candidate が 8 で始まっていれば正常です。

sudo apt update
apt-cache policy redis-server | head -4
redis-server:
  Installed: (none)
  Candidate: 6:8.10.2-1rl1~noble1
  Version table:

3. Redis 8 のインストール

redis パッケージをインストールすると、サーバー(redis-server)とコマンドラインツール(redis-tools)が一緒にインストールされます。

sudo apt install -y redis

インストールが終わったら、インストールされたバージョンを確認します。

redis-server --version
Redis server v=8.10.2 sha=00000000:1 malloc=jemalloc-5.3.0 bits=64 build=677c1e5d953828c4

4. サービスの状態確認

インストールが終わると redis-server サービスが自動で起動し、サーバーを再起動しても自動で実行されるように登録されます。

sudo systemctl status redis-server --no-pager
● redis-server.service - Advanced key-value store
     Loaded: loaded (/usr/lib/systemd/system/redis-server.service; enabled; preset: enabled)
     Active: active (running) since Sat 2026-10-10 08:03:21 UTC; 9s ago

Redis に接続できるか確認します。PONG が表示されれば正常です。

redis-cli ping
PONG

どのアドレスで接続を受け付けているか確認します。

sudo ss -tlnp | grep 6379
LISTEN 0      511        127.0.0.1:6379      0.0.0.0:*    users:(("redis-server",pid=7586,fd=20))
LISTEN 0      511            [::1]:6379         [::]:*    users:(("redis-server",pid=7586,fd=21))

127.0.0.1 と [::1] だけが表示されるので、今はサーバー上からしか接続できません。この動作は、設定ファイル /etc/redis/redis.conf の次の項目で決まります。

grep -n -E '^(bind|protected-mode|port|supervised|# requirepass|loadmodule)' /etc/redis/redis.conf
88:bind 127.0.0.1 -::1
112:protected-mode yes
139:port 6379
389:supervised auto
1145:# requirepass foobared
2753:loadmodule /usr/lib/redis/modules/redisbloom.so
2754:loadmodule /usr/lib/redis/modules/redisearch.so
2755:loadmodule /usr/lib/redis/modules/rejson.so
2756:loadmodule /usr/lib/redis/modules/redistimeseries.so
  • bind: 接続を受け付けるサーバーのアドレスです。127.0.0.1(IPv4)と ::1(IPv6)はどちらもサーバー自身のアドレスです。先頭の - は、そのアドレスが使えなくても Redis がエラーなしで起動するという意味です。
  • protected-mode: デフォルトユーザーにパスワードがないときに外部からの接続をブロックする機能です。
  • requirepass: パスワードの設定です。先頭に # が付いているため、パスワードなしで接続できる状態です。
  • loadmodule: Redis 8 の公式パッケージに含まれている機能です。確率的データ構造(redisbloom)、検索(redisearch)、JSON(rejson)、時系列(redistimeseries)を Redis の起動時に読み込みます。別途インストールする必要はありません。

5. 基本のセキュリティ設定 — 管理者パスワード

インストール直後の Redis は、パスワードなしですべてのコマンドを実行できます。外部接続を許可する前に、デフォルトユーザー(default)にパスワードを設定します。default ユーザーはすべてのコマンドを実行できるので、管理者パスワードとして使います。パスワードは必ず自分で決めた値に置き換えてください。

sudo sed -i 's/^# requirepass foobared/requirepass change-this-admin-password/' /etc/redis/redis.conf
sudo grep -n '^requirepass' /etc/redis/redis.conf
1145:requirepass change-this-admin-password

Redis を再起動したあと、パスワードなしで接続するとコマンドが拒否されます。

sudo systemctl restart redis-server
redis-cli ping
NOAUTH Authentication required.

--askpass オプションを付けると、パスワードの入力を受けてからコマンドを実行します。入力したパスワードは * で表示されます。

redis-cli --askpass ping
Please input password: **************************
PONG

6. 専用ユーザーの作成

アプリケーションでは、管理者パスワードではなく権限を絞った専用ユーザーで接続するほうが安全です。ACL でユーザー appuser を作成します。Redis には MySQL・PostgreSQL のようにデータベースを別に作るコマンドがないため、キー名の先頭部分(app:)でこのユーザーが使える範囲を決めます。

echo 'user appuser on >change-this-password ~app:* +@all -@dangerous' | sudo tee -a /etc/redis/redis.conf
sudo systemctl restart redis-server
user appuser on >change-this-password ~app:* +@all -@dangerous
  • on: ユーザーを使用できる状態にします。
  • >change-this-password: > の後ろの値がこのユーザーのパスワードです。
  • ~app:*: 名前が app: で始まるキーだけを読み書きできます。
  • +@all -@dangerous: すべてのコマンドを許可したうえで、FLUSHALL・CONFIG・KEYS・INFO のようにサーバー全体に影響するコマンドのグループ(@dangerous)を除外します。

ユーザーが作成されたか、管理者パスワードで確認します。

redis-cli --askpass ACL USERS
Please input password: **************************
1) "appuser"
2) "default"

--user オプションで appuser として接続し、app: で始まるキーを保存して読み出してみます。

redis-cli --user appuser --askpass SET app:hello world
Please input password: ********************
OK
redis-cli --user appuser --askpass GET app:hello
Please input password: ********************
"world"

許可していないキーとコマンドは拒否されます。次の 2 つのエラーが表示されれば、権限が意図どおりに適用されています。

redis-cli --user appuser --askpass SET other:hello world
Please input password: ********************
(error) NOPERM No permissions to access a key
redis-cli --user appuser --askpass FLUSHALL
Please input password: ********************
(error) NOPERM User appuser has no permissions to run the 'flushall' command

手順 4 で見た JSON 機能も appuser で使えます。+@all に JSON コマンドも含まれているためです。$ は JSON ドキュメント全体を、$.name は name 項目を表します。

redis-cli --user appuser --askpass JSON.SET app:user:1 '$' '{"name":"kim","age":30}'
Please input password: ********************
OK
redis-cli --user appuser --askpass JSON.GET app:user:1 '$.name'
Please input password: ********************
"[\"kim\"]"

7. 外部接続の許可

デフォルトの設定では localhost からの接続しか許可していません。外部からの接続を許可するには、bind を 0.0.0.0 に変更します。0.0.0.0 は、サーバーのすべての IPv4 アドレスで接続を受け付けるという意味です。

sudo sed -i 's/^bind 127.0.0.1 -::1/bind 0.0.0.0/' /etc/redis/redis.conf
grep -n -E '^(bind|protected-mode)' /etc/redis/redis.conf
88:bind 0.0.0.0
112:protected-mode yes

protected-mode yes はそのままにします。手順 5 でデフォルトユーザーにパスワードを設定したので、この設定を有効にしたままでも外部から接続できます。

Redis を再起動し、6379 番ポートが外部のアドレスでも開いたか確認します。0.0.0.0:6379 が表示されていれば正常です。

sudo systemctl restart redis-server
sudo ss -tlnp | grep 6379
LISTEN 0      511          0.0.0.0:6379      0.0.0.0:*    users:(("redis-server",pid=9065,fd=20))

8. ファイアウォール(ufw)の設定

Redis の設定とは別に、ファイアウォールでも自分の PC の IP だけが 6379 番ポートに接続できるように許可します。ファイアウォールを有効にする前に、必ず先に SSH を許可してください。SSH を許可せずにファイアウォールを有効にすると、サーバーへの接続が切れてしまいます。

sudo ufw allow OpenSSH
sudo ufw allow from 203.0.113.10 to any port 6379 proto tcp
sudo ufw --force enable
sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
6379/tcp                   ALLOW       203.0.113.10
OpenSSH (v6)               ALLOW       Anywhere (v6)

9. 自分の PC からの接続確認

PC に redis-cli がない場合は、Docker で Redis クライアントを実行して接続できます。203.0.113.20 はサーバーの IP に置き換えてください。--rm オプションを付けているので、コマンドが終わるとコンテナは自動で削除されます。-it は、パスワードを入力できるように端末を接続するオプションです。

docker run --rm -it redis:8 redis-cli -h 203.0.113.20 --user appuser --askpass GET app:hello
Please input password: ********************
"world"

手順 6 で保存した値が表示されれば、外部接続は正常です。パスワードなしで接続するとコマンドが拒否されることも確認します。

docker run --rm -it redis:8 redis-cli -h 203.0.113.20 PING
(error) NOAUTH Authentication required.

10. トラブルシューティング

Could not connect to Redis at 203.0.113.20:6379: Connection refused

Redis が外部のアドレスで接続を受け付けていないという意味です。bind を変更する前に外部から接続すると、このエラーが出ます。grep -n -E '^(bind|protected-mode)' /etc/redis/redis.conf で bind 0.0.0.0 になっているか、変更したあとに sudo systemctl restart redis-server を実行したかを確認してください。

NOAUTH Authentication required.

パスワードなしでコマンドを実行したという意味です。requirepass を設定したあとは、redis-cli --askpass(管理者)または redis-cli --user appuser --askpass(専用ユーザー)で接続してください。

AUTH failed: WRONGPASS invalid username-password pair or user is disabled.

ユーザー名かパスワードが間違っているという意味です。--user を付けないと、default ユーザー(管理者パスワード)で確認されます。appuser で接続するには、--user appuser を付けて appuser のパスワードを入力してください。このエラーの次の行には (error) NOAUTH Authentication required. も表示されます。

(error) NOPERM No permissions to access a key

appuser に許可していないキーを使ったという意味です。このドキュメントでは、~app:* で app: で始まるキーだけを許可しています。ほかの名前のキーも許可するには、redis.conf の user appuser の行に ~ で始まるキーパターンを追加し、Redis を再起動してください。

NOPERM User appuser has no permissions to run the 'info' command

-@dangerous で除外したコマンドを実行したという意味です。FLUSHALL を実行しても同じ形式のエラーが出ます。こうしたコマンドは、管理者パスワードで接続して実行してください。

11. 削除

Redis とデータをすべて削除するには、以下のコマンドを実行します。保存されたデータと設定ファイルまですべて削除されるため、必要なデータは先にバックアップしてください。

sudo apt purge -y redis redis-server redis-tools
sudo apt autoremove -y
sudo rm -rf /etc/redis /var/lib/redis /var/log/redis

手順 2 で追加した公式リポジトリと署名鍵も削除し、パッケージ一覧を更新します。

sudo rm /etc/apt/sources.list.d/redis.list /usr/share/keyrings/redis-archive-keyring.gpg
sudo apt update

ファイアウォールに追加した 6379 番ポートのルールも削除します。

sudo ufw delete allow from 203.0.113.10 to any port 6379 proto tcp
Rule deleted

Redis のパッケージが残っていないか確認します。0 が表示されれば、すべて削除されています。

dpkg -l | grep -c redis
0

実際に試してみる

サーバーがなければ、以下のサービスで数分あれば Ubuntu サーバーを作れます。 このドキュメントは DigitalOcean で検証しました。