RabbitMQにローカルホストのみをリッスンさせるにはどうすればよいですか?


40

RabbitMQをDebian Linux Squeezeマシンにインストールしましたが、localhostインターフェイスのみをリッスンしたいです。私が追加しました

RABBITMQ_NODE_IP_ADDRESS=127.0.0.1

私の/etc/rabbitmq/rabbitmq.confファイルにamqp追加すると、ポート(5672)でリッスンするときにローカルホストインターフェイスのみにバインドされます。ただし、ポートepmd(4369)および43380でリッスンする場合は、引き続きすべてのインターフェイスにバインドされます。

# lsof -n -a -i -urabbitmq
COMMAND   PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
epmd     7353 rabbitmq    3u  IPv4 1177662      0t0  TCP *:epmd (LISTEN)
epmd     7353 rabbitmq    5u  IPv4 1177714      0t0  TCP 127.0.0.1:epmd->127.0.0.1:50877 (ESTABLISHED)
beam.smp 7365 rabbitmq   10u  IPv4 1177711      0t0  TCP *:43380 (LISTEN)
beam.smp 7365 rabbitmq   11u  IPv4 1177713      0t0  TCP 127.0.0.1:50877->127.0.0.1:epmd (ESTABLISHED)
beam.smp 7365 rabbitmq   19u  IPv4 1177728      0t0  TCP 127.0.0.1:amqp (LISTEN)

これを防ぐにはどうすればよいですか?iptablesをセットアップする必要がありますか、それとも必要な処理を実行するための追加のRabbitMQ構成オプションがありますか?


epmdはRabbitMQの一部ではありません。それはErlangネーミングデーモンです。localhostにのみバインドする最善の方法は、rabbitにノード名「rabbit @ localhost」を付けることです。これは、複数のRabbitMQサーバーをクラスター化するために使用されるノード名であり、Erlangがネットワーク上のノードを見つけるために使用します。@の後の部分は、Rabbitを実行しているホスト名であり、明らかに、localhostは外部からアクセス可能な名前ではありません。
マイケルディロン

回答:


48

以下を入力/etc/rabbitmq/rabbitmq-env.confすると、RabbitMQとepmdはローカルホストのみでリッスンします。

export RABBITMQ_NODENAME=rabbit@localhost
export RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
export ERL_EPMD_ADDRESS=127.0.0.1

番号の大きいポートにlocalhostのみを使用するようにErlangを構成するには、少し手間がかかります(これは、私の知る限り、ノードのクラスタリングに使用されます)。クラスタリングを気にせず、Rabbitを完全にローカルで実行したい場合は、Erlangにループバックインターフェイスのみを使用するカーネルオプションを渡すことができます。

そのためには、新しいファイルを作成します/etc/rabbitmq/-私はそれを呼び出しますrabbit.config。このファイルには、実行時にロードする必要があるErlangオプションを配置します。

[{kernel,[{inet_dist_use_interface,{127,0,0,1}}]}].

管理プラグインを使用していて、それをローカルホストに制限する場合は、rabbit.configにこれを含めるようにポートを個別に構成する必要があります。

[ {rabbitmq_management, [ {listener, [{port, 15672}, {ip, "127.0.0.1"}]} ]}, {kernel, [ {inet_dist_use_interface,{127,0,0,1}} ]} ].

(RabbitMQはシャットダウン時にepmdを実行したままにするため、Erlangのクラスタリングポートをブロックする場合は、Rabbitとは別にepmdを再起動する必要があります。)

次に、起動時にRabbitMQにこれをロードさせる必要があります。/etc/rabbitmq/rabbitmq.conf再度開き、上部に次を配置します。

export RABBITMQ_CONFIG_FILE="/etc/rabbitmq/rabbit"

これにより、ウサギサーバーの起動時にその構成ファイルが読み込まれ、Erlangにオプションが渡されます。

これで、すべてのErlang / RabbitMQプロセスがlocalhostでのみリッスンするはずです!これは次の方法で確認できますnetstat -ntlap

編集:RabbitMQの古いバージョンでは、構成ファイルは次のとおり/etc/rabbitmq/rabbitmq.confです。ただし、このファイルはファイルに置き換えられていrabbit-env.confます。


1
ブラボー!ありがとう。注:EPELを介してCentOS / RHELのRabbitMQに「rabbitmq-env.conf」が必要でした。また、「rabbit.config」の「rabbit」エクスポートは奇妙に思えましたが、サフィックスなしで機能しました。
astrostl

/etc/rabbitmq/rabbitmq.conf再び開く」。なぜ「もう一度」なのか?という意味rabbitmq-env.confですか?
フィンツ

ERL_EPMD_ADDRESSRabbitMQのクラスターポート(25672)をリッスンするIPを変更する場合、環境変数はepmdのリッスンIPのみを制御しinet_dist_use_interfaceます。オプションを使用する必要があります。NODE_IP_ADDRESS=127.0.0.1 ERL_EPMD_ADDRESS=127.0.0.1 SERVER_START_ARGS="-kernel inet_dist_use_interface {127,0,0,1}"
テリー

13

RabbitMQがローカルホストでリッスンするようにするには、ローカルホストのみにバインドします。

3つの異なる方法(すべて同等):

  • NODE_IP_ADDRESS = 127.0.0.1を環境変数ファイルに入れます(http://www.rabbitmq.com/configure.html#define-environment-variables参照

  • 構成ファイルにtcp_listenersおよびssl_listenersプロパティを配置します。構成エントリtcp_listenersおよびssl_listenersは、RabbitMQがリッスンするインターフェイスを管理します。localhostでリッスンするだけのエントリは、たとえば{tcp_listeners、[{'127.0.0.1'、5672}]}(構文が正しくない可能性があるので、確認してくださいhttp://www.rabbitmq.com/configure.html#構成ファイル

  • 環境をエクスポートします。起動スクリプトの変数(/etc/init.d/rabbitmq-server)export RABBITMQ_NODE_IP_ADDRESS = 127.0.0.1

後者は私のために働いた。

EPMD:

Epmdプログラムは、Erlangランタイムの分散部分を機能させます。マルチマシンクラスターを構築する場合は、他のノードからアクセスできるようにし、確かにローカルホストにする必要があります。ただし、Cookieファイルによる保護が組み込まれています。

それはほとんど注意を必要としません。erlangプログラム(たとえばrabbitmqctlを含む)は、他のerlangプログラムに接続するためにそのポートにアクセスする必要があることに留意してください。

ただし、財務データや健康記録を扱う場合は、epmdを保護することをお勧めします。epmdが使用するデフォルトのポートは4369であり、他のプログラムはtcpを介してそれに接続します。

参照:http : //www.erlang.org/doc/man/epmd.html#environment_variables

さらにRabbitMQを保護する必要がある場合は、

  1. ビルトインゲストアカウントを無効にします http://www.rabbitmq.com/admin-guide.html#default-state

  2. SSLの使用と、証明書チェーンを使用した認証を検討してください

これらの回答は、RabbitMQコミュニティIRCチャンネルから得ました。

彼らに感謝したいと思います。

http://dev.rabbitmq.com/irclog/index.php?date=2011-06-14

上記があなたのためにいくらかの時間を節約することを願っています(答えを見つけるのに6時間かかりました)。


上記のepmdリンクには、おそらくepmdがバインドするアドレスを設定するためのERL_EPMD_ADDRESSのエントリがあります。ただし、rabbitmqユーザーの環境変数をどこに設定するかはわかりません。
フランソワボーソレイユ

5

rabbitmq.confファイルで環境変数を指定する場合は、RABBITMQ_プレフィックスを削除する必要があるため、次のことを試してください。

NODE_IP_ADDRESS = 127.0.0.1


私のインストールでは、どちらかRABBITMQ_NODE_IP_ADDRESSまたはNODE_IP_ADDRESS動作しますが、amqpポートについてのみ言及されています。
ベビョルンジョサ

1
epmdポートはerlangポートマッパーの機能であり、バインドアドレスを制限することはできません。
cbz

また、EPMDポートはCookieで保護されているため、RabbitMQサーバーCookieを知らない限り誰も接続できません。そのCookieをRabbitMQクラスターの他のメンバーにのみ提供します。APIキーと同じ原理。
マイケルディロン

1

知る限りでは、epmdインターフェイスを実際に構成することはできません。epmdポートのみを設定できます:http ://www.erlang.org/faq/how_do_i.html#id55132

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.