Instalei o RabbitMQ em uma máquina Debian Linux Squeeze e gostaria que ele ouvisse apenas a interface localhost. Eu adicionei
RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
ao meu /etc/rabbitmq/rabbitmq.conf
arquivo, e isso o torna vinculado apenas à interface localhost ao escutar na amqp
porta (5672). No entanto, ele ainda se liga a todas as interfaces ao escutar nas 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? Preciso configurar o iptables ou existem opções adicionais de configuração do RabbitMQ que farão o que eu quero?
Respostas:
Colocar o seguinte em
/etc/rabbitmq/rabbitmq-env.conf
fará o RabbitMQ e o epmd escutarem apenas no localhost:É preciso um pouco mais de trabalho para configurar o Erlang para usar apenas o host local para a porta de número mais alto (que é usada para agrupar nós, até onde eu sei). Se você não se importa com o armazenamento em cluster e apenas deseja que o Rabbit seja executado totalmente localmente, você pode passar a Erlang uma opção de kernel para que ele use apenas a interface de loopback.
Para fazer isso, crie um novo arquivo no
/etc/rabbitmq/
- eu vou chamá-lorabbit.config
. Neste arquivo, colocaremos a opção Erlang que precisamos carregar no tempo de execução.Se você estiver usando o plug-in de gerenciamento e também quiser limitar isso ao host local, 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}} ]} ].
(Observe que o RabbitMQ deixa o epmd em execução quando ele é desligado; portanto, se você deseja bloquear a porta de cluster do Erlang, 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:Isso carrega esse arquivo de configuração quando o servidor rabbit é iniciado e passa as opções para Erlang.
Agora você deve ter todos os processos Erlang / RabbitMQ ouvindo apenas no host local! Isso pode ser verificado com
netstat -ntlap
EDIT: Em versões mais antigas do RabbitMQ, o arquivo de configuração é:
/etc/rabbitmq/rabbitmq.conf
. No entanto, esse arquivo foi substituído pelorabbit-env.conf
arquivo.fonte
/etc/rabbitmq/rabbitmq.conf
novamente". Por que de novo"? Você quer dizerrabbitmq-env.conf
?ERL_EPMD_ADDRESS
controla apenas o IP de escuta do epmd. Se você deseja alterar o IP de escuta da RabbitMQ na porta de cluster (25672), é necessário usar ainet_dist_use_interface
opçãoNODE_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}"
Para fazer o RabbitMQ escutar no localhost / bind apenas ao localhost:
3 maneiras diferentes (todas equivalentes):
Coloque NODE_IP_ADDRESS = 127.0.0.1 no arquivo de variáveis de ambiente (consulte http://www.rabbitmq.com/configure.html#define-environment-variables )
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 nas quais o RabbitMQ escuta. Uma entrada para apenas ouvir no localhost seria, por exemplo, {tcp_listeners, [{'127.0.0.1', 5672}]}} (a sintaxe pode não estar correta, verifique) http://www.rabbitmq.com/configure.html# arquivo de configuração
exportar o env. variável no script de inicialização (/etc/init.d/rabbitmq-server) export RABBITMQ_NODE_IP_ADDRESS = 127.0.0.1
O último funcionou para mim.
EPMD:
O programa Epmd faz com que partes distribuídas do tempo de execução do Erlang funcionem. Se você estiver construindo um cluster de várias máquinas, precisará deixá-los acessíveis a outros nós e, certamente, localhost. Mas possui proteção integrada via arquivo de cookie.
Quase nunca requer atenção. Lembre-se de 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 idéia. A porta padrão que o epmd usa é 4369, outros programas se conectam a ela via tcp.
Veja também: http://www.erlang.org/doc/man/epmd.html#environment_variables
Se você precisar proteger o RabbitMQ ainda mais,
Desative a conta de convidado interna http://www.rabbitmq.com/admin-guide.html#default-state
Considere usar SSL e autenticar usando a cadeia de certificados
Eu recebi essas respostas do canal IRC da comunidade RabbitMQ.
Gostaria de agradecer a eles.
http://dev.rabbitmq.com/irclog/index.php?date=2011-06-14
Espero que o acima economize algum tempo para você (demorei 6 horas para encontrar uma resposta).
fonte
Se você especificar variáveis de ambiente no arquivo rabbitmq.conf, precisará eliminar o prefixo RABBITMQ_, então tente:
NODE_IP_ADDRESS = 127.0.0.1
fonte
RABBITMQ_NODE_IP_ADDRESS
ouNODE_IP_ADDRESS
funciona, mas como mencionado apenas para a porta amqp.AFAIK, você realmente não pode configurar interfaces epmd. Você pode configurar apenas a porta epmd: http://www.erlang.org/faq/how_do_i.html#id55132
fonte