Я установил RabbitMQ на машину Debian Linux Squeeze, и я хотел бы, чтобы он слушал только интерфейс localhost. я добавил
RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
к моему /etc/rabbitmq/rabbitmq.conf
файлу, и это делает его привязанным только к интерфейсу localhost при прослушивании через amqp
порт (5672). Однако при прослушивании через порты epmd (4369) и 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)
Как я могу предотвратить это? Нужно ли настраивать iptables, или есть дополнительные параметры конфигурации RabbitMQ, которые заставят его делать то, что я хочу?
Ответы:
Если
/etc/rabbitmq/rabbitmq-env.conf
добавить следующее , RabbitMQ и epmd будут слушать только локальный хост:Требуется немного больше работы, чтобы сконфигурировать Erlang для использования только localhost для порта с более высоким номером (насколько я могу судить, он используется для кластеризации узлов). Если вы не заботитесь о кластеризации и просто хотите, чтобы Rabbit работал полностью локально, тогда вы можете передать Erlang опцию ядра, чтобы он использовал только интерфейс обратной петли.
Для этого создайте новый файл в
/etc/rabbitmq/
- я его назовуrabbit.config
. В этом файле мы поместим опцию Erlang, которую нам нужно загрузить во время выполнения.Если вы используете плагин управления, а также хотите ограничить его локальным хостом, вам необходимо настроить его порты отдельно, чтобы в rabbit.config было следующее:
[ {rabbitmq_management, [ {listener, [{port, 15672}, {ip, "127.0.0.1"}]} ]}, {kernel, [ {inet_dist_use_interface,{127,0,0,1}} ]} ].
(Обратите внимание, что RabbitMQ оставляет epmd включенным, когда он выключается, поэтому, если вы хотите заблокировать порт кластеризации Erlang, вам нужно будет перезапустить epmd отдельно от Rabbit.)
Далее нам нужно, чтобы RabbitMQ загрузил это при запуске. Откройте
/etc/rabbitmq/rabbitmq.conf
снова и поместите следующее:Он загружает этот конфигурационный файл при запуске кроличьего сервера и передает параметры Erlang.
Теперь у вас должны быть все процессы Erlang / RabbitMQ, прослушивающие только локальный хост! Это можно проверить с помощью
netstat -ntlap
EDIT: В старых версиях RabbitMQ, файл конфигурации:
/etc/rabbitmq/rabbitmq.conf
. Однако этот файл был замененrabbit-env.conf
файлом.источник
/etc/rabbitmq/rabbitmq.conf
снова». Почему "опять"? Вы имеете в видуrabbitmq-env.conf
?ERL_EPMD_ADDRESS
управляет только прослушивающим IP-адресом epmd, если вы хотите изменить прослушивающий IP-адрес кластерного порта (25672) RabbitMQ, вам необходимо использовать этуinet_dist_use_interface
опцию.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}"
Чтобы RabbitMQ прослушивал localhost / bind только localhost:
3 разных способа (все равно):
Поместите NODE_IP_ADDRESS = 127.0.0.1 в файл переменных среды (см. Http://www.rabbitmq.com/configure.html#define-environment-variables )
Поместите свойства tcp_listeners и ssl_listeners в файл конфигурации: Записи конфигурации tcp_listeners и ssl_listeners управляют интерфейсами, которые прослушивает RabbitMQ. Запись для простого прослушивания на localhost будет, например, {tcp_listeners, [{'127.0.0.1', 5672}]} (синтаксис может быть неправильным, проверьте его) http://www.rabbitmq.com/configure.html# конфиг-файл
экспорт env. переменная в скрипте запуска (/etc/init.d/rabbitmq-server) export RABBITMQ_NODE_IP_ADDRESS = 127.0.0.1
Последний работал на меня.
EPMD:
Программа Epmd обеспечивает работу распределенных частей среды исполнения Erlang. Если вы строите кластер с несколькими машинами, вам нужно оставить их доступными для других узлов и, конечно, для localhost. Но он имеет встроенную защиту через файл cookie.
Это почти никогда не требует внимания. Просто помните, что программы erlang (включая, например, rabbitmqctl) должны иметь доступ к этому порту для связи с другими программами erlang.
Но если вы имеете дело с финансовыми данными или медицинскими записями, защита epmd может быть хорошей идеей. Порт по умолчанию, который использует epmd - 4369, другие программы подключаются к нему через tcp.
Смотрите также: http://www.erlang.org/doc/man/epmd.html#environment_variables
Если вам нужно защитить RabbitMQ дальше,
Отключите встроенную гостевую учетную запись http://www.rabbitmq.com/admin-guide.html#default-state
Рассмотрите возможность использования SSL и аутентификации с помощью цепочки сертификатов.
Я получил эти ответы от IRC-канала сообщества RabbitMQ.
Хотел бы поблагодарить их.
http://dev.rabbitmq.com/irclog/index.php?date=2011-06-14
Надеюсь, что выше сэкономит вам время (мне понадобилось 6 часов, чтобы найти ответ).
источник
Если вы указываете переменные окружения в файле rabbitmq.conf, вам нужно удалить префикс RABBITMQ_, поэтому попробуйте:
NODE_IP_ADDRESS = 127.0.0.1
источник
RABBITMQ_NODE_IP_ADDRESS
илиNODE_IP_ADDRESS
работает, но, как уже упоминалось, только для порта AMQP.На самом деле, вы не можете настроить интерфейсы epmd. Вы можете настроить только порт epmd: http://www.erlang.org/faq/how_do_i.html#id55132
источник