47 votes

Comment puis-je faire en sorte que RabbitMQ écoute seulement localhost ?

J'ai installé RabbitMQ sur une machine Debian Linux Squeeze, et je voudrais qu'il écoute uniquement l'interface localhost. J'ai ajouté

RABBITMQ_NODE_IP_ADDRESS=127.0.0.1

dans mon fichier /etc/rabbitmq/rabbitmq.conf, et cela le lie uniquement à l'interface localhost lorsqu'il écoute sur le port amqp (5672). Cependant, il se lie toujours à toutes les interfaces lorsqu'il écoute sur les ports epmd (4369) et 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)

Comment puis-je empêcher cela? Dois-je configurer iptables, ou existe-t-il des options de configuration supplémentaires de RabbitMQ qui le feront ce que je veux?

55voto

Rick_Roll Points 152

Placer ce qui suit dans /etc/rabbitmq/rabbitmq-env.conf fera en sorte que RabbitMQ et epmd n'écoutent que sur localhost :

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

Il faut un peu plus de travail pour configurer Erlang afin qu'il n'utilise que localhost pour le port numéroté plus haut (utilisé pour le clustering des nœuds autant que je sache). Si vous ne vous souciez pas du clustering et que vous voulez juste que Rabbit soit complètement exécuté localement, vous pouvez passer à Erlang une option de noyau pour qu'il n'utilise que l'interface de bouclage.

Pour ce faire, créez un nouveau fichier dans /etc/rabbitmq/ - je vais l'appeler rabbit.config. Dans ce fichier, nous mettrons l'option Erlang dont nous avons besoin de charger au moment de l'exécution.

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

Si vous utilisez le plugin de gestion et que vous voulez également limiter celui-ci à localhost, vous devrez configurer ses ports séparément, en ajoutant ceci au fichier rabbit.config :

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

(Remarque : RabbitMQ laisse epmd fonctionner lorsqu'il s'arrête, donc si vous voulez bloquer le port de clustering d'Erlang, vous devrez redémarrer epmd séparément de Rabbit.)

Ensuite, nous devons demander à RabbitMQ de charger cela au démarrage. Ouvrez de nouveau /etc/rabbitmq/rabbitmq.conf et placez ce qui suit en haut :

export RABBITMQ_CONFIG_FILE="/etc/rabbitmq/rabbit"

Cela charge ce fichier de configuration lorsque le serveur Rabbit démarre et passera les options à Erlang.

Maintenant, tous les processus Erlang/RabbitMQ devraient écouter uniquement sur localhost ! Cela peut être vérifié avec netstat -ntlap

EDIT : Dans les anciennes versions de RabbitMQ, le fichier de configuration est : /etc/rabbitmq/rabbitmq.conf. Cependant, ce fichier a été remplacé par le fichier rabbit-env.conf.

14voto

Boris Points 141

Pour que RabbitMQ écoute sur localhost / se lie uniquement à localhost:

3 façons différentes (toutes équivalentes):

  • Mettre NODE_IP_ADDRESS=127.0.0.1 dans le fichier des variables d'environnement (Voir http://www.rabbitmq.com/configure.html#define-environment-variables)

  • Mettre les propriétés tcp_listeners et ssl_listeners dans le fichier de configuration: Les entrées de configuration tcp_listeners et ssl_listeners régissent les interfaces auxquelles RabbitMQ écoute. Une entrée pour écouter uniquement sur localhost serait par exemple, {tcp_listeners, [{'127.0.0.1', 5672}]} (La syntaxe pourrait ne pas être correcte, vérifiez) http://www.rabbitmq.com/configure.html#config-file

  • exporter la variable d'environnement dans le script de démarrage (/etc/init.d/rabbitmq-server) export RABBITMQ_NODE_IP_ADDRESS=127.0.0.1

La dernière méthode a fonctionné pour moi.

EPMD:

Le programme Epmd permet à des parties distribuées de l'exécution Erlang de fonctionner. Si vous construisez un cluster multi-machines, vous devez les laisser accessibles aux autres nœuds et certainement à localhost. Mais il dispose d'une protection intégrée via un fichier cookie.

Cela ne nécessite presque jamais d'attention. Gardez simplement à l'esprit que les programmes erlang (y compris rabbitmqctl, par exemple) doivent accéder à ce port pour contacter d'autres programmes erlang.

Mais, si vous traitez des données financières ou des dossiers de santé, protéger epmd peut être une bonne idée. Le port par défaut utilisé par epmd est 4369, d'autres programmes s'y connectent via tcp.

Voir aussi: http://www.erlang.org/doc/man/epmd.html#environment_variables

Si vous avez besoin de sécuriser encore plus RabbitMQ,

  1. Désactivez le compte invité intégré http://www.rabbitmq.com/admin-guide.html#default-state

  2. Envisagez d'utiliser SSL et l'authentification en utilisant la chaîne de certificats

J'ai obtenu ces réponses du canal IRC de la communauté RabbitMQ.

Je tiens à les remercier.

http://dev.rabbitmq.com/irclog/index.php?date=2011-06-14

J'espère que ce qui précède vous fera gagner du temps (cela m'a pris 6 heures pour trouver une réponse).

5voto

cbz Points 213

Si vous spécifiez des variables d'environnement dans le fichier rabbitmq.conf, vous devez supprimer le préfixe RABBITMQ_, alors essayez :

NODE_IP_ADDRESS=127.0.0.1

1voto

Marek Points 11

Selon mes informations, vous ne pouvez pas vraiment configurer les interfaces epmd. Vous pouvez uniquement configurer le port epmd : http://www.erlang.org/faq/how_do_i.html#id55132

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X