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レイヤで制限をかけたい次第です。
以上、宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。