J'ai installé RabbitMQ sur une machine Linux 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 /etc/rabbitmq/rabbitmq.conf
fichier, ce qui le lie uniquement à l'interface localhost lors de l'écoute sur le amqp
port (5672). Cependant, il reste lié à toutes les interfaces lors de l'é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 d'autres options de configuration de RabbitMQ qui lui permettront de faire ce que je veux?
Réponses:
Mettre les éléments suivants dans
/etc/rabbitmq/rabbitmq-env.conf
fera RabbitMQ et EPMD écouter uniquement localhost:Il faut un peu plus de travail pour configurer Erlang afin qu'il n'utilise que localhost pour le port dont le numéro est le plus élevé (utilisé pour la mise en cluster des nœuds, pour autant que je sache). Si vous ne vous souciez pas de la mise en cluster et que vous voulez simplement que Rabbit soit entièrement exécuté localement, vous pouvez alors donner à Erlang une option du noyau lui permettant d’utiliser uniquement l’interface de bouclage.
Pour ce faire, créez un nouveau fichier dans
/etc/rabbitmq/
- je l'appellerairabbit.config
. Dans ce fichier, nous mettrons l'option Erlang que nous devons charger à l'exécution.Si vous utilisez le plugin de gestion et souhaitez également le limiter à localhost, vous devez configurer ses ports séparément, afin que rabbit.config inclue ceci:
[ {rabbitmq_management, [ {listener, [{port, 15672}, {ip, "127.0.0.1"}]} ]}, {kernel, [ {inet_dist_use_interface,{127,0,0,1}} ]} ].
(Remarque: RabbitMQ laisse epmd en marche lorsqu'il s'arrête. Par conséquent, si vous souhaitez bloquer le port de cluster d'Erlang, vous devrez redémarrer epmd séparément de Rabbit.)
Ensuite, RabbitMQ doit le charger au démarrage. Ouvrez à
/etc/rabbitmq/rabbitmq.conf
nouveau et mettez ce qui suit en haut:Cela charge ce fichier de configuration au démarrage du serveur lapin et transmet les options à Erlang.
Vous devriez maintenant avoir tous les processus Erlang / RabbitMQ en écoute uniquement sur localhost! Ceci 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 lerabbit-env.conf
fichier.la source
/etc/rabbitmq/rabbitmq.conf
nouveau". Pourquoi "encore"? Tu veux direrabbitmq-env.conf
?ERL_EPMD_ADDRESS
ne contrôle que l'adresse IP d'écoute de epmd. Si vous souhaitez modifier l'adresse IP d'écoute du port de cluster (25672) de RabbitMQ, vous devez utiliser l'inet_dist_use_interface
option.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}"
Pour que RabbitMQ écoute sur localhost / lie uniquement à localhost:
3 façons différentes (toutes équivalentes):
Placez NODE_IP_ADDRESS = 127.0.0.1 dans le fichier de variables d’environnement (voir http://www.rabbitmq.com/configure.html#define-environment-variables )
Placez 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 sur lesquelles RabbitMQ écoute. Par exemple, {tcp_listeners, [{'127.0.0.1', 5672}]} (la syntaxe pourrait ne pas être correcte, cochez-la) http://www.rabbitmq.com/configure.html# fichier de configuration
exporter l'env. variable dans le script de démarrage (/etc/init.d/rabbitmq-server) export RABBITMQ_NODE_IP_ADDRESS = 127.0.0.1
Ce dernier a fonctionné pour moi.
EPMD:
Le programme Epmd réalise des parties distribuées du moteur d’exécution d’Erlang. Si vous construisez un cluster multi-machines, vous devez les laisser accessibles aux autres nœuds et certainement à localhost. Mais il a une protection intégrée via un fichier cookie.
Cela ne demande presque jamais aucune attention. N'oubliez pas que les programmes erlang (notamment rabbitmqctl) doivent accéder à ce port pour contacter d'autres programmes erlang.
Toutefois, si vous traitez avec des données financières ou des dossiers médicaux, 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 davantage RabbitMQ,
Désactiver le compte invité intégré http://www.rabbitmq.com/admin-guide.html#default-state
Pensez à utiliser SSL et à vous authentifier à l'aide de la chaîne de certificats
J'ai reçu ces réponses du canal IRC de la communauté RabbitMQ.
Voudrais les remercier.
http://dev.rabbitmq.com/irclog/index.php?date=2011-06-14
J'espère que ce qui précède vous fait gagner du temps (cela m'a pris 6 heures pour trouver une réponse).
la source
Si vous spécifiez des variables d'environnement dans le fichier rabbitmq.conf, vous devez supprimer le préfixe RABBITMQ_. Essayez donc:
NODE_IP_ADDRESS = 127.0.0.1
la source
RABBITMQ_NODE_IP_ADDRESS
ouNODE_IP_ADDRESS
fonctionne, mais comme mentionné uniquement pour le port amqp.Autant que je sache, 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
la source