Redis は、データベースサーバー、キャッシュ、メッセージブローカーとして使用できる強力なインメモリキーバリューストアです。高速なパフォーマンス、柔軟性、そして幅広い言語のサポートで広く知られています。これは、C言語で書かれた、無料のオープンソースソフトウェアです。このガイドでは、Ubuntu 18.04にRedisをインストールしてセキュリティを確保する方法を紹介します。
前提条件
このガイドに従うには、事前にいくつかの準備が必要です。まず、Ubuntu 18.04サーバーが必要です。これは、当社のチュートリアルに従って簡単にインストールできます。さらに、sudo権限を持つ非ルートユーザーと、基本的なファイアウォールが設定されている必要があります。これらは、Linuxのsudoersファイルの構成 および UbuntuおよびDebianクラウドサーバーでのUFWの設定
それでは、始めましょう!
Redisのインストール
Redisは、公式のUbuntuリポジトリから直接利用できます。これがインストールと設定の最も簡単な方法です。特別な理由がない限り、この方法に従うことをお勧めします。Redisのソースコードは無料で公開されているため、ソースからRedisをビルドすることも可能ですが、管理やアップデートが面倒になるため、お勧めしません。
UbuntuリポジトリからRedisをインストールする
まず、ローカルのAPTパッケージキャッシュを更新します。
|
1 |
sudo apt update |
次に、以下のコマンドでRedisをインストールします。
|
1 |
sudo apt install redis-server |
ソースからRedisをインストールする
Ubuntuには、デフォルトでビルドツールや必要なライブラリが含まれていません。以下のコマンドを実行すると、Redisのビルドに必要なすべてのツールがインストールされます。
|
1 |
sudo apt install git build-essential |
Redisをビルドするには、さらに2つの依存関係があります。これらの依存関係は、TLSサポートやsystemd統合などの追加機能を使用してRedisをコンパイルするために必要です。TLSサポート付きでRedisをコンパイルするには「libssl-dev」パッケージをインストールし、systemdサポート付きでRedisをコンパイルするには「libsystemd-dev」パッケージをインストールします。
|
1 |
sudo apt install libssl-dev libsystemd-dev |
RedisのソースコードはGitHubで公開されています。RedisのGitHubページを確認してください。次に、ソースコードを取得します。
|
1 |
git clone https://github.com/redis/redis.git |
現在の作業ディレクトリをRedisのソースコードディレクトリに変更します。
|
1 |
cd redis/ |
その後、makeツールを実行してコンパイルを開始します。これにより、追加の要素なしでRedisがコンパイルされます。
|
1 |
make -j$(nproc) |
TLSサポートを有効にするには(「libssl-dev」がインストールされていることを前提とします)、代わりに以下のコマンドを使用します。
|
1 |
make -j$(nproc) BUILD_TLS=yes |
systemdのサポートを有効にするには(「libsystemd-dev」がインストールされていることを前提とします)、以下のコマンドを使用します。
|
1 |
make -j$(nproc) USE_SYSTEMD=yes |
次に、コンパイルが成功したかどうかをテストします。テストを実行するには、追加のパッケージ「tcl-dev」と関連する依存関係が必要になる場合があることに注意してください。
|
1 |
make test |
最後に、以下のコマンドを実行してRedisをインストールします。
|
1 |
sudo make install |
RedisがTLSを使用してビルドされた場合、サーバーの実行は以下の方法で行う必要があります。
|
1 2 |
./utils/gen-test-certs.sh ./runtest --tls |
Redisの設定
インストールが完了したら、Redisを設定します。テキストエディタでRedisの設定ファイルを開き、「supervised」セクションまでスクロールします。
|
1 |
sudo vim /etc/redis/redis.conf |
「supervised」の値を「systemd」に変更します。これにより、Redisサービスがsystemdによって管理されるようになります。変更を反映させるには、Redisサービスを再起動します。
|
1 |
sudo systemctl restart redis.service |
Redisのテスト
Redisを本格的に使用する前に、正常に機能しているかどうかをテストすることをお勧めします。ここでは、Redisの動作をテストするいくつかの方法を紹介します。最初のステップは、Redisサービスが起動して実行されているかどうかを確認することです。
|
1 |
sudo systemctl status redis |
ここで、Redisはすでに実行されています。デフォルトでは、Redisサービスは起動時に実行を開始します。Redisサービスを手動で実行する場合は、無効にしてください。
|
1 |
sudo systemctl disable redis |
次のテストは、Redisコンソールを使用して確認することです。Redisコマンドラインクライアントを起動します。
|
1 |
redis-cli |
「ping」コマンドを実行します。
|
1 |
ping |
出力により、サーバーへの接続がまだ維持されていることが確認されます。次のテストは、キーの設定が許可されているかどうかを確認することです。値が「hello world」の「temp」キーを作成します。
|
1 |
set temp “hello world” |
「get」コマンドを使用して値を取得します。
|
1 |
get temp |
ここまですべて正常に動作していれば、Redisは問題なくキーの値を返すはずです。Redisコマンドラインクライアントを閉じます。
|
1 |
exit |
最後のテストは、Redisが停止または再起動されてもデータを永続化できるかどうかを確認することです。Redisサービスを再起動します。
|
1 |
sudo systemctl restart redis |
上記のコマンドの実行中にエラーが発生した場合は、“systemctl enable redis-server”コマンドを使用してください。
|
1 |
sudo systemctl enable redis-server |
Redisコマンドラインクライアントを起動し、以前に作成した「temp」キーの値を取得します。
|
1 2 |
redis-cli get temp |
これでRedisのテストは終了です。これで、Redisサーバーを目的の用途に使用する準備が整いました。
Redisのセキュリティ保護
現時点で、Redisは完全に動作しています。ただし、デフォルト設定の一部は最適なセキュリティを提供していません。更新しない場合、悪意のある攻撃者がその隙を利用してサーバーやそのデータにアクセスする可能性があります。このセクションでは、これらの脆弱性を軽減する方法を説明します。これらの手順は任意ですが、システムのセキュリティを強化するために実行することを強くお勧めします。
localhostへのバインド
デフォルトでは、Redisはlocalhostからのみアクセス可能です。ただし、Redisがリモートサーバー上に構成されている場合は、どこからでも接続できるように構成を更新する必要があります。ただし、localhostにバインドするほど安全ではない可能性があります。Redisをlocalhostに再バインドするには、テキストエディタでRedis構成ファイルを開きます。
|
1 |
sudo vim /etc/redis/redis.conf |
下にスクロールして、次の行を見つけます。コメントアウトされていないことを確認してください。
|
1 |
bind 127.0.0.1 ::1 |
ファイルを保存して閉じます。次に、変更をすぐに有効にするためにRedisサービスを再起動します。
|
1 |
sudo systemctl restart redis |
変更が成功したことを確認します。
|
1 |
sudo netstat -lnp | grep redis |
‘netstat: command not found’というエラーが発生した場合は、net-toolsをインストールするコマンド“sudo apt-get install net-tools”を使用してください。出力により、「redis-server」がlocalhost(127.0.0.1)に正常にバインドされていることが確認され、最近行われた変更が反映されています。他のIPアドレス(たとえば0.0.0.0)がある場合は、構成ファイルを再確認し、Redisサーバーを再度再起動してください。
Redisパスワードの構成
パスワードを構成すると、Redisの組み込みセキュリティ機能である「AUTH」コマンドを使用できるようになります。クライアントがデータベースにアクセスするには認証が必要です。デフォルトでは、Redisにパスワードは構成されていません。パスワードはRedis構成ファイルで宣言する必要があります。テキストエディタで構成ファイルを開きます。
|
1 |
sudo vim /etc/redis/redis.conf |
次に、以下の行までスクロールし、コメント解除します。
|
1 |
requirepass foobared |
コメント解除後、「foobared」がデフォルトのパスワードになります。任意のパスワードに変更してください。Redisに関しては、パスワードの強度が大きな懸念事項となります。Redisは高速なパフォーマンスのサーバーであるため、ブルートフォース攻撃を使用して悪用される可能性が比較的高くなります。そのため、構成ファイルには次の警告が直接含まれています。非常に強力なランダムパスワードを生成する簡単な例を以下に示します。OpenSSLコマンドを使用してランダムな文字列を生成します。
|
1 |
echo $(openssl rand 60 | openssl base64 -A) |
新しいパスワードを設定した後、変更を有効にするためにRedisサービスを再起動します。
|
1 |
sudo systemctl restart redis.service |
パスワードが正常に適用されたかどうかをテストします。Redisコマンドラインコンソールを起動します。
|
1 |
redis-cli |
次に、新しいキーを設定してみます。
|
1 |
set user “cloudsigma” |
このアクションに対する認証がないため、Redisはリクエストを拒否します。サーバー上でアクションを実行するには、まずユーザーが認証される必要があります。次のコマンドを使用してユーザーを認証します。
|
1 |
auth <password> |
パスワードが正しい場合、Redisはアクションを承認します。これで、Redisはサーバー機能へのアクセスを許可します。
|
1 2 |
set user “cloudsigma” get user |
これで、Redisコンソールでの作業は終了です。コンソールを閉じることができます。
|
1 |
exit |
危険なコマンドの名前変更
Redisでは、危険とみなされる特定のコマンドの名前を変更したり、完全に無効にしたりすることができます。これは、Redisのもう1つの重要な組み込みセキュリティ機能です。なぜコマンドが危険とみなされるのでしょうか?権限のないユーザーによって実行された場合、これらのコマンドはサーバー内のデータを再構成、破壊、または消去する可能性があります。多くの危険なRedisコマンドを無効化または名前変更することは一般的な手法です。コマンドのセキュリティ上の脅威は状況によって異なることに注意してください。たとえば、以下のコマンドの一部は日常的に必要な場合があります。そのような場合、無効化することは推奨されません。そのような状況では、コマンドの名前を変更する方が有益な場合があります。以下は、危険とみなされるコマンドの簡単なリストです。これは、Redisサーバーのセキュリティを強化するための良い出発点です。
- FLUSHDB
- FLUSHALL
- KEYS
- PEXPIRE
- DEL
- CONFIG
- SHUTDOWN
- BGREWRITEAOF
- BGSAVE
- SAVE
- SPOP
- SREM
- RENAME
- DEBUG
コマンドの名前を変更または無効にするには、Redis設定ファイルで宣言する必要があります。Redis設定ファイルを開き、次の行を追加します。ここでは、「rename-command」を使用してコマンドを空の文字列に名前変更しています。必要な数だけエントリを追加してください。
|
1 |
sudo vim /etc/redis/redis.conf |
|
1 2 3 4 |
$ rename-command FLUSHDB "" $ rename-command FLUSHALL "" $ rename-command SHUTDOWN "" $ rename-command CONFIG "" |
同様に、コマンドを別の名前に変更することも可能です。特定の状況では、これにより柔軟性が向上する場合があります。
|
1 2 3 4 |
$ rename-command FLUSHDB "command_1" $ rename-command FLUSHALL "command_2" $ rename-command SHUTDOWN "command_3" $ rename-command CONFIG "command_4" |
ファイルを保存してエディタを終了します。変更を有効にするには、Redisサービスを再起動します。
|
1 |
sudo systemctl restart redis.service |
変更を確認します。次に、Redisコンソールを起動し、アクセスを認証します。
|
1 2 |
redis-cli auth <password> |
「CONFIG」コマンドが無効化または名前変更されたと仮定します。次の「CONFIG」コマンドを使用してみてください。失敗します。
|
1 |
config get requirepass |
コマンドが無効化されている場合、再有効化されるまでアクセスできません。ただし、名前が変更されている場合は、新しいエイリアスを使用します。
|
1 |
command_4 get requirepass |
結論
このチュートリアルでは、Redisのインストール、セキュリティ保護、設定、および検証の方法を説明しました。また、Redisの組み込みセキュリティ機能を使用して、攻撃に対して脆弱になりにくくする方法も示しました。ただし、誰かがすでにサーバーにログインしている場合、Redis固有のセキュリティ機能を回避することは非常に容易です。そのため、Redisサーバーへのアクセスを保護するためのファイアウォールを設置することが極めて重要です。
ハッピーコンピューティング!






コメント
コメントはまだありません。最初のコメントを投稿しましょう。