はじめに
この実験 (Lab) では、Redis サーバーのセキュリティを強化する方法を学びます。不正アクセスを防ぐためのパスワード設定や、潜在的な誤用を制限するための特定のコマンドの無効化について説明します。この実験 (Lab) が終わる頃には、より安全な Redis インスタンスが利用できるようになります。
CONFIG SET requirepass によるパスワード設定
デフォルトでは、Redis はパスワードを必要としないため、脆弱な状態にあります。パスワードを設定することは、Redis サーバーを保護するための最初で最も重要なステップです。ここでは CONFIG SET requirepass コマンドを使用します。
CONFIG SET コマンドは、Redis の設定値を動的に変更することを可能にします。requirepass 設定は、サーバーに接続するためにクライアントが提供しなければならないパスワードを指定します。
始めましょう:
redis-cliを使用して Redis サーバーに接続する:LabEx VM でターミナルを開きます。デフォルトのディレクトリは
~/projectです。以下のコマンドを実行します。redis-cliこれにより、デフォルトのホスト (127.0.0.1) およびポート (6379) で実行されている Redis サーバーに接続されます。
127.0.0.1:6379>プロンプトが表示されるはずです。127.0.0.1:6379>CONFIG SET requirepassコマンドを使用してパスワードを設定する:パスワードを
mysecretpasswordに設定します。本番環境では、強力でユニークなパスワードを選択してください。CONFIG SET requirepass mysecretpassword以下の出力が表示されるはずです。
OKこれにより、パスワードが設定されたことが確認されます。
次に、
exitと入力して Enter キーを押してredis-cliを終了します。これにより、コマンドがログに記録されることが保証されます。exit認証なしでコマンドを実行してみる:
新しいターミナルを開き、
redis-cliを使用して Redis サーバーに接続します。redis-cliPINGのような簡単なコマンドを実行してみてください。PINGエラーメッセージが表示されるはずです。
(error) NOAUTH Authentication required.これは、認証が現在必要であることを示しています。
redis-cliを終了する:コマンドがログに記録されるように、
exitと入力するかCtrl+Dを押してredis-cliを終了します。exitこれは、検証ステップが正しく機能するために重要です。
AUTH コマンドによる認証
パスワードを設定したので、次に AUTH コマンドを使用して Redis サーバーに認証する方法を学びます。このコマンドは、前のステップで設定したパスワードが必要です。
redis-cliを使用して Redis サーバーに接続する:LabEx VM でターミナルを開きます。デフォルトのディレクトリは
~/projectです。以下のコマンドを実行します。redis-cli127.0.0.1:6379>プロンプトが表示されるはずです。AUTHコマンドで認証する:AUTHコマンドに続けて、以前設定したパスワードを入力します。AUTH mysecretpassword認証が成功すると、以下のように表示されます。
OK認証後にコマンドを実行する:
認証が完了したので、再度
PINGコマンドを試してみましょう。PING期待される応答が表示されるはずです。
PONGredis-cliを終了する:exitと入力するかCtrl+Dを押してredis-cliを終了します。exit
危険なコマンドの制限
Redis には多くのコマンドがありますが、特定の環境ではリスクのあるものも存在します。CONFIG SET でコマンドを動的に無効化することはできません(rename-command はサーバーの再起動が必要なため)が、ここでは FLUSHALL のような危険なコマンドがどのように機能し、本番環境でなぜ制限されるべきなのかを示すことで、コマンドセキュリティの概念を実証します。
redis-cliを使用して Redis サーバーに接続する:LabEx VM でターミナルを開きます。デフォルトのディレクトリは
~/projectです。以下のコマンドを実行します。redis-cli127.0.0.1:6379>プロンプトが表示されるはずです。AUTHコマンドで認証する:AUTHコマンドに続けてパスワードを入力して認証します。AUTH mysecretpassword認証が成功すると
OKという出力が表示されるはずです。FLUSHALLの危険性を示すためのテストデータを作成する:SET testkey "important data" SET anotherkey "more important data"どちらのコマンドも
OKを返すはずです。データが存在することを確認する:
KEYS *両方のキーがリスト表示されるはずです。
1) "testkey" 2) "anotherkey"危険な
FLUSHALLコマンドを実演する:警告: このコマンドはすべてのデータベースのすべてのデータを削除します!
FLUSHALL以下のように表示されるはずです。
OKこのコマンドは、すべてのデータベースからすべてのデータを正常に削除します。
すべてのデータが削除されたことを確認する:
KEYS *以下のように表示されるはずです。
(empty array)これにより、
FLUSHALLがなぜ危険と見なされ、本番環境で無効にされるべきなのかがわかります。これはredis.confファイルにrename-command FLUSHALL ""を追加することで実現できます。redis-cliを終了する:exitと入力するかCtrl+Dを押してredis-cliを終了します。exit
まとめ
この実験では、Redis のセキュリティを強化する方法を学びました。不正アクセスを防ぐために CONFIG SET requirepass を使用してパスワードを設定しました。また、AUTH コマンドを使用した認証方法を学び、すべてのデータを削除できる FLUSHALL のようなコマンドの危険性についても実証しました。本番環境では、redis.conf ファイルに rename-command FLUSHALL "" を追加し、Redis サーバーを再起動することで、このような危険なコマンドを無効にする必要があります。これらの手順は、Redis サーバーを保護するために不可欠です。


