web-dev-qa-db-ja.com

Redis 3.2.6 Sentinelでプロテクトモードを無効にするにはどうすればよいですか?

次のエラーメッセージで推奨されているすべてのことを試みました。

(エラー)DENIED Redisは保護モードで実行されています。保護モードが有効になっているため、バインドアドレスが指定されておらず、認証パスワードがクライアントに要求されていません。このモードでは、接続はループバックインターフェイスからのみ受け入れられます。外部コンピューターからRedisに接続する場合は、次の解決策のいずれかを採用できます。1)保護モードを無効にして、同じホストサーバーからRedisに接続することにより、ループバックインターフェイスからコマンド「CONFIG SET protected-mode no」を送信します。は実行中ですが、MAKE SURE Redisにはインターネットからアクセスできません。この変更を永続的にするには、CONFIG REWRITEを使用します。 2)または、Redis構成ファイルを編集し、保護モードのオプションを「no」に設定してサーバーを再起動することで、保護モードを無効にすることもできます。 3)テストのためだけにサーバーを手動で起動した場合は、「-protected-mode no」オプションを使用してサーバーを再起動します。 4)バインドアドレスまたは認証パスワードを設定します。注:サーバーが外部からの接続の受け入れを開始するには、上記のいずれかを実行するだけで済みます。

私の/etc/redis/sentinel.conf

デーモン化yes 
 sentinel myid XXX
センチネルモニターマスター XXX 6379 2 
 sentinel down-after-milliseconds master 60000 
 sentinel config-Epoch master 0 
 protected-mode no 
 bind 0.0.0.0 
 port 26379

編集: 私の/etc/redis/redis.conf

ポート6379 
 bind 0.0.0.0 
 protected-mode no

sentinel auth-pass master XXXも追加してみました。

私のバックエンド全体はプライベートサブネット上にあります。同じプライベートネットワークからファイアウォールの背後にあるデータセンターにVPN接続していますが、それでもローカルにしか接続できず、イライラするエラーメッセージが表示されません。

サーバー環境: Debian 8、Redis 3.2.6
クライアント環境: Ubuntu 16.10、redis-cli 3.2.1
Redisインスタンス: 3
Sentinelインスタンス: 3

私は1つだけではなく、提案されていることの3/4を実行しました(コマンドラインフラグを設定していません)。誰かが何かアドバイスやアイデアを持っていますか?エラーメッセージ、ドキュメント、Stackoverflow、Google、試行錯誤からは理解できなかった何かが明らかに欠けています。ソースコードに飛び込む前に、まずここに質問を投稿すると思いました。

どんな助けでもありがたいです。ありがとう!

...そして、はい、設定変更後にデーモンを再起動しました。 :)

11
pestilence669

https://www.reddit.com/r/redis/comments/3zv85m/new_security_feature_redis_protected_mode/

ご存じのとおり、インターネットに公開された保護されていないRedisインスタンスからいくつかの問題が発生しました。デフォルトで127.0.0.1への制限付きバインディングが使いやすさの問題になり、さらに悪いことに、問題を修正できない理由をブログ記事で説明しました(「bind」ステートメントにコメントして再起動するだけです!)。

同じブログ投稿がスクリプトキディがRedisインスタンスに侵入するために頻繁に使用した攻撃を紹介しました(すでにこれを実行できる深刻なセキュリティ研究者がいると思います)。

そのため、私はRedis 3.2の公式リリースの前に最終的に何かをすることを決めました:保護モードがその結果であり、3.2 RC2にマージされます。

このコミットにより導入された機能は、unstableブランチですでに利用可能です。これがどのように機能するかです。

次の場合のみ:保護モードが有効になっている(これは、構成ファイルと構成なしのデフォルトの両方でのデフォルトです)。

AND AUTHパスワードが設定されていない場合。

AND IF「バインド」ディレクティブは、Redisを特定のインターフェイスに制限するために使用されません。

その後、RedisはループバックIPv4およびIPv6アドレスからの接続のみを受け入れます。外部接続は、何が起こっているのかをユーザーに知らせるエラーをクライアントに送信するためだけに受け入れられます。

> PING

(エラー)DENIED Redisは保護モードで実行されています。保護モードが有効になっているため、バインドアドレスが指定されておらず、認証パスワードがクライアントに要求されていません。

このモードでは、接続はルックバックインターフェースからのみ受け入れられます。外部コンピューターからRedisに接続する場合は、次のソリューションのいずれかを採用できます。

1)サーバーが実行している同じホストからRedisに接続して、ループバックインターフェースからコマンド「CONFIG SET protected-mode no」を送信してプロテクトモードを無効にします。この変更を永続的にするには、CONFIG REWRITEを使用します。

2)または、Redis構成ファイルを編集し、保護モードのオプションを「no」に設定してサーバーを再起動することで、保護モードを無効にすることもできます。

3)テスト目的でサーバーを手動で起動した場合は、-portected-mode noオプションを使用してサーバーを再起動します。

4)バインドアドレスまたは認証パスワードを設定します。注:サーバーが外部からの接続の受け入れを開始するには、上記のいずれかを実行するだけで済みます。

これにより、接続を拒否する代わりに手掛かりをユーザーに提供しながら、妥当な方法でエラーを保護する必要があります。 Redis 3.2 RC2にマージされる前に、必要に応じてこの機能を変更できるように、フィードバックを共有してください。ありがとう。

1
Allen