序章

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

前提条件

このガイドを完了するには、root以外のユーザーがいるUbuntu20.04サーバーにアクセスする必要があります。 sudo 特権とで構成されたファイアウォール ufw. これを設定するには、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を実行しているため、その値を次のように変更します。 nosystemd:

/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 + X, Y、 それから ENTER.

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

  1. sudo systemctl restart redis.service

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

  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に組み込まれている他のセキュリティ機能には、危険と見なされる特定のコマンドの名前を変更するか、完全に無効にすることが含まれます。 危険と見なされるコマンドには、次のものがあります。 FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME、 と 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インストールが正しく機能していることを検証し、組み込みのセキュリティ機能を使用して、悪意のある攻撃者からの攻撃に対する脆弱性を軽減しました。