Redisの認証について

Redisでクライアントの認証を行う方法を調べました。

Redisのv3.2.3を使いました。


Redisの認証について

Redisの認証について、公式サイトでは、

Redis Secrity – Redis

に、おおよそ次のようなことが書かれている。

  • Redisはアクセス制御を実装していないが、小さな認証レイヤを提供している。
  • 認証レイヤはredis.confで有効にできる。
  • 認証レイヤが有効になっている場合は、認証されていないクライアントからのクエリを拒絶する。
  • クライアントはAUTHコマンドを使ってパスワード認証を行うことができる。
  • パスワードは管理者がredis.confにクリアテキストで設定する。

パスワードについては、

  • redisが高速にクエリを処理できること。そのため、短時間で大量のパスワードをテストできてしまう。
  • redisのパスワードは、redis.confに記載されつつ、クライアント側の設定として保持されるので、システム管理者がパスワードを記憶しておく必要がないこと。

から、brute force攻撃への耐性として十分に長い値を設定するべき。

それから、AUTHコマンドは他のコマンドと同様に暗号化されずにサーバに送信されるので、パケットを盗聴するのに十分なアクセス権を持つ攻撃者からは守られない、ともある。

設定ファイルで認証を有効にする

redisの設定ファイル(redis.conf, 6379.confなど)に、

requirepass パスワード

を追記し、redis-serverを起動する。

この状態でredis-cliを使ってアクセスすると、

$ redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.

のように認証エラーが表示されコマンドが拒否される。

redisの設定ファイルを編集しなくても、CONFIG SETコマンドを使うことで、動的にパスワードを設定することもできる。

クライアントの認証

クライアント側で認証をパススするには、AUTHコマンドを使用する。

$ redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6376> AUTH パスワード
OK
127.0.0.1:6379> keys *
1) "towers"
127.0.0.1:6379>

AUTHコマンドで認証されると、以降のコマンドが正常に実行される。


思ったよりシンプルな認証方式となっていました。