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


40

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


epmd는 RabbitMQ의 일부가 아닙니다. Erlang 이름 지정 데몬입니다. localhost에만 바인딩하는 가장 좋은 방법은 토끼에게 노드 이름 'rabbit @ localhost'를 부여하는 것입니다. 이것은 여러 RabbitMQ 서버를 클러스터링하는 데 사용되는 노드 이름이며 Erlang이 네트워크에서 노드를 찾는 데 사용합니다. @ 뒤에 나오는 부분은 Rabbit을 실행하는 호스트 이름이며 localhost는 외부에서 액세스 가능한 이름이 아닙니다.
Michael Dillon

답변:


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

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.


1
브라보! 감사. 참고 : EPEL을 통해 CentOS / RHEL 용 RabbitMQ에 'rabbitmq-env.conf'가 필요했습니다. 그리고 'rabbit.config'에 대한 'rabbit'내보내기가 이상하게 보이지만 Sans 접미사를 사용했습니다.
astrostl

" /etc/rabbitmq/rabbitmq.conf다시 엽니 다 ". 왜 "다시"? 당신은 의미 rabbitmq-env.conf합니까?
phinz

ERL_EPMD_ADDRESSRabbitMQ의 수신 대기 클러스터 포트 (25672)를 변경하려면 환경 변수 가 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를 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 시간이 걸렸습니다).


위의 epmd 링크에는 ERL_EPMD_ADDRESS에 대한 항목이 있으며, rabbitmq 사용자에 대해 환경 변수를 설정할 위치를 알 수없는 경우를 제외하고 epmd가 바인딩 할 주소를 설정합니다.
François Beausoleil

5

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

NODE_IP_ADDRESS = 127.0.0.1


설치시 RABBITMQ_NODE_IP_ADDRESS또는 NODE_IP_ADDRESS작동하지만 amqp 포트에 대해서만 언급했습니다.
Vebjorn Ljosa

1
epmd 포트는 erlang 포트 매퍼의 기능이며 바인드 주소를 제한 할 수 없습니다.
cbz

또한 EPMD 포트는 쿠키로 보호되므로 RabbitMQ 서버 쿠키를 모른다면 아무도 연결할 수 없습니다. 해당 쿠키는 RabbitMQ 클러스터의 다른 구성원에게만 제공합니다. API 키와 동일한 원칙입니다.
Michael Dillon

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.