🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Q&A

解決済

1回答

4752閲覧

Redisへのアクセス許可設定(指定したIPアドレスのみRedis接続許可)方法

teratail00000

総合スコア0

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

0グッド

0クリップ

投稿2021/03/30 14:47

Redisの設定変更(指定したIPアドレスからの接続のみ)で以下の問題がありますので、どなたかご教示ご助言いただければ幸いです。

基本的なパラメータ変更であり、根本的・基本的な原因・単純なミスかとも思われますが、色々切り分けしてみた結果、未だに原因不明です。
Redisは何度か経験はありますが、この手のパラメータ調整等の経験は少ないので、鋭意検証中なのですが、急ぎ対応したく、
こちらの検証と並行して、こちらにも質問させていただきます。

前提・実現したいこと

CentOSにインストールしたRedisにて、接続元IPアドレスによるアクセス制限をかけたい(指定したIPからのRedis接続のみを許可したい)。
接続元IPアドレス制限は、redis.conf の bind や protected-mode にて制御できる認識。
※bindパラメータの意味がいわゆるhttpdのbindだとすると、このbind設定で接続元IP許可する、というのはアクセス許可と多少意味合いが違うかと思いつつも、
ネットやredis.confのExcampleの情報をみると bind 設定で出来きるとの認識で今のところいます。

・サーバA 192.168.10.1 : Redisサービスが稼働しているサーバ
・サーバB 192.168.10.2 :このサーバからのみ上記Redisサーバへ接続を許可したい
※各バージョン情報は補足情報欄を参照

発生している問題・エラーメッセージ

redis.confのbind設定にて、接続を許可したいIPアドレス(192.168.10.2)を記載しても、そのIPアドレスからRedisへ接続できない。
なお、bind 0.0.0.0 等、全許可にすると 192.168.10.2 から(その他サーバからも) Redisへ接続できるため、NW上には問題ない。

以下、redis.conf設定変更後の接続確認時のエラーメッセージ(これは本質とあまり関係ないログですが)。 ※Redisログに不審なログはなく、起動も正常に起動します(勿論、bindの設定・記載方法がおかしいときはそもそもRedis自体正常起動してきません)。 ◆接続不可時 <サーバBからサーバAのRedisへ接続時> # telnet 192.168.10.1 16379 Trying 192.168.10.1... telnet: connect to address 192.168.10.1: Connection refused → このように相手側から接続が拒否される <サーバAからlocalhostで自身のRedisへ接続時> # telnet localhost 16379 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. ping +PONG quit +OK → このように接続はOK ※上記ログは、便宜上、簡単な telnet での確認結果を記載していますが、curl -s telnet://localhost:16379 でも結果は同様 ※redis-cliでの接続確認まではしていない(redis-cliは他のサーバには入っていないため)

該当のソースコード

<redis.conf> bind 127.0.0.1   ← この設定を適宜編集(記載した内容は、以下の 試したこと欄 を参照) protected-mode yes ← この設定も yes or no で色々切り替えて検証を実施 port 16379

試したこと

上記ソースコード欄のbindとprotected-modeを色々切り分けて検証した結果いずれもNGです
以下、bind についてしか記載していないが、protected-mode yes/no のいずれに変更しても結果は同様。

  • ** 1. ローカルホストのみ許可 **

bind 127.0.0.1
→ OK(ローカルホストからのみ接続可能)※想定通り

--

  • ** 2. 許可したいサーバBのIPをそのままbindに設定 **

bind 127.0.0.1 192.168.10.2
→ NG(telnet localhostでしか接続できない。サーバB 192.168.10.2 からRedisへ接続できない)
IPを列挙して書いても意味がない

(試しに)サーバB 192.168.10.2 のみ許可
bind 192.168.10.2
→ NG(そもそも起動しない。bind に指定しているIPが自分ではないため起動しない)

--

  • ** 3. 上記 2 のIP記述順番を逆にして実施 **

bind 192.168.10.2 127.0.0.1
→ NG(上記 2 の結果と同様)

--

  • ** 4. 上記 3 の記述に IPv6 の ::1 を記載 **

bind 192.168.10.2 127.0.0.1 ::1
→ NG(上記 2 の結果と同様)

--

  • ** 5. redis.conf内の Example: の表記に合わせてbindを記載(2行で記載)**

bind 192.168.10.1 192.168.10.2
bind 127.0.0.1 ::1
→ NG(サーバA上での telnet localhost 以外から接続できない)。2行目の bind 127...しか効いていない

--

  • ** 6. bindにIPv6用の ::1 を記載しない **

bind 192.168.10.1 192.168.10.2
bind 127.0.0.1
→ NG(5 と同様)

--

補足情報(FW/ツールのバージョンなど)

OS:CentOS 7.6  ※VMwareでの仮想OS
Redisバージョン:6.0.11

なお、上記はOS上にそのまま入れたRedisについて記載していますが、本当はコンテナのRedisでアクセス許可設定を実現したい次第です。
コンテナのRedisの場合は、ローカルホストからのみの許可もできず(全許可はできる)、その切り分けとしてOSに普通に入れたRedisで上記のように設定している次第です。
そもそもredis.confで設定できることでなければ、CentOSのOSレベルでのIP制御としてもうiptablesかTCP Wrapperしかないかとは思ってはいますが、
できればRedisレイヤで制限をかけたい次第です。

以上、宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

OSSのRedisでは、redis.confで上記のような制限をかけれないことが分かりましたので、本件クローズします。

投稿2021/04/07 01:05

teratail00000

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問