Como faço para o RabbitMQ ouvir apenas o localhost?

35

Eu instalei o RabbitMQ em uma máquina Debian Linux Squeeze, e eu gostaria que ele apenas ouvisse a interface localhost. Eu adicionei

RABBITMQ_NODE_IP_ADDRESS=127.0.0.1

ao meu arquivo /etc/rabbitmq/rabbitmq.conf , e isso faz com que ele seja vinculado somente à interface do host local ao ouvir na amqp port (5672). No entanto, ele ainda se liga a todas as interfaces ao escutar as portas epmd (4369) e 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)

Como evito isso? Eu tenho que configurar o iptables, ou existem opções adicionais de configuração do RabbitMQ que farão o que eu quero?

    
por Vebjorn Ljosa 15.02.2011 / 13:28

4 respostas

44

Colocar o seguinte em /etc/rabbitmq/rabbitmq-env.conf fará com que RabbitMQ e epmd ouçam apenas localhost:

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

É preciso um pouco mais de trabalho para configurar o Erlang para usar somente o host local para a porta numerada mais alta (que é usada para os nós de armazenamento em cluster, tanto quanto eu posso dizer). Se você não se preocupa com clustering e apenas quer que o Rabbit seja executado localmente, então você pode passar uma opção de kernel para o Erlang para usar somente a interface de loopback.

Para fazer isso, crie um novo arquivo em /etc/rabbitmq/ - eu chamarei rabbit.config . Neste arquivo, vamos colocar a opção Erlang que precisamos carregar no tempo de execução.

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

Se você estiver usando o plug-in de gerenciamento e também quiser limitar isso ao localhost, precisará configurar suas portas separadamente, fazendo com que o rabbit.config inclua isso:

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

(Note que o RabbitMQ deixa o epmd rodando quando ele é desligado, então se você quiser bloquear a porta de cluster do Erlang, você precisará reiniciar o epmd separadamente do Rabbit.)

Em seguida, precisamos que o RabbitMQ carregue isso na inicialização. Abra /etc/rabbitmq/rabbitmq.conf novamente e coloque o seguinte no topo:

export RABBITMQ_CONFIG_FILE="/etc/rabbitmq/rabbit"

Isso carrega esse arquivo de configuração quando o servidor do coelho é iniciado e passa as opções para o Erlang.

Agora você deve ter todos os processos Erlang / RabbitMQ ouvindo apenas no localhost! Isso pode ser verificado com netstat -ntlap

EDIT: Nas versões mais antigas do RabbitMQ, o arquivo de configuração é: /etc/rabbitmq/rabbitmq.conf . No entanto, esse arquivo foi substituído pelo arquivo rabbit-env.conf .

    
por 06.10.2011 / 19:54
13

Para fazer o RabbitMQ escutar em localhost / bind somente para localhost:

3 maneiras diferentes (todas equivalentes):

  • Coloque NODE_IP_ADDRESS = 127.0.0.1 no arquivo de variáveis de ambiente (Veja link )

  • Coloque as propriedades tcp_listeners e ssl_listeners no arquivo de configuração: As entradas de configuração tcp_listeners e ssl_listeners controlam as interfaces que o RabbitMQ atende. Uma entrada para apenas ouvir no localhost seria, por exemplo, {tcp_listeners, [{'127.0.0.1', 5672}]} (A sintaxe pode não estar correta, confira) link

  • exporte o env. variável no script de inicialização (/etc/init.d/rabbitmq-server) exportar RABBITMQ_NODE_IP_ADDRESS = 127.0.0.1

O último funcionou para mim.

EPMD:

O programa Epmd faz partes distribuídas do trabalho em tempo de execução da Erlang. Se você está construindo um cluster multi-máquina, você precisa deixá-los acessíveis para outros nós e certamente localhost. Mas tem proteção embutida via arquivo de cookie.

Quase nunca requer atenção. Apenas tenha em mente que os programas erlang (incluindo rabbitmqctl, por exemplo) precisam acessar essa porta para entrar em contato com outros programas erlang.

Mas, se você estiver lidando com dados financeiros ou registros de saúde, proteger o epmd pode ser uma boa ideia. A porta padrão epmd usa é 4369, outros programas se conectam a ela via tcp.

Veja também: link

Se você precisar proteger o RabbitMQ,

  1. Desativar a conta interna do convidado link

  2. Considere usar SSL e autenticar usando a cadeia de certificados

Eu recebi estas respostas do canal IRC da comunidade RabbitMQ.

Gostaria de agradecer-lhes.

link

Espero que o acima economize algum tempo para você (eu levei 6 horas para encontrar uma resposta).

    
por 15.06.2011 / 08:43
5

Se você especificar variáveis de ambiente no arquivo rabbitmq.conf, você deve eliminar o prefixo RABBITMQ_, então tente:

NODE_IP_ADDRESS = 127.0.0.1

    
por 15.02.2011 / 14:25
1

AFAIK você não pode realmente configurar interfaces epmd. Você só pode configurar a porta epmd: link

    
por 16.02.2011 / 10:59