RabbitMQ가 localhost 만 청취하도록하려면 어떻게해야합니까? IPv4 1177662

Debian Linux Squeeze 시스템에 RabbitMQ를 설치했으며 로컬 호스트 인터페이스 만 수신하고 싶습니다. 나는 추가했다

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 구성 옵션이 있습니까?



답변

다음을 입력 /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

Erlang이 더 높은 번호의 포트에 대해서만 localhost를 사용하도록 구성하는 데 약간의 작업이 필요합니다 (이는 내가 알 수있는 한 노드를 클러스터링하는 데 사용됨). 클러스터링에 신경 쓰지 않고 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.


답변

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가 청취하는 인터페이스를 제어합니다. 로컬 호스트에서 수신 대기하는 항목은 다음과 같습니다. {tcp_listeners, [{ ‘127.0.0.1’, 5672}]} (구문이 올바르지 않을 수 있습니다.)
    http://www.rabbitmq.com/configure.html# 구성 파일

  • 환경을 내보내십시오. 시작 스크립트의 변수 (/etc/init.d/rabbitmq-server) 내보내기 RABBITMQ_NODE_IP_ADDRESS = 127.0.0.1

후자는 나를 위해 일했다.

EPMD :

Epmd 프로그램은 Erlang 런타임의 분산 부분을 작동시킵니다. 다중 시스템 클러스터를 구축하는 경우 다른 노드와 확실히 localhost에 액세스 할 수 있도록 남겨 두어야합니다. 그러나 쿠키 파일을 통한 내장 보호 기능이 있습니다.

거의 관심이 필요하지 않습니다. 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 시간이 걸렸습니다).


답변

rabbitmq.conf 파일에 환경 변수를 지정하면 RABBITMQ_ 접두사를 삭제해야합니다.

NODE_IP_ADDRESS = 127.0.0.1


답변

AFAIK 실제로 epmd 인터페이스를 구성 할 수 없습니다. epmd 포트만 설정할 수 있습니다 : http://www.erlang.org/faq/how_do_i.html#id55132