はじめに
この実験 (Lab) では、Redis サーバーのセキュリティを強化する方法を学びます。不正アクセスを防ぐためのパスワード設定や、潜在的な誤用を制限するための特定のコマンドの無効化について説明します。この実験 (Lab) が終わる頃には、より安全な Redis インスタンスが利用できるようになります。
この実験 (Lab) では、Redis サーバーのセキュリティを強化する方法を学びます。不正アクセスを防ぐためのパスワード設定や、潜在的な誤用を制限するための特定のコマンドの無効化について説明します。この実験 (Lab) が終わる頃には、より安全な Redis インスタンスが利用できるようになります。
デフォルトでは、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-cli
PING のような簡単なコマンドを実行してみてください。
PING
エラーメッセージが表示されるはずです。
(error) NOAUTH Authentication required.
これは、認証が現在必要であることを示しています。
redis-cli を終了する:
コマンドがログに記録されるように、exit と入力するか Ctrl+D を押して redis-cli を終了します。
exit
これは、検証ステップが正しく機能するために重要です。
パスワードを設定したので、次に AUTH コマンドを使用して Redis サーバーに認証する方法を学びます。このコマンドは、前のステップで設定したパスワードが必要です。
redis-cli を使用して Redis サーバーに接続する:
LabEx VM でターミナルを開きます。デフォルトのディレクトリは ~/project です。以下のコマンドを実行します。
redis-cli
127.0.0.1:6379> プロンプトが表示されるはずです。
AUTH コマンドで認証する:
AUTH コマンドに続けて、以前設定したパスワードを入力します。
AUTH mysecretpassword
認証が成功すると、以下のように表示されます。
OK
認証後にコマンドを実行する:
認証が完了したので、再度 PING コマンドを試してみましょう。
PING
期待される応答が表示されるはずです。
PONG
redis-cli を終了する:
exit と入力するか Ctrl+D を押して redis-cli を終了します。
exit
Redis には多くのコマンドがありますが、特定の環境ではリスクのあるものも存在します。CONFIG SET でコマンドを動的に無効化することはできません(rename-command はサーバーの再起動が必要なため)が、ここでは FLUSHALL のような危険なコマンドがどのように機能し、本番環境でなぜ制限されるべきなのかを示すことで、コマンドセキュリティの概念を実証します。
redis-cli を使用して Redis サーバーに接続する:
LabEx VM でターミナルを開きます。デフォルトのディレクトリは ~/project です。以下のコマンドを実行します。
redis-cli
127.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 サーバーを保護するために不可欠です。