序章

Redis は、柔軟性、パフォーマンス、および幅広い言語サポートで知られるメモリ内のKey-Valueストアです。 このクイックスタートチュートリアルは、Ubuntu 20.04サーバーにRedisをインストール、構成、および保護する方法を示しています。

前提条件

このガイドを完了するには、sudo権限を持つroot以外のユーザーとufwで構成されたファイアウォールを持つUbuntu20.04サーバーにアクセスする必要があります。 これを設定するには、Ubuntu20.04初期サーバー設定ガイドに従ってください。

ステップ1—Redisのインストールと設定

ローカルのaptパッケージキャッシュを更新することから始めます。

  1. sudo apt update

次に、次のように入力してRedisをインストールします。

  1. sudo apt install redis-server

次に、お好みのテキストエディタでRedis設定ファイルを開きます。

  1. sudo nano /etc/redis/redis.conf

ファイル内で、supervisedディレクティブを見つけます。これにより、Redisをサービスとして管理するためのinitシステムを宣言できます。 systemd initシステムを使用するUbuntuを実行しているため、その値をnoからsystemdに変更します。

/etc/redis/redis.conf
. . .

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd

. . .

終了したら、ファイルを保存して閉じます。 nanoを使用してファイルを編集した場合は、CTRL + XYENTERの順に押して編集します。

次に、Redisサービスを再起動して、構成ファイルに加えた変更を反映します。

  1. sudo systemctl restart redis.service

Redisが正しく機能していることをテストするには、Redisのコマンドラインクライアントであるredis-cliを使用してサーバーに接続します。

  1. redis-cli

次のプロンプトで、pingコマンドを使用して接続をテストします。

  1. ping
Output
PONG

この出力は、サーバー接続がアクティブであることを確認します。 次に、以下を実行してキーを設定できることを確認します。

  1. set test "It's working!"
Output
OK

次のように入力して値を取得します。

  1. get test

すべてが機能していると仮定すると、保存した値を取得できます。

Output
"It's working!"

値をフェッチできることを確認したら、Redisプロンプトを終了してシェルに戻ります。

  1. exit

ステップ2—Redisパスワードを設定する

Redisパスワードは、Redisの構成ファイル/etc/redis/redis.confで直接構成できます。 お好みのエディタでそのファイルをもう一度開きます。

  1. sudo nano /etc/redis/redis.conf

SECURITYセクションまでスクロールし、次のようなコメント付きディレクティブを探します。

/etc/redis/redis.conf
. . .
# requirepass foobared
. . .

#を削除してコメントを解除し、foobaredを安全なパスワードに変更します。

/etc/redis/redis.conf
. . .
requirepass your_redis_password
. . .

パスワードを設定したら、ファイルを保存して閉じ、Redisを再起動します。

  1. sudo systemctl restart redis.service

パスワードが機能することをテストするには、Redisクライアントを開きます。

  1. redis-cli

以下に、Redisパスワードが機能するかどうかをテストするために使用される一連のコマンドを示します。 最初のコマンドは、認証前にキーを値に設定しようとします。

  1. set key1 10

認証しなかったため、これは機能しません。そのため、Redisはエラーを返します。

Output
(error) NOAUTH Authentication required.

次のコマンドは、Redis構成ファイルで指定されたパスワードで認証します。

  1. auth your_redis_password

Redisは次のことを認めています。

Output
OK

その後、前のコマンドを再度実行すると成功します。

  1. set key1 10
Output
OK

get key1はRedisに新しいキーの値を問い合わせます。

  1. get key1
Output
"10"

認証後にRedisクライアントでコマンドを実行できることを確認したら、redis-cliを終了できます。

  1. quit

ステップ3—危険なコマンドの名前を変更する

Redisに組み込まれている他のセキュリティ機能には、危険と見なされる特定のコマンドの名前を変更するか、完全に無効にすることが含まれます。 危険と見なされるコマンドには、FLUSHDBFLUSHALLKEYSPEXPIREDELCONFIGなどがあります。 ]、SHUTDOWNBGREWRITEAOFBGSAVESAVESPOPSREMRENAME 、およびDEBUG。 これらのコマンドやその他のコマンドを無効にするか名前を変更することで、権限のないユーザーがデータを再構成、破棄、またはその他の方法でワイプすることをより困難にします。

Redisコマンドの名前を変更または無効にするには、構成ファイルをもう一度開きます。

  1. sudo nano /etc/redis/redis.conf

警告:コマンドを無効にして名前を変更する方法を示す次の手順は、例です。 自分にとって意味のあるコマンドを無効にするか、名前を変更することだけを選択する必要があります。 コマンドの完全なリストを自分で確認し、redis.io/commandsでそれらがどのように誤用される可能性があるかを判断できます。

コマンドを無効にするには、次のように、コマンドの名前を空の文字列(間に文字がない引用符のペアで示される)に変更します。

/etc/redis/redis.conf
. . .
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
. . .

コマンドの名前を変更するには、以下の例に示すように、コマンドに別の名前を付けます。 名前を変更したコマンドは、他の人が推測するのは難しいはずですが、覚えやすいでしょう。

/etc/redis/redis.conf
. . .
# rename-command CONFIG ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG
. . .

変更を保存してファイルを閉じます。

コマンドの名前を変更した後、Redisを再起動して変更を適用します。

  1. sudo systemctl restart redis.service

新しいコマンドをテストするには、Redisコマンドラインを入力します。

  1. redis-cli

次に、認証します。

  1. auth your_redis_password
Output
OK

前の例のようにCONFIGコマンドの名前をASC12_CONFIGに変更したと仮定して、元のCONFIGコマンドを使用してみてください。 名前を変更したため、失敗するはずです。

  1. config get requirepass
Output
(error) ERR unknown command `config`, with args beginning with:

ただし、名前が変更されたコマンドの呼び出しは成功します。 大文字と小文字は区別されません。

  1. asc12_config get requirepass
Output
1) "requirepass" 2) "your_redis_password"

結論

このクイックスタートチュートリアルでは、Redisをインストールして構成し、Redisインストールが正しく機能していることを検証し、組み込みのセキュリティ機能を使用して、悪意のある攻撃者からの攻撃に対する脆弱性を軽減しました。