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の設定オプションで必要なものを実現できるのですか?
以下を/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
ファイルに置き換えられました。
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をさらに保護する必要がある場合は、
組み込みのゲストアカウントを無効にする http://www.rabbitmq.com/admin-guide.html#default-state
SSLの使用と証明書チェーンを使用した認証を検討する
RabbitMQコミュニティからこれらの回答を得ましたIRCチャネル。
それらに感謝したいと思います。
http://dev.rabbitmq.com/irclog/index.php?date=2011-06-14
上記があなたのために時間を節約することを願っています(答えを見つけるのに6時間かかりました)。
Rabbitmq.confファイルで環境変数を指定する場合は、RABBITMQ_接頭辞を削除する必要があるため、次のことを試してください。
NODE_IP_ADDRESS = 127.0.0.1
私の知る限り、実際にepmdインターフェースを構成することはできません。 epmdポートのみ設定できます: http://www.erlang.org/faq/how_do_i.html#id55132