Ubuntu14.04でRedisのインストールを保護する方法

前書き ##

[ Redis](https://cloud.tencent.com/product/crs?from=10680)は、メモリ内のNoSQL、キー値キャッシュおよびストレージであり、ディスクに保存することもできます。

このチュートリアルでは、Redisサーバーの基本的なセキュリティを実装する方法を示します。

ただし、Redisは信頼できる環境信頼できるクライアントが使用するように設計されており、独自の強力なセキュリティ機能を備えていないことに注意してください。これを強調するために、[Redis公式ウェブサイト](http://redis.io/topics/security)からの引用を見ることができます:

Redisは、信頼できる環境で信頼できるクライアントがアクセスできるように設計されています。つまり、Redisインスタンスは通常、インターネットに直接公開されていないか、信頼できないクライアントがRedisTCPポートまたはUNIXソケットに直接アクセスできる環境です。 。 。 。一般的に、Redisは最大のセキュリティのために最適化されていませんが、最大のパフォーマンスとシンプルさのために最適化されています。

セキュリティのないパフォーマンスとシンプルさは、実際には惨事です。 Redisにいくつかの単純なセキュリティ機能があるとしても、賞賛するものは何もありません。これには、基本的な暗号化されていないパスワード、コマンドの名前変更と無効化が含まれます。実際のアクセス制御システムが不足しています。

ただし、既存のセキュリティ機能を構成することは、データベースのセキュリティを維持する上で依然として重要なステップです。

このチュートリアルでは、Redisが持ついくつかのセキュリティ機能と、Ubuntu14.04でのスタンドアロンRedisインストールのセキュリティを向上させる他のいくつかのシステムセキュリティ機能を構成する方法を学習します。

このガイドでは、Redisサーバーとクライアントアプリケーションが異なるホストまたは異なるデータセンターに配置されている状況については説明していないことに注意してください。 Redisトラフィックは、安全でないネットワークまたは信頼できないネットワークを通過する必要があります。インストールには、Redisマシン間でSSLプロキシまたは[V ](https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openV-server-on-ubuntu-14-04)を設定するなど、完全に異なる構成セットと、ここに示す構成が必要です。

前提条件

このチュートリアルでは、次のものが必要になります。

手順1-Redisが実行されていることを確認します

まず、SSHを使用してサーバーにログインします。

ssh username@server-ip-address

Redisが正しく機能しているかどうかを確認するには、Redisコマンドラインを使用します。 redis-cliコマンドは、Redisコマンドラインにアクセスするために使用されます。

redis-cli

Redisのパスワードを設定している場合は、接続後に認証を実行する必要があります。

auth your_redis_password
OK

データベースサーバーをテストします。

ping

応答:

PONG

書き出す:

quit

ステップ2-iptablesを使用してサーバーを保護します

iptablesの前提条件に従っている場合は、この手順をスキップしてください。または、あなたは今彼を終えることができます。

Redisは、サーバー上で実行されている単なるアプリケーションです。Redisには独自の実際のセキュリティ機能がないため、Redisを真に保護するための最初のステップは、実行されているサーバーを保護することです。

Ubuntu 14.04サーバーのような公開サーバーの場合、ファイアウォールの構成が最初のステップです。 (サーバーでファイアウォールを有効にします。TencentCloudの[CVM](https://cloud.tencent.com/product/cvm?from=10680)サーバーを使用している場合は、Tencent Cloudコンソールの[セキュリティグループ](https://console.cloud.tencent.com/cvm/securitygroup)で直接設定できます。)

このガイドを使用してファイアウォールルールを実装している場合、明示的に許可されていない限り、デフォルトではすべての着信トラフィックがドロップされるため、Redisにルールを追加する必要はありません。 Redisサーバーのデフォルトのスタンドアロンインストールはループバックインターフェイス(127.0.0.1またはlocalhost)でのみリッスンするため、デフォルトのポートでの着信トラフィックについて心配する必要はありません。

RedisのIPアドレスを明確に許可する必要がある場合は、 grepコマンド netstatの出力を介して、RedisがリッスンしているIPアドレスとバインドされたポートを確認できます。 4番目の列(つまり、** 127.0.0.1:6379 **列)は、Redisに関連付けられているIPアドレスとポートの組み合わせを示します。

sudo netstat -plunt | grep -i redis
tcp   00127.0.0.1:63790.0.0.0:*               LISTEN      8562/redis-server 1

このIPアドレスがファイアウォールポリシーで許可されていることを確認してください。

**ステップ3-localhost **にバインドする##

デフォルトでは、Redisサーバーにはlocalhostからのみアクセスできます。ただし、チュートリアルに従ってRedisマスターサーバーをセットアップする場合は、構成ファイルを更新して、任意の場所からの接続を許可してください。これは、localhostへのバインドほど安全ではありません。

編集のためにRedis構成ファイルを開きます。

sudo nano /etc/redis/redis.conf

この行を見つけて、コメントが外されていることを確認します(存在する場合は を削除します)。

bind 127.0.0.1

このファイルは引き続き使用するため、今は開いたままにしておきます。

手順4-Redisパスワードを設定する

[Ubuntu 14.04でRedisクラスターを構成する方法](https://cloud.tencent.com/developer/article/1346217?from=10680)を使用してRedisをインストールする場合は、そのパスワードを構成する必要があります。このセクションに従って、より安全なパスワードを設定できるかどうかを自分で決めることができます。そうでない場合、このセクションの手順は、データベースサーバーのパスワードを設定する方法を示しています。

Redisパスワードを構成すると、2つの組み込みセキュリティ機能の1つである authコマンドが有効になります。これは、データベースにアクセスするためにクライアントが認証する必要があります。パスワードはRedis構成ファイル / etc / redis / redis.confで直接構成されますが、前の手順でパスワードを開く必要があります。

SECURITYセクションまでスクロールし、コメントの説明を見つけます。

# requirepass foobared

を削除し、コメントを外し、 foobaredを非常に強力で非常に長い値に変更します。

自分でパスワードを作成する代わりに、 apg pwgenなどのツールを使用してパスワードを生成できます。パスワードを生成するためだけにアプリケーションをインストールしたくない場合は、以下の1行の手順を使用できます。この生成されたパスワードとは異なるパスワードを生成するには、引用符の単語を変更します。

echo "digital-ocean"| sha256sum

出力は次のようになります。

960 c3dac4fa81b4204779fd16ad7c954f95942876b9c4fb1a255667a9dbe389d

生成されたパスワードは発音されませんが、非常に強力で非常に長いパスワードが提供されます。これは、Redisが必要とするタイプのパスワードです。このコマンドの出力を requirepassの新しい値としてコピーして貼り付けた後、次のようになります。

requirepass 960c3dac4fa81b4204779fd16ad7c954f95942876b9c4fb1a255667a9dbe389d

より短いパスワードが必要な場合は、次のコマンドの出力を使用してください。繰り返しますが、引用符の単語を変更して、これと同じパスワードが生成されないようにします。

echo "digital-ocean"| sha1sum

今回は、出力がいくらか短くなります。

10 d9a99851a411cdae8c3fa09d7290df192441a9

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

sudo service redis-server restart

パスワードが有効かどうかをテストするには、Redisコマンドラインにアクセスしてください。

redis-cli

次の出力は、Redisパスワードが有効かどうかをテストするために使用される一連のコマンドを示しています。最初のコマンドは、検証前にキーを値に設定しようとします。

set key1 10

これは機能しないため、Redisはエラーを返します。

( error) NOAUTH Authentication required.

2番目のコマンドは、認証にRedis構成ファイルで指定されたパスワードを使用します。

auth your_redis_password

Redisは確認します。

OK

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

set key1 10
OK

get key1Redisにクエリを実行して新しいキーの値を取得します。

get key1
"10"

最後のコマンドは redis-cliを終了します。 exitを使用することもできます:

quit

次に、renameRedisコマンドを紹介します。

手順5-危険なコマンドの名前を変更する

Redisに組み込まれている別のセキュリティ機能を使用すると、危険と見なされる特定のコマンドの名前を変更したり、完全に無効にしたりできます。

許可されていないユーザーが実行すると、このようなコマンドを使用して、データを再構成、破棄、またはその他の方法で消去できます。認証パスワードと同様に、renameまたはdisableコマンドも、 / etc / redis / redis.confファイルの同じ SECURITYセクションで構成されます。

既知の危険なコマンドには、** FLUSHDB FLUSHALL KEYS PEXPIRE DEL CONFIG SHUTDOWN **、 ** BGREWRITEAOF BGSAVE SAVE SPOP SREM RENAME 、および DEBUG **。これは包括的なリストではありませんが、このリスト内のすべてのコマンドの名前を変更するか無効にすることは、良い出発点です。

コマンドを無効にするか名前を変更するかは、サイトによって異なります。悪用される可能性のあるコマンドを決して使用しないことがわかっている場合は、それを無効にすることができます。それ以外の場合は、名前を変更します。

Redisコマンドを有効または無効にするには、構成ファイルを再度開いて編集します。

sudo nano  /etc/redis/redis.conf

**これらは例です。自分にとって意味のあるコマンドを無効にするか、名前を変更するかを選択する必要があります。 **コマンドを自分でチェックして、[redis.io/commands](http://redis.io/commands)でそれらを悪用する方法を決定できます。

コマンドを無効にするか終了するには、次のように名前を空の文字列に変更します。

# 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 ""

コマンドの名前を変更するには、次の例に示すように、別の名前を付けます。名前が変更されたコマンドは、他の人が推測するのは難しいですが、覚えやすいはずです。あなたの人生を困難にしないでください。

rename-command CONFIG ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG

変更内容を保存。

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

sudo service redis-server restart

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

redis-cli

次に、** CONFIG コマンドの名前を ASC12_CONFIG **に変更したとすると、次の出力は、新しいコマンドが適用されたかどうかをテストする方法を示しています。

検証後:

auth your_redis_password
OK

configコマンドを使用する最初の試みは、名前が変更されているため失敗するはずです。

config get requirepass
( error) ERR unknown command 'config'

名前が変更されたコマンドは成功するはずです(大文字と小文字は区別されません)。

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

最後に、 redis-cliを終了できます。

exit

注:すでにRedisコマンドラインを使用してからRedisを再起動する場合は、再認証する必要があります。それ以外の場合、コマンドを入力すると、次のエラーが発生します。

NOAUTH Authentication required.

名前の変更コマンドに関しては、 / etc / redis / redis.conf SECURITYセクションの最後に警告ステートメントがあります。

Please note that changing the name of commands that are logged into the AOF file or transmitted to slaves may cause problems.

これは、名前が変更されたコマンドがAOFファイルにない場合、またはあるがAOFファイルがスレーブに配信されない場合、問題がないことを意味します。

したがって、コマンドの名前を変更するときは、このことに注意してください。コマンドの名前を変更するのに最適なタイミングは、AOF永続性を使用していないとき、またはインストール後、つまりRedisを使用するアプリケーションをデプロイする前です。

AOFを使用してマスタースレーブのインストールを処理する場合は、プロジェクトのGitHubの問題ページからこの回答を検討してください。以下は、著者の質問に対する回答です。

これらのコマンドは、送信されたのと同じ方法でAOFに記録され、スレーブにコピーされます。したがって、同じ名前変更がないインスタンスでAOFを再生しようとすると、コマンドを実行できないため、不整合(スレーブと同じ)が発生する可能性があります。

したがって、この状況で名前の変更を処理する最善の方法は、名前が変更されたコマンドがマスタースレーブインストールのすべてのインスタンスに適用されるようにすることです。

手順6-データディレクトリの所有権とファイルのアクセス許可を設定する

このステップでは、Redisインストールのセキュリティプロファイルを改善するために行うことができる所有権と権限の変更について検討します。これには、Redisへのアクセスが必要なユーザーのみがそのデータを読み取る権利を持つようにすることが含まれます。デフォルトでは、このユーザーは** redis **ユーザーです。

これを確認するために、親ディレクトリの長いリストでRedisデータディレクトリを見つけることができます。コマンドとその出力は次のとおりです。

ls -l /var/lib | grep redis
drwxr-xr-x 2 redis   redis   4096 Aug  609:32 redis

Redisデータディレクトリは** redis ユーザーによって所有されており、 redis **グループには補助アクセス許可が付与されていることがわかります。その部分は良いです。

フォルダのアクセス許可ではない部分は755です。Redisユーザーのみがフォルダとそのコンテンツにアクセスできるようにするには、アクセス許可を700に変更します。

sudo chmod 700/var/lib/redis

変更する必要があるその他のアクセス許可は、Redis構成ファイルのアクセス許可です。デフォルトでは、ファイル権限は644で、** root が所有し、 root **グループが2次所有権を持ちます。

ls -l /etc/redis/redis.conf
- rw-r--r--1 root root 30176 Jan 142014/etc/redis/redis.conf

この権限(644)は誰でも読み取り可能ですが、手順4で構成された暗号化されていないパスワードが含まれているため、お勧めできません。

所有権と権限を変更する必要があります。理想的には、** redis ユーザーが所有し、 root **ユーザーが二次所有する必要があります。これを行うには、次のコマンドを実行します。

sudo chown redis:root /etc/redis/redis.conf

次に、所有権を変更して、ファイルの所有者のみがファイルの読み取りや書き込みを行えるようにします。

sudo chmod 600/etc/redis/redis.conf

次の方法で、新しい所有権と権限を確認できます。

ls -l /etc/redis/redis.conf
total 40-rw-------1 redis root 29716 Sep 2218:32/etc/redis/redis.conf

最後に、Redisを再起動します。

sudo service redis-server restart

結論として ##

誰かがサーバーにログインすると、実装したRedis固有のセキュリティ機能を簡単にバイパスできることに注意してください。したがって、最も重要な安全機能は、フェンスを飛び越えるのを非常に困難にすることです。

それはあなたのファイアウォールでなければなりません。

サーバーのセキュリティを新しいレベルに上げるために、OSSECなどの侵入検出システムを構成できます。

信頼できないネットワークを介してRedis通信を保護しようとしている場合は、[公式Redisセキュリティガイド](http://redis.io/topics/security)でRedis開発者が推奨しているように、SSLプロキシを使用する必要があります。 Redis通信を保護するためのSSLプロキシの設定は別のトピックです。

名前の変更セクションにRedisコマンドの完全なリストを含めませんでした。ただし、自分で確認して、[redis.io/commands](http://redis.io/commands)で[them](http://redis.io/commands)を悪用する方法を決定できます。

その他のUbuntuチュートリアルについては、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。


参照:「Ubuntu14.04でRedisのインストールを保護する方法」

Recommended Posts

Ubuntu14.04でRedisのインストールを保護する方法
Ubuntu14.04でNginxを保護する方法
Ubuntu14.04でTomcatのインストールを最適化する方法
Ubuntu14.04でRedisクラスターを構成する方法
Ubuntu16.04でRedisレプリケーションを構成する方法
Ubuntu16.04にphpMyAdminをインストールして保護する方法
Ubuntu16.04にphpMyAdminをインストールして保護する方法
Ubuntu14.04でRedisデータをバックアップおよび復元する方法
Ubuntu20.04にRubyをインストールする方法
Ubuntu20.04にMemcachedをインストールする方法
Ubuntu20.04にJavaをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVirtualBoxをインストールする方法
Ubuntu20.04にElasticsearchをインストールする方法
UbuntuにProtobuf3をインストールするための詳細なチュートリアル
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu16.04にNode.jsをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVagrantをインストールする方法
Ubuntu14.04にBacula-Webをインストールする方法
Ubuntu16.04にPostgreSQLをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu18.04にAnaconda3をインストールする方法
Ubuntu18.04にMemcachedをインストールする方法
Ubuntu16.04にJenkinsをインストールする方法
Ubuntu14.04にMemSQLをインストールする方法
Ubuntu20.04にGoをインストールする方法
Ubuntu16.04にMongoDBをインストールする方法
Ubuntu14.04にMailpileをインストールする方法
Ubuntu16.04にPrestaShopをインストールする方法
Ubuntu14.04でPHP7にアップグレードする方法
Ubuntu20.04にSkypeをインストールする方法
Ubuntu20.04にJenkinsをインストールする方法
Ubuntu18.04にPython3.8をインストールする方法
Ubuntu18.04にKVMをインストールする方法
Ubuntu20.04にKVMをインストールする方法
ubuntu14.04にopencv3.0.0をインストールする方法
Ubuntu20.04にAnacondaをインストールする方法
Ubuntu16.04にPrometheusをインストールする方法
Ubuntu18.04にJenkinsをインストールする方法
Ubuntu14.04にDjangoをデプロイする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にRをインストールする方法
Ubuntu16.04にMoodleをインストールする方法
Ubuntu14.04にSolr5.2.1をインストールする方法
Ubuntu16.04にTeamviewerをインストールする方法
Ubuntu20.04にMariaDBをインストールする方法
Ubuntu20.04にNginxをインストールする方法
Ubuntu20.04にMonoをインストールする方法
Ubuntu20.04にGoをインストールする方法
Ubuntu20.04にZoomをインストールする方法
Ubuntuでソフトウェアをアンインストールする方法
Ubuntu16.04にNginxをインストールする方法
Ubuntu20.04にOpenCVをインストールする方法
Ubuntu20.04にSpotifyをインストールする方法
Ubuntu18.04にPostmanをインストールする方法
Ubuntu16.04にGo1.6をインストールする方法
Ubuntu18.04にGoをインストールする方法
Ubuntu14.04にMySQLをインストールする方法
Ubuntu20.04にPostgreSQLをインストールする方法