He instalado RabbitMQ en una máquina Debian Linux Squeeze, y me gustaría que solo escuche la interfaz localhost. Yo he añadido
RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
a mi /etc/rabbitmq/rabbitmq.conf
archivo, y eso hace que se una solo a la interfaz localhost cuando se escucha en el amqp
puerto (5672). Sin embargo, todavía se une a todas las interfaces cuando se escucha en los puertos epmd (4369) y 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)
¿Cómo evito esto? ¿Tengo que configurar iptables o hay opciones adicionales de configuración de RabbitMQ que harán que haga lo que quiero?
Respuestas:
Poner lo siguiente
/etc/rabbitmq/rabbitmq-env.conf
hará que RabbitMQ y epmd escuchen solo en localhost:Se necesita un poco más de trabajo para configurar Erlang para usar solo localhost para el puerto con un número más alto (que se usa para agrupar nodos, por lo que puedo decir). Si no le importa la agrupación y solo desea que Rabbit se ejecute completamente localmente, puede pasarle a Erlang una opción de kernel para que solo use la interfaz de bucle invertido.
Para hacerlo, cree un nuevo archivo en
/etc/rabbitmq/
- Lo llamarérabbit.config
. En este archivo pondremos la opción Erlang que necesitamos cargar en tiempo de ejecución.Si está utilizando el complemento de administración y también desea limitarlo a localhost, deberá configurar sus puertos por separado, haciendo que el conejo.config incluya esto:
[ {rabbitmq_management, [ {listener, [{port, 15672}, {ip, "127.0.0.1"}]} ]}, {kernel, [ {inet_dist_use_interface,{127,0,0,1}} ]} ].
(Tenga en cuenta que RabbitMQ deja epmd ejecutándose cuando se cierra, por lo que si desea bloquear el puerto de agrupación de Erlang, deberá reiniciar epmd por separado de Rabbit).
Luego, necesitamos que RabbitMQ cargue esto al inicio. Abre de
/etc/rabbitmq/rabbitmq.conf
nuevo y coloca lo siguiente en la parte superior:Esto carga ese archivo de configuración cuando se inicia el servidor de conejo y pasará las opciones a Erlang.
¡Ahora debería tener todos los procesos de Erlang / RabbitMQ escuchando solo en localhost! Esto se puede verificar con
netstat -ntlap
EDIT: En las versiones anteriores de RabbitMQ, el fichero de configuración es:
/etc/rabbitmq/rabbitmq.conf
. Sin embargo, este archivo ha sido reemplazado por elrabbit-env.conf
archivo.fuente
/etc/rabbitmq/rabbitmq.conf
nuevo". Por qué otra vez"? Qué quiere decirrabbitmq-env.conf
?ERL_EPMD_ADDRESS
solo controla la IP de escucha de epmd, si desea cambiar la IP de escucha del puerto del clúster (25672) de RabbitMQ, debe usar lainet_dist_use_interface
opción.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}"
Para hacer que RabbitMQ escuche en localhost / enlace solo a localhost:
3 formas diferentes (todas equivalentes):
Coloque NODE_IP_ADDRESS = 127.0.0.1 en el archivo de variables de entorno (consulte http://www.rabbitmq.com/configure.html#define-environment-variables )
Ponga las propiedades tcp_listeners y ssl_listeners en el archivo de configuración: las entradas de configuración tcp_listeners y ssl_listeners gobiernan las interfaces que escucha RabbitMQ. Una entrada para escuchar en localhost sería, por ejemplo, {tcp_listeners, [{'127.0.0.1', 5672}]} (La sintaxis puede no ser correcta, verifíquela) http://www.rabbitmq.com/configure.html# archivo de configuración
exportar el env. variable en el script de inicio (/etc/init.d/rabbitmq-server) exportar RABBITMQ_NODE_IP_ADDRESS = 127.0.0.1
Este último funcionó para mí.
EPMD:
El programa Epmd hace que partes distribuidas del tiempo de ejecución de Erlang funcionen. Si está creando un clúster de varias máquinas, debe dejarlos accesibles para otros nodos y, sin duda, localhost. Pero tiene protección incorporada a través de un archivo cookie.
Casi nunca requiere atención. Solo tenga en cuenta que los programas erlang (incluido rabbitmqctl, por ejemplo) necesitan acceder a ese puerto para contactar con otros programas erlang.
Pero, si se trata de datos financieros o registros de salud, puede ser una buena idea proteger la EPMD. El puerto predeterminado que usa epmd es 4369, otros programas se conectan a él a través de tcp.
Ver también: http://www.erlang.org/doc/man/epmd.html#environment_variables
Si necesita asegurar RabbitMQ más,
Deshabilite la cuenta de invitado integrada http://www.rabbitmq.com/admin-guide.html#default-state
Considere usar SSL y autenticar usando la cadena de certificados
Obtuve estas respuestas del canal IRC de la comunidad RabbitMQ.
Quisiera agradecerles.
http://dev.rabbitmq.com/irclog/index.php?date=2011-06-14
Espero que lo anterior te ahorre algo de tiempo (me tomó 6 horas encontrar una respuesta).
fuente
Si especifica variables de entorno en el archivo rabbitmq.conf, debe eliminar el prefijo RABBITMQ_, así que intente:
NODE_IP_ADDRESS = 127.0.0.1
fuente
RABBITMQ_NODE_IP_ADDRESS
oNODE_IP_ADDRESS
funciona, pero como se menciona solo para el puerto amqp.AFAIK realmente no puede configurar interfaces epmd. Solo puede configurar el puerto epmd: http://www.erlang.org/faq/how_do_i.html#id55132
fuente