Redisは多くのことに役立ちますが、その1つはキャッシュです。Redisをプライマリデータストアとして使用したり、データベースの代替として使用したりすることもできます。しかし、安全なRedisのインストールはどうやって行うのでしょうか?Redisをインストールすることは煩わしい作業ですし、注意深く行わないと多くのエラーが発生する可能性があります。幸運なことに、このチュートリアルでカバーされています。
このチュートリアルでは、Linuxシステムに安全にRedisをインストールする方法と、一般的な間違いを避けるためのいくつかのヒントを学びます。
さあ、Redisのインストールエラーのトラブルシューティングから頭痛を取り除きましょう!
必要条件
このチュートリアルは実演形式で行われます。一緒に進める場合は、以下を確認してください:
- Ubuntu 20.04 LTSマシン-このチュートリアルではUbuntu 20.04 LTSを使用しますが、ほとんどのLinuxディストリビューションにも同様の手順が適用されます。
APTパッケージマネージャーを使用したRedisのインストール
UbuntuでRedisをインストールする方法はいくつかありますが、このチュートリアルではRedisをインストールするためにAPTパッケージマネージャーを使用します。
RedisはCで書かれているため、Redisのソースコードを手動でコンパイルする必要があります。いくつかの依存関係をインストールする必要があり、ビルドプロセスは完全に確実ではありません。
ソースからRedisをコンパイルすることはお勧めしませんが、利点としては、インストールをカスタマイズすることができます。ソースコードをダウンロードし、手動で構成します。
ターミナルを開き、以下のapt update
コマンドを実行して最新のパッケージリストを確認します。

次に、以下のapt install
コマンドを実行してマシンにRedisをインストールします。
以下のコマンドは、apt
パッケージマネージャーを使用してUbuntuリポジトリからredis-server
パッケージをダウンロードしてマシンにインストールします。 -y
フラグは、インストールプロセス中のプロンプトを自動的に受け入れるようapt
に指示します。

Redis.confファイルを設定してRedisをサービスとして実行する
Redisをインストールしましたが、まだ使用準備ができていません。Redisを使用する前に、まずredis.confファイルを設定する必要があります。
インストールしたRedisパッケージには、redis.conf設定ファイルが含まれており、デフォルトで/etc/redis/ディレクトリに保存されています。このファイルには、Redisのすべての設定オプションが含まれています。
.confファイル拡張子は、一般的なパターンに従っているため、論理的です。他の多くのプログラムもこのスタイルを使用しています。たとえば、Apacheウェブサーバーは、メインの設定ファイルに.confファイル拡張子を使用しています。
1.次のsystemctl
コマンドを実行して、redis-server
サービスをstop
します。Redisサービスを実行しないようにするのは、Redisを初めて使用する場合に推奨される方法です。
2.次に、お好みのテキストエディタで/etc/redis/redis.confファイルを開きます。
supervisedディレクティブを検索し、次に示すようにsystemdに設定して、変更を保存します。これにより、オペレーティングシステムにRedisをサービスとして実行するように指示されます。

3. 以下の systemctl restart
コマンドを実行して、Redis サービス (redis.service
) を再起動してください。Redis サービスはまだ変更を認識していないためです。
4. 最後に、以下の systemctl status
コマンドを実行して、Redis が実行されているかどうかを確認してください。
以下の出力によると、Redis サービスが実行されていることがわかります。

Redis サーバの機能が正常に動作しているかテストする
Redis サービスが正常に実行されていることを構成して確認しましたが、これは Redis サーバが正常に動作していることを意味しません。Redis サーバの機能が正常に動作しているかをテストするにはどうすればよいでしょうか?Redis サーバに接続し、サーバが応答するかどうかを確認するためにコマンドを送信します。
1. 以下の redis-cli
コマンドを実行して、Redis サーバに接続してください。 redis-cli
は、Redis のコマンドラインインターフェースであり、サーバにコマンドを送信してその状態を調査することができます。
以下のように、Redis サーバのプロンプト (127.0.0.1:6379>) にいることがわかります。redis-cli
コマンドは、デフォルトで 127.0.0.1:6379
の Redis サーバに接続しようとします。

2. 次に、以下の ping
コマンドを実行して、Redis サーバが到達可能かどうかを確認してください。
サーバが PONG を返したことから、Redis サーバが到達可能であり、サービスと正常に通信できることが確認されました。

おそらくまだ懐疑的なので、以下のset
コマンドを実行してください。set
コマンドは、データベース内のキーと値のペアを設定するRedisコマンドです。
ご覧のように、setコマンドは「OK」を返します。これは、Redisサービスが正常に動作していることを示しています。

3.以下のexit
コマンドを実行して、redis-cli
を終了してください。これにより、Redisサーバーへの接続が閉じられます。
Redisサーバーをlocalhostにバインドする
Redisサーバーが正しく動作することをテストしたばかりですが、ネットワーク上の他のデバイスからアクセスできる可能性もあります。この動作は望ましくないため、Redisサーバーを見知らぬ人から保護したいと考えることが一般的です。
Redisサーバーをlocalhostにバインドすると、RedisをインストールしたマシンのみがRedisサーバーにアクセスできるようになります。
1.テキストエディターで/etc/redis/redis.confファイルを開きます。
2.「bind 127.0.0.1 ::1
」と書かれた行を見つけ、行の先頭のナンバーサイン(#
)を削除して行をコメント解除します。

3.次に、以下のコマンドを実行してredis-server
サービスを再起動します。
4.最後に、Redisサーバーがlocalhostにバインドされているかどうかを確認するために、次のコマンドを実行します。netstat -lnp
コマンドはすべてのアクティブなネットワーク接続をリストし、grep redis
部分は出力を「redis
」を含む行にフィルタリングします。
-lnp
は、ホスト名をIPアドレスに解決するためにUNIXライクなシステムで使用されるネットワーキングプロトコルです。
以下では、Redisサーバーが今ではlocalhostインターフェースのみでリスニングされていることがわかります(127.0.0.1:6379
)。構成ファイルの変更を反映して、アクティブなインターネット接続の下にlocalhostインターフェースのみがリストされていることがわかります(tcp
)。
今、ネットワーク上の他のデバイスはあなたのRedisサーバーに接続できません。

Redisサーバー接続のセキュリティ強化
この時点では、Redisはユーザーにパスワードでの認証を要求するように設定されていません。あなたのRedisサーバーのIPアドレスやホスト名を知っている人は、それに接続してデータを変更することができます。
Redisサーバーをどのように保護しますか?Redisサーバーに接続する際にユーザーの認証を要求するためにパスワードを設定します。
1. テキスト/コードエディタでredis.conf構成ファイルを再度開きます。
2. 次に、以下を使用して強力なパスワードを設定します:
-
SECURITY
セクションの下でrequirepass foobared
を探します。 - 行の先頭のナンバーサイン(
#
)を削除します。 foobared
を自分で選択した強力なパスワードに置き換えて変更を保存します。

3. 以下のコマンドを実行してRedisサーバーを再起動し、接続します。
4. 今、ping
コマンドを実行してサーバーから応答があるかどうかを確認します。
以下は、NOAUTH 認証が必要ですというエラーメッセージが表示されています。このメッセージは、Redisサーバーにリモートでアクセスするためには認証パスワードが必要であることを示しています。

5. 以下のauth
コマンドを実行し、パスワードを入力してRedisサーバーへの接続を認証します。
認証が成功すると、以下のようにOKという応答が返ります。

6. 最後に、ping
コマンドを再実行してRedisサーバーへの接続が認証されているかテストします。
接続が認証されている場合、以下のようにPONGという応答が返ります。この時点で、Redisサーバーはパスワードで保護されています。

Redisサーバーを保護するために危険なコマンドを無効化する
Redisサーバーへの接続を認証するためにパスワードを設定するだけでは、100%の保護が得られるわけではありません。Redisには、データベースのデータを変更することができるいくつかの危険なコマンドがデフォルトで含まれています。
これらのコマンドは、認証されていないユーザーが実行すると、侵入者がRedisデータベースのデータを読み取ったり、変更したり、破壊したり、削除したりすることができます。
以下は、Redisサーバーによって追加の危険なコマンドが含まれている場合を考慮していない完全なリストではありませんが、一般的にこれらが危険なコマンドです:
Redisサーバーをさらにセキュアにするために、redis.confファイルでこれらの危険なコマンドの名前を変更してください。
1. テキストエディタでredis.confファイルを開き、Command renamingセクションを探します。
以下の構文に従って、コマンドを無効にするためにコマンドを空の文字列に変更します。実際のコマンドはthe-command
に置き換えてください。
例えば、CONFIG
コマンドを無効にするには、CONFIG
を空の文字列に変更し、次に変更を保存してください。ダブルクォーテーション(“”)は、コマンドを無効にする空の文字列を示しています。

CONFIG
command 2. テキストエディタから終了し、以下のコマンドを実行してRedisサーバーを再起動します。
3. 次に、Redisサーバーに接続するために以下のコマンドを実行します。
4. 最後に、config get
コマンドを実行して、CONFIG
コマンドが無効になっていることをテストします。
以下のようにERR unknown command config
という応答が表示され、CONFIG
コマンドが無効になっていることが示されます。

CONFIG
command config get requirepass
コマンドが通過した場合、Redisサーバーに接続するための認証のためにRedisサーバーにパスワードを要求します。
これで、危険なRedisコマンドを保護するために危険なRedisコマンドを正常にリネームしました。今後は、redis.confファイルで他の危険なコマンドを無効にします。
ファイアウォールを使用してRedisサーバーへの接続要求をブロックする
Redisサーバーをセキュリティー強化する別の方法は、ファイアウォールの設定です。ファイアウォールの設定では、サーバー上で実行されている各サービスに対して必要なポートのみを許可する必要があります。
たとえば、サーバーでRedisをポート6379
で実行している場合、そのポートだけを開く必要があります。特定のIPアドレスまたはアドレス範囲からのアクセスを許可する必要がある場合は、それらのアドレスをファイアウォールのルールに追加できます。
ファイアウォールを設定するには、まずファイアウォール構成ツールをインストールします。この例では、Linuxでよく使われるファイアウォール構成ツールであるUFWを使用しています。ただし、iptablesなど別のツールを使用することもできます。
1. 次のコマンドを実行して、マシンにUFWをインストールします。
2. 次に、以下のコマンドを実行してUFWを有効にします。
下のプロンプトが表示されたら、コマンドの実行を続行するには「Y」を入力してください。

3. Redisサーバーのポート6379
でトラフィックを許可するルールを追加するには、以下のufw
コマンドを実行します。目的のユーザーのIPアドレスで11.22.33.44
を置き換えてください。

6379
4. 最後に、以下のコマンドを実行して、ファイアウォールルールが正常に追加されたことを確認します。このコマンドは、ファイアウォールのstatus
を確認します。
以下の出力で、ファイアウォールがアクティブであり、IPアドレス11.22.33.44
からのRedisのポート6379
へのトラフィックを許可するルールがあることがわかります。

今後、11.22.33.44
のIPアドレスを持つユーザーは、ポート6379
を介してRedisに接続でき、パスワードで認証する必要があります。他のサービスの追加ポートを同様の方法で追加できます。
結論
このチュートリアルでは、危険なコマンドを空の文字列に変更し、ファイアウォールを設定することで、Redisサーバーをインストールしてセキュアにする方法を学びました。
この新しい知識を活用することで、Redisのすべての利点を享受でき、サーバーを不必要なリスクにさらすことなく利用できます。
さらに学習したいですか?なぜKubernetesでRedisサーバーをセキュアにすることから始めないのですか?