web-dev-qa-db-ja.com

RabbitMQにlocalhostのみをリッスンさせるにはどうすればよいですか?

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

RABBITMQ_NODE_IP_ADDRESS=127.0.0.1

わたしの /etc/rabbitmq/rabbitmq.confファイル。これにより、amqpポート(5672)でリッスンするときにlocalhostインターフェースのみにバインドされます。ただし、ポート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を設定する必要がありますか、それとも、RibbitMQの設定オプションで必要なものを実現できるのですか?

41
Vebjorn Ljosa

以下を/etc/rabbitmq/rabbitmq-env.confに入れると、RabbitMQとepmdはlocalhostのみで待機します。

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

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

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

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

管理プラグインを使用していて、それをlocalhostに制限したい場合は、そのポートを個別に設定して、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"

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

これで、すべてのErlang/RabbitMQプロセスがlocalhostでのみリッスンするようになります!これはnetstat -ntlapで確認できます

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

49
David Wilemski

RabbitMQがlocalhostでリッスンするようにする/ localhostにのみバインドする:

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#config-file

  • 環境をエクスポートします。起動スクリプトの変数(/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時間かかりました)。

13
Boris

Rabbitmq.confファイルで環境変数を指定する場合は、RABBITMQ_接頭辞を削除する必要があるため、次のことを試してください。

NODE_IP_ADDRESS = 127.0.0.1

5
cbz

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

1
Marek