Redisのポート番号(6379)とは?設定・変更方法をわかりやすく徹底解説
はじめに
現代のWebアプリケーションやサービス開発において、高速なデータアクセスは成功の鍵を握ります。その中で、インメモリデータベースとして圧倒的な人気とシェアを誇るのが「Redis」です。シンプルなキーバリューストアでありながら、リスト、ハッシュ、セットといった多彩なデータ構造をサポートし、その驚異的なパフォーマンスからキャッシュサーバー、メッセージブローカー、セッション管理など、多岐にわたる用途で活用されています。
Redisを使い始めると、必ずと言っていいほど目にする数字があります。それが「6379」というポート番号です。多くのチュートリアルやドキュメントで、当たり前のようにこの番号が使われていますが、「なぜ6379番なのか?」「この番号は変更しても良いのか?」「変更する必要があるのはどんな時か?」といった疑問を抱いたことはないでしょうか。
この記事では、Redisの心臓部とも言えるネットワーク通信の入り口、ポート番号6379に徹底的にフォーカスします。単なる設定方法の解説にとどまらず、以下の内容を網羅的に、そして初心者の方にも分かりやすく解説していきます。
- ネットワークの基本: IPアドレスとポート番号の役割とは?
- 6379番の由来: なぜRedisはこのユニークな番号を選んだのか?
- ポート変更の重要性: セキュリティと運用効率を高めるためのポート変更戦略。
- 実践的な変更手順: 設定ファイルの編集から、ファイアウォールの設定までをステップ・バイ・ステップで解説。
- 高度なトピック: Redis SentinelやCluster、UNIXドメインソケット利用時のポート設定。
この記事を読み終える頃には、あなたはRedisのポート番号について深い知識を身につけ、自信を持って本番環境のRedisサーバーを設計・運用できるようになっているはずです。それでは、Redisとポート番号6379の奥深い世界へ一緒に旅立ちましょう。
第1章: ポート番号とは何か? – ネットワークの基本を理解する
Redisのポート番号の話に入る前に、まずはその土台となる「ポート番号」そのものの役割について理解を深めましょう。ネットワーク通信の基本を掴むことが、Redisをより安全かつ効率的に運用するための第一歩です。
1-1. IPアドレスとポート番号の関係:住所と部屋番号
コンピュータがネットワーク上で互いに通信するためには、相手を特定するための「住所」が必要です。この役割を果たすのがIPアドレス(例: 192.168.1.10
や203.0.113.55
)です。IPアドレスによって、世界中の無数のコンピュータの中から、通信したい特定の1台を指し示すことができます。
しかし、現代のコンピュータは、ウェブブラウジング、メールの送受信、ファイル転送、データベースアクセスなど、複数のアプリケーションを同時に実行しています。IPアドレスだけでは、サーバーに届いたデータが「どのアプリケーション宛」のものなのか区別できません。
ここで登場するのがポート番号です。ポート番号は、IPアドレスという「建物の住所」に対する「部屋番号」や「受付窓口」のようなものだと考えると非常に分かりやすいです。
- IPアドレス: 〇〇ビル(特定のコンピュータ)
- ポート番号:
- 80番窓口: Webサーバー(HTTP)さん宛
- 22番窓口: SSH(リモートログイン)さん宛
- 6379番窓口: Redisサーバーさん宛
このように、ポート番号があるおかげで、1つのIPアドレスを持つサーバーは、複数の異なるサービス(アプリケーション)を同時に提供し、外部からのリクエストを適切に振り分けることができるのです。
1-2. TCP/IPとポート番号
私たちが普段利用しているインターネット通信の多くは、TCP/IPというプロトコルスイート(通信規約の集まり)に基づいています。Redisも、クライアントとサーバー間の通信にTCP (Transmission Control Protocol) を使用します。
TCPは、通信の信頼性を重視するプロトコルです。データを送る前に、送信側と受信側で「コネクション」と呼ばれる仮想的な通信路を確立します。このコネクションを通じて、データが順番通りに、欠けることなく相手に届いたことを確認しながら通信を行います。この信頼性の高い通信を実現するプロセスにおいて、ポート番号は不可欠な役割を果たします。
-
サーバー側 (Redis):
- ソケット生成: 通信の出入り口となる「ソケット」を作成します。
- バインド (Bind): 作成したソケットを、自身のIPアドレスと特定のポート番号(例: 6379)に紐付けます。これにより、「このIPアドレスの6379番ポートでリクエストを待ち受けます」という状態になります。
- リッスン (Listen): クライアントからの接続要求を待ち受ける状態になります。
-
クライアント側 (アプリケーション):
- ソケット生成: 同様にソケットを作成します。
- コネクト (Connect): サーバーのIPアドレスとポート番号(例:
127.0.0.1
の6379
番)を指定して、接続を要求します。
この一連の流れを経てコネクションが確立され、データの送受信が開始されます。Redisが安定して動作するのは、このTCPという信頼性の高い土台の上で通信を行っているからです。
1-3. ポート番号の分類
ポート番号は0から65535までの整数値ですが、その役割に応じて大きく3つの範囲に分類されています。これはIANA (Internet Assigned Numbers Authority) という組織によって管理されています。
範囲 | 名称 | 説明 | 代表例 |
---|---|---|---|
0 – 1023 | Well-known Ports (ウェルノウンポート) | 主要なプロトコルやサービスのために予約されているポート。一般的に、利用には管理者権限が必要。 | 22 (SSH), 80 (HTTP), 443 (HTTPS), 53 (DNS) |
1024 – 49151 | Registered Ports (登録済みポート) | 特定のアプリケーションやサービスが利用するためにIANAに登録されているポート。重複を避けるために登録が推奨される。 | 3306 (MySQL), 5432 (PostgreSQL), 6379 (Redis) |
49152 – 65535 | Dynamic/Private Ports (動的/プライベートポート) | 特定の用途に予約されておらず、クライアント側が通信の際に一時的に使用するポート(エフェメラルポート)など、自由に利用できる。 | – |
この分類から分かるように、Redisが使用する6379番は「登録済みポート」の範囲に属します。これは、Redisというアプリケーションが公式に使用するポートとしてIANAに登録されていることを意味します。この「公式のデフォルトポート」という点が、次の章で解説するRedisと6379番の深い関係につながっていきます。
第2章: Redisとポート番号6379の深い関係
なぜ数あるポート番号の中から、Redisは「6379」という一見すると中途半半端な番号を選んだのでしょうか。そこには、開発者の遊び心と、デフォルトポートであることの利便性が隠されています。
2-1. なぜRedisは6379番を使うのか? – 歴史と由来
Redisのデフォルトポートが6379である理由には、技術的な必然性があるわけではありません。その由来は、Redisの生みの親であるSalvatore Sanfilippo氏(通称: antirez)のユニークなセンスにあります。
この番号は、携帯電話のキーパッド(テンキー)で「MERZ」と打つと「6379」になることに由来します。
2: ABC
3: DEF
4: GHI
5: JKL
6: MNO <- M
7: PQRS
8: TUV
9: WXYZ
* M: 6
* E: 3
* R: 7
* Z: 9
「MERZ」とは、イタリアの有名な歌手でありショーガールでもあるAlessia Merzさんの名前です。Sanfilippo氏が彼女のファンであったことから、この名前に関連する番号をポート番号として選んだ、という逸話が広く知られています。
このような遊び心のある命名は、開発者に親しみやすさを感じさせ、一度聞いたら忘れにくいという効果も生み出しました。技術的な理由ではなく、人間的なストーリーが背景にある点が、Redisというプロダクトが持つ魅力の一つとも言えるでしょう。
2-2. ポート6379が意味するもの
6379番がRedisの「公式デフォルトポート」であることには、実用的なメリットとデメリットが存在します。
メリット:
-
設定の簡略化:
Redisをインストールして起動すると、デフォルトで6379番ポートをリッスンします。クライアント側も、ホスト名やIPアドレスさえ指定すれば、ポート番号を省略しても自動的に6379番に接続を試みます。これにより、開発者は煩雑な設定をすることなく、すぐにRedisを使い始めることができます。 -
エコシステムの標準:
世界中のRedis関連ツール、ライブラリ、フレームワーク、ドキュメントが、6379番を前提として作られています。何か問題が発生した際に情報を探す場合も、まずは6379番ポートでの接続を前提とした解説が見つかることが多く、学習コストやトラブルシューティングのコストを低減させます。
デメリット:
- セキュリティリスクの増大:
デフォルトポートであるということは、攻撃者にとっても「そこにRedisサーバーがいる可能性が高い」という格好の標的になることを意味します。攻撃者は、インターネット上で6379番ポートが開いているサーバーを自動的にスキャン(ポートスキャン)し、脆弱性のあるRedisサーバーを見つけ出して攻撃を仕掛けてきます。認証が設定されていなかったり、古いバージョンのRedisを使っていたりすると、データ漏洩やサーバー乗っ取りの被害に遭う危険性が高まります。
このデメリットこそが、次の章で詳しく解説する「ポート番号を変更すべき理由」の最も大きな動機となります。
2-3. Redisクライアントはどのようにしてポート6379に接続するのか?
実際にクライアントがどのようにRedisサーバーに接続するのか、具体例を見てみましょう。
1. redis-cli
(コマンドラインインターフェース)
Redisに付属する公式クライアントツール redis-cli
は、最も基本的な接続方法です。
“`bash
ポートを指定しない場合、デフォルトで127.0.0.1:6379に接続しようとする
$ redis-cli
127.0.0.1:6379> PING
PONG
“`
もしRedisが異なるポート(例えば16379番)で動作している場合は、-p
オプションで明示的に指定する必要があります。
“`bash
ポート16379に接続する
$ redis-cli -p 16379
127.0.0.1:16379> PING
PONG
“`
2. プログラミング言語のライブラリ
アプリケーションからRedisを利用する場合、各言語向けのライブラリを使用するのが一般的です。これらのライブラリも、多くがデフォルトで localhost
(127.0.0.1) の 6379
番ポートに接続するように設計されています。
- Python (
redis-py
)
“`python
import redis
引数を何も指定しないと、host=’localhost’, port=6379 に接続
r = redis.Redis()
サーバーに’PING’コマンドを送り、’PONG’が返ってくるか確認
print(r.ping()) # True
“`
ポート番号を変更した場合は、インスタンス生成時に引数で指定します。
“`python
import redis
ポート16379に接続
r = redis.Redis(host=’localhost’, port=16379, db=0)
print(r.ping())
“`
- Node.js (
ioredis
)
“`javascript
const Redis = require(“ioredis”);
// 引数なしの場合、”redis://127.0.0.1:6379″ に接続
const redis = new Redis();
redis.ping((err, result) => {
console.log(result); // “PONG”
});
“`
ポート番号を変更した場合は、接続文字列(URI)やオブジェクトで指定します。
“`javascript
const Redis = require(“ioredis”);
// ポート16379に接続
const redis = new Redis(“redis://127.0.0.1:16379”);
// もしくは
// const redis = new Redis({ port: 16379 });
redis.ping((err, result) => {
console.log(result);
});
“`
このように、Redisのエコシステム全体が「6379」を標準として扱っているため、私たちはその恩恵を受けて手軽に開発を始められます。しかし、本番環境を見据えるならば、この「手軽さ」に潜むリスクを理解し、次章で述べる対策を講じることが極めて重要になります。
第3章: Redisのポート番号を変更すべき理由 – セキュリティと運用の観点から
開発環境ではデフォルトの6379番ポートで問題ありませんが、本番環境やそれに準ずる環境では、ポート番号を変更することが強く推奨されます。その理由は、大きく分けて「セキュリティリスクの低減」と「複数インスタンスの運用」の2つです。
3-1. セキュリティリスクの低減 (Security through Obscurity)
前述の通り、6379番はRedisのデフォルトポートとして世界中に知られています。これは、悪意のある攻撃者にとって、攻撃対象を探すための絶好の手がかりとなります。
攻撃者は、特定のポート(この場合は6379番)が開いているIPアドレスを無差別にスキャンするプログラムを常に動かしています。もしあなたのサーバーのファイアウォール設定が甘く、インターネットから6379番ポートにアクセスできる状態になっていると、攻撃者に「ここにRedisサーバーがあるぞ!」と教えているようなものです。
攻撃者は、発見したRedisサーバーに対して次のような攻撃を試みます。
* 認証なしでのアクセス: もしパスワード認証(requirepass
)が設定されていなければ、誰でもサーバーに接続し、データを盗んだり、改ざん・削除したりすることが可能です。
* 脆弱性を突いた攻撃: 古いバージョンのRedisに存在する既知の脆弱性を利用して、サーバーの権限を奪取しようとします。
* 設定不備の悪用: 特定のコマンド(CONFIG
など)が外部から実行できる状態になっていると、サーバーの設定を勝手に変更されてしまう可能性があります。
ここで、ポート番号をデフォルトの6379から、予測されにくい別の番号(例: 23581番)に変更したとします。すると、6379番だけをスキャンしている多くの自動化された攻撃からは、あなたのRedisサーバーが見えなくなります。これにより、攻撃の第一段階を回避できる可能性が格段に高まります。
このアプローチは「Security through Obscurity (隠蔽によるセキュリティ)」と呼ばれます。つまり、システムの内部情報(この場合はポート番号)を隠すことで、セキュリティを向上させようという考え方です。
ただし、非常に重要な注意点があります。
ポート番号の変更は、あくまでセキュリティ対策の一環であり、それ単体で完璧な防御にはなりません。本気の攻撃者は、6379番だけでなく、すべてのポート(0〜65535)をスキャンしてくる可能性があります。
したがって、ポート番号の変更は、以下のような他の基本的なセキュリティ対策と必ず組み合わせて実施する必要があります。
- ファイアウォール: 必要なIPアドレスからのみアクセスを許可し、それ以外はすべてブロックする。
- 認証設定:
requirepass
ディレクティブで強力なパスワードを設定する。 - bindディレクティブ:
bind 127.0.0.1 ::1
のように設定し、サーバー自身からのアクセス(ローカルホスト)のみを許可する。これにより、外部からの直接接続を防ぎます。 - コマンドのリネーム:
CONFIG
やFLUSHALL
のような危険なコマンドを、推測されにくい名前に変更する。 - 定期的なアップデート: Redisを常に最新の安定版に保ち、脆弱性を修正する。
ポート番号の変更は、これらの多層的な防御の最初の「とっかかり」として、非常に有効な手段なのです。
3-2. 複数インスタンスの運用
1台の物理サーバーや仮想マシン上で、複数のRedisインスタンスを同時に動かしたいケースは珍しくありません。
- 用途別の分離: 本番用、ステージング用、開発用のRedisを1台のサーバーで管理したい。
- サービスごとの分離: マイクロサービスアーキテクチャで、各サービスが独立したRedisインスタンスを持ちたい。
- 機能ごとの分離: 同じアプリケーション内でも、キャッシュ用とジョブキュー用でRedisインスタンスを分けたい。
このような場合、すべてのRedisインスタンスが同じ6379番ポートを使おうとすると、「ポートの衝突 (Port Conflict)」が発生します。1つのポートは、同時に1つのプロセスしか使用できないため、2つ目以降のRedisインスタンスは起動に失敗してしまいます。
この問題を解決するためには、各Redisインスタンスにそれぞれ異なるポート番号を割り当てる必要があります。
- RedisインスタンスA:
port 16379
- RedisインスタンスB:
port 16380
- RedisインスタンスC:
port 16381
このようにポートを分けることで、1台のサーバーリソースを効率的に活用し、複数の独立したRedis環境を共存させることが可能になります。
3-3. コンテナ環境(Dockerなど)での注意点
Dockerなどのコンテナ技術を利用してRedisを動かす場合、ポートの考え方が少し異なりますが、ここでもポート管理は重要です。
docker run
コマンドで -p
(または --publish
) オプションを使うと、ホストマシン(Dockerが動いているサーバー)のポートと、コンテナ内のポートをマッピングできます。
“`bash
ホストのポート6379を、コンテナ内のポート6379にマッピングする
$ docker run -d –name my-redis -p 6379:6379 redis
“`
このコマンドの -p 6379:6379
の部分は <ホストのポート>:<コンテナのポート>
を意味します。Redisコンテナ自体は、コンテナの閉じたネットワーク空間内でデフォルトの6379番ポートで待機しています。そして、ホストマシンの6379番ポートに来た通信が、コンテナ内の6379番ポートに転送(フォワーディング)される仕組みです。
ここで、前述の「複数インスタンスの運用」と同じ状況を考えてみましょう。2つ目のRedisコンテナを同じホストで起動しようとすると、ホストの6379番ポートは既に使用されているため、エラーになります。
この場合、ホスト側のポート番号を変えることで対応します。
“`bash
1つ目のコンテナ
$ docker run -d –name redis-A -p 16379:6379 redis
2つ目のコンテナ
$ docker run -d –name redis-B -p 16380:6379 redis
“`
この設定では、
* ホストの16379番ポートへのアクセスは、redis-A
コンテナ内の6379番に転送されます。
* ホストの16380番ポートへのアクセスは、redis-B
コンテナ内の6379番に転送されます。
コンテナ内部のRedisはどちらも6379番で動いていますが、ホスト側から見るとポート番号が異なるため、衝突することなく両方のインスタンスにアクセスできます。このように、コンテナ環境においてもポート番号の管理と変更は、システムを柔軟に構築するための必須知識となります。
第4章: 実践!Redisのポート番号を変更する手順
それでは、実際にRedisのポート番号を変更する具体的な手順を、ステップ・バイ・ステップで見ていきましょう。ここでは、LinuxサーバーにインストールされたRedisを想定して解説します。
目標: デフォルトの 6379
番ポートを 16379
番に変更する。
4-1. 準備:設定ファイルの場所を確認する
Redisの動作は、redis.conf
という設定ファイルによって制御されます。ポート番号の変更も、このファイルを編集することで行います。まずは、このファイルがどこにあるかを確認しましょう。
インストール方法によって場所は異なりますが、一般的には以下のいずれかのパスにあります。
- APTやYUMなどのパッケージマネージャでインストールした場合:
/etc/redis/redis.conf
/etc/redis.conf
- ソースコードからコンパイルしてインストールした場合:
/usr/local/etc/redis.conf
- ソースコードを展開したディレクトリ内
もし場所がわからない場合は、find
コマンドで探すのが確実です。
bash
$ sudo find / -name "redis.conf"
/etc/redis/redis.conf
また、Redisが既に起動している場合は、redis-cli
を使って設定ファイルの場所を特定することもできます。
“`bash
$ redis-cli CONFIG GET dir
1) “dir”
2) “/var/lib/redis” # これはデータディレクトリ。設定ファイルはこの親などにあることが多い。
もしくは
$ ps aux | grep redis-server
redis 1234 0.1 0.2 12345 6789 ? Ssl 10:00 0:15 /usr/bin/redis-server /etc/redis/redis.conf
プロセス情報から設定ファイルのパスがわかる場合もある
“`
ここでは、設定ファイルが /etc/redis/redis.conf
にあると仮定して進めます。
4-2. redis.conf
ファイルを編集する
設定ファイルを編集する前に、万が一の事態に備えて必ずバックアップを取りましょう。
bash
$ sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
次に、テキストエディタ(vim
, nano
など)で設定ファイルを開きます。管理者権限が必要なので sudo
を付けます。
bash
$ sudo vim /etc/redis/redis.conf
ファイルを開いたら、port
という文字列で検索します。vim
なら /port
と入力してEnterキーを押します。すると、以下のような行が見つかるはずです。
“`conf
Accept connections on the specified port, default is 6379.
If port 0 is specified Redis will not listen on a TCP socket.
port 6379
“`
この port 6379
の部分を、変更したいポート番号に書き換えます。今回は 16379
に変更します。
“`conf
Accept connections on the specified port, default is 6379.
If port 0 is specified Redis will not listen on a TCP socket.
port 16379
“`
もし行頭に #
が付いてコメントアウトされている場合は、#
を削除して有効化し、ポート番号を変更してください。
ファイルを保存してエディタを終了します。
4-3. Redisサーバーを再起動する
設定ファイルの変更を反映させるためには、Redisサーバーを再起動する必要があります。お使いのシステムのサービス管理方法に合わせて、以下のコマンドを実行します。
systemd
を使用しているシステム (Ubuntu 16.04+, CentOS 7+など):
“`bash
$ sudo systemctl restart redis-server
or
$ sudo systemctl restart redis
“`
- 古い
init.d
を使用しているシステム:
bash
$ sudo /etc/init.d/redis-server restart
再起動後、サービスが正常に起動しているかステータスを確認しましょう。
bash
$ sudo systemctl status redis-server
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since ...
Active: active (running)
と表示されていれば成功です。
4-4. 変更後のポートで接続を確認する
設定が正しく反映されたか、実際に新しいポートに接続して確認します。
まず、redis-cli
で -p
オプションを使って新しいポート番号 16379
を指定します。
bash
$ redis-cli -p 16379
127.0.0.1:16379>
プロンプトが 127.0.0.1:16379>
のように、新しいポート番号で表示されれば、接続は成功しています。念のため PING
コマンドを打って、サーバーからの応答を確認しましょう。
bash
127.0.0.1:16379> PING
PONG
PONG
が返ってくれば完璧です。
次に、ネットワークレベルで本当に新しいポートでリッスンしているかを確認します。ss
コマンド(または古い netstat
コマンド)を使うと便利です。
bash
$ sudo ss -tlnp | grep redis
LISTEN 0 511 127.0.0.1:16379 0.0.0.0:* users:(("redis-server",pid=5678,fd=6))
LISTEN 0 511 [::1]:16379 [::]:* users:(("redis-server",pid=5678,fd=7))
16379
というポート番号で LISTEN
(待ち受け) 状態になっていることが確認できます。これでポート番号の変更は完了です。
4-5. ファイアウォールの設定変更を忘れずに!
これは非常に重要なステップです。サーバーでファイアウォール(ufw
, firewalld
など)が有効になっている場合、新しいポート 16379
への通信を許可しなければ、外部のアプリケーションから接続できません。
同時に、セキュリティの観点から、古いポート 6379
は閉じておくのが望ましいです。
ufw
(Uncomplicated Firewall) を使用している場合 (Ubuntuなど):
“`bash
新しいポート16379を許可する (接続元を限定する場合は from 192.168.1.0/24 などを追加)
$ sudo ufw allow 16379/tcp
古いポート6379のルールを削除する (ルール番号を確認して削除)
$ sudo ufw status numbered
$ sudo ufw delete <ルール番号>
または単純に拒否する
$ sudo ufw deny 6379/tcp
“`
firewalld
を使用している場合 (CentOSなど):
“`bash
新しいポート16379を永続的に許可する
$ sudo firewall-cmd –add-port=16379/tcp –permanent
success
古いポート6379のルールを永続的に削除する
$ sudo firewall-cmd –remove-port=6379/tcp –permanent
success
設定をリロードして反映させる
$ sudo firewall-cmd –reload
success
“`
ファイアウォールの設定は、セキュリティの要です。ポート番号を変更した際は、必ずこの設定も見直す癖をつけましょう。
第5章: Redisポート設定に関する高度なトピックとベストプラクティス
基本的なポート変更はマスターしました。ここではさらに一歩進んで、より複雑な構成や運用におけるポート設定について見ていきましょう。
5-1. Redis Sentinelとポート番号
Redis Sentinelは、Redisの高可用性(HA)を実現するための仕組みです。マスターサーバーを監視し、マスターがダウンした際に自動的にレプリカ(スレーブ)をマスターに昇格させる(フェイルオーバー)役割を担います。
- Sentinel自身のポート: Sentinelプロセスもネットワーク通信を行うため、独自のポート番号を使用します。デフォルトは
26379
です。この番号も「6379」にちなんで選ばれました。 - 監視対象のポート: Sentinelは、マスターとレプリカのRedisインスタンスを監視します。これらのインスタンスがデフォルトとは異なるポートで動作している場合は、Sentinelの設定ファイル (
sentinel.conf
) で正しく指定する必要があります。
sentinel.conf
の設定例:
“`conf
監視対象のマスターを指定。
mymasterという名前のマスターが、127.0.0.1の16379番で動いていることを示す
sentinel monitor mymaster 127.0.0.1 16379 2
“`
複数のSentinelを動かす場合は、それぞれのSentinelプロセスに異なるポート(例: 26379, 26380, 26381)を割り当てる必要があります。
5-2. Redis Clusterとポート番号
Redis Clusterは、データを複数のノードに分散(シャーディング)させることで、スケーラビリティと高可用性を両立する仕組みです。Cluster構成では、各ノードが2つのポートを使用します。
- データポート (Client Port):
クライアントからのコマンドを受け付けるための通常のポートです。例えば、7000
,7001
,7002
のように設定します。 - クラスターバスポート (Cluster Bus Port):
ノード間で状態の監視、設定の更新、フェイルオーバーの通知などを行うための専用ポートです。このポート番号は、データポートに10000を加えた値に固定されています。
例えば、あるノードのデータポートを 7000
に設定した場合、クラスターバスポートは自動的に 17000
になります。
このため、Redis Clusterを構成する際は、7000-7005
と 17000-17005
のように、2つの範囲のポートをファイアウォールで開けておく必要があります。
5-3. UNIXドメインソケットを利用する
WebアプリケーションとRedisサーバーが同じマシン上で動作している場合、TCP/IPポートを使わずに、より高速で安全なUNIXドメインソケットを利用する選択肢があります。
UNIXドメインソケットは、ネットワークスタックを経由せず、ファイルシステムのパス(例: /tmp/redis.sock
)を使ってプロセス間通信を行います。
-
メリット:
- 高速: TCP/IPのオーバーヘッド(ヘッダの付加やチェックサム計算など)がないため、通信が高速です。
- 安全: ネットワークに露出しないため、外部から直接アクセスされるリスクがありません。ファイルシステムのパーミッションでアクセス制御が可能です。
-
設定方法 (
redis.conf
):
TCPポートでのリッスンを無効にし、ソケットファイルを指定します。
“`conf
TCPポートでのリッスンを無効化
port 0
UNIXドメインソケットのパスを指定
unixsocket /var/run/redis/redis.sock
ソケットファイルのパーミッションを設定 (推奨)
unixsocketperm 700
``
redis` ユーザー(またはグループ)しかソケットファイルにアクセスできなくなり、セキュリティが向上します。
この設定により、
- クライアントからの接続方法:
redis-cli
や各種ライブラリで、ポート番号の代わりにソケットファイルのパスを指定します。
bash
$ redis-cli -s /var/run/redis/redis.sock
“`python
Python (redis-py)
import redis
r = redis.Redis(unix_socket_path=’/var/run/redis/redis.sock’)
“`
同一サーバー内での通信であれば、積極的に利用を検討したい強力な機能です。
5-4. ポート選択のベストプラクティス
最後に、Redisのポート番号をデフォルトから変更する際に、「どの番号を選ぶべきか」という指針をまとめます。
-
Well-knownポート (0-1023) は避ける:
これらのポートはOSや標準的なサービスによって予約されているため、絶対に使用しないでください。 -
Registeredポート (1024-49151) から選ぶ:
この範囲から選ぶのが一般的です。ただし、他の有名なアプリケーション(MySQL: 3306, PostgreSQL: 5432など)が使用しているポートは避けましょう。 -
覚えやすく、規則性のある番号を選ぶ:
例えば、元の6379に10000や20000を加えた16379
,26379
などは、管理上わかりやすいです。
また、複数のインスタンスを立てる場合は、16379
,16380
,16381
のように連番にすると管理が容易になります。 -
使用中のポートを確認する:
選んだポートがサーバー上で既に使用されていないか、必ず確認しましょう。
“`bash
16379番が使用中か確認。何も表示されなければ空いている。
$ sudo ss -tlnp | grep 16379
“`
これらのプラクティスに従うことで、他のサービスとの衝突を避け、管理しやすいポート設計が可能になります。
まとめ
この記事では、Redisの象徴的なポート番号「6379」をテーマに、その背景から実践的な設定変更、さらには高度な運用方法までを深く掘り下げてきました。
最後に、重要なポイントを振り返りましょう。
- ポート6379の正体: Redisのデフォルトポート。その由来は開発者の遊び心にあり、IANAに登録された「登録済みポート」である。
- デフォルトポートの利便性とリスク: 設定が簡単な反面、攻撃者の標的になりやすいというセキュリティ上の弱点を持つ。
- ポート変更の目的: 「セキュリティの向上(Security through Obscurity)」と「複数インスタンスの運用」が主な理由。
- 変更手順:
redis.conf
のport
ディレクティブを編集し、Redisサーバーを再起動する。そして、最も重要なのがファイアウォール設定の更新を忘れないこと。 - 高度な利用: Sentinelは
26379
、Clusterはデータポートとクラスターバスポート(データポート+10000)の2種類を使用する。同一サーバー内なら高速で安全なUNIXドメインソケットも有効な選択肢。
ポート番号は、Redisという強力なツールを使いこなす上で、避けては通れない基本的ながらも奥深い要素です。デフォルト設定のまま運用することは、いわば家のドアに鍵をかけずに外出するようなものです。
この記事で得た知識を活かし、あなたのRedisサーバーをより安全に、そしてより柔軟に運用するための第一歩を踏み出してください。ポート番号の適切な管理は、堅牢なシステムを構築する上でのプロフェッショナルな習慣と言えるでしょう。Redisの持つ真のポテンシャルを引き出し、あなたのアプリケーションを次のレベルへと導いてください。