Zainstalowałem RabbitMQ na maszynie Debian Linux Squeeze i chciałbym, aby nasłuchiwał tylko interfejsu localhost. dodałem
RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
do mojego /etc/rabbitmq/rabbitmq.conf
pliku, co powoduje, że jest on powiązany tylko z interfejsem localhost podczas nasłuchiwania na amqp
porcie (5672). Jednak nadal wiąże się ze wszystkimi interfejsami podczas nasłuchiwania na portach epmd (4369) i 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)
Jak temu zapobiec? Czy muszę skonfigurować iptables, czy też są dodatkowe opcje konfiguracji RabbitMQ, które pozwolą mu robić to, co chcę?
Odpowiedzi:
/etc/rabbitmq/rabbitmq-env.conf
Wstawienie następującego spowoduje, że RabbitMQ i epmd nasłuchują tylko na localhost:Trochę więcej pracy wymaga skonfigurowanie Erlanga, aby używał hosta lokalnego tylko dla portu o wyższym numerze (który jest używany do klastrowania węzłów, o ile wiem). Jeśli nie obchodzi Cię tworzenie klastrów i po prostu chcesz, aby Rabbit był uruchamiany w pełni lokalnie, możesz przekazać Erlangowi opcję jądra, aby mogła ona korzystać tylko z interfejsu pętli zwrotnej.
Aby to zrobić, utwórz nowy plik
/etc/rabbitmq/
- wywołam gorabbit.config
. W tym pliku umieścimy opcję Erlang, którą musimy załadować w czasie wykonywania.Jeśli używasz wtyczki do zarządzania i chcesz ją ograniczyć do hosta lokalnego, musisz skonfigurować jego porty osobno, co spowoduje, że plik rabbit.config będzie zawierał:
[ {rabbitmq_management, [ {listener, [{port, 15672}, {ip, "127.0.0.1"}]} ]}, {kernel, [ {inet_dist_use_interface,{127,0,0,1}} ]} ].
(Uwaga: RabbitMQ pozostawia epmd uruchomione, gdy się wyłącza, więc jeśli chcesz zablokować port klastrowania Erlanga, musisz zrestartować epmd oddzielnie od Rabbit.)
Następnie musimy uruchomić RabbitMQ podczas ładowania. Otwórz
/etc/rabbitmq/rabbitmq.conf
ponownie i umieść następujące na górze:Spowoduje to załadowanie tego pliku konfiguracyjnego po uruchomieniu serwera króliczego i przekazanie opcji do Erlang.
Powinieneś teraz mieć wszystkie procesy Erlang / RabbitMQ nasłuchujące tylko na localhost! Można to sprawdzić za pomocą
netstat -ntlap
EDIT: W starszych wersjach RabbitMQ, plik konfiguracyjny jest:
/etc/rabbitmq/rabbitmq.conf
. Jednak ten plik został zastąpionyrabbit-env.conf
plikiem.źródło
/etc/rabbitmq/rabbitmq.conf
ponownie”. Dlaczego „znowu”? Czy masz na myślirabbitmq-env.conf
?ERL_EPMD_ADDRESS
kontroluje tylko nasłuchujący adres IP epmd, jeśli chcesz zmienić nasłuchujący adres IP portu RabbitMQ w klastrze (25672), musisz użyć tejinet_dist_use_interface
opcji.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}"
Aby RabbitMQ nasłuchiwał na localhost / bind tylko do localhost:
3 różne sposoby (wszystkie równoważne):
Umieść NODE_IP_ADDRESS = 127.0.0.1 w pliku zmiennych środowiskowych (patrz http://www.rabbitmq.com/configure.html#define-environment-variables )
Umieść właściwości tcp_listeners i ssl_listeners w pliku konfiguracyjnym: Wpisy konfiguracyjne tcp_listeners i ssl_listeners regulują interfejsy, na których nasłuchuje RabbitMQ. Wpis dotyczący tylko nasłuchiwania na localhost to np. {Tcp_listeners, [{'127.0.0.1', 5672}]} (składnia może być niepoprawna, sprawdź) http://www.rabbitmq.com/configure.html# plik konfiguracyjny
eksportuj środowisko zmienna w skrypcie startowym (/etc/init.d/rabbitmq-server) eksport RABBITMQ_NODE_IP_ADDRESS = 127.0.0.1
Ten ostatni działał dla mnie.
EPMD:
Program Epmd sprawia, że rozproszone części środowiska wykonawczego Erlang działają. Jeśli budujesz klaster złożony z wielu maszyn, musisz pozostawić go dostępnym dla innych węzłów i na pewno hosta lokalnego. Ale ma wbudowaną ochronę za pomocą pliku cookie.
Prawie nigdy nie wymaga uwagi. Pamiętaj tylko, że programy erlang (w tym na przykład rabbitmqctl) muszą mieć dostęp do tego portu, aby kontaktować się z innymi programami erlang.
Ale jeśli masz do czynienia z danymi finansowymi lub dokumentacją medyczną, ochrona epmd może być dobrym pomysłem. Domyślny port, z którego korzysta epmd, to 4369, inne programy łączą się z nim za pośrednictwem tcp.
Zobacz także: http://www.erlang.org/doc/man/epmd.html#environment_variables
Jeśli chcesz zabezpieczyć RabbitMQ,
Wyłącz wbudowane konto gościa http://www.rabbitmq.com/admin-guide.html#default-state
Rozważ użycie protokołu SSL i uwierzytelnianie przy użyciu łańcucha certyfikatów
Te odpowiedzi otrzymałem od kanału IRC społeczności RabbitMQ.
Chciałbym im podziękować.
http://dev.rabbitmq.com/irclog/index.php?date=2011-06-14
Mam nadzieję, że powyższe zaoszczędzi ci trochę czasu (znalezienie odpowiedzi zajęło mi 6 godzin).
źródło
Jeśli określisz zmienne środowiskowe w pliku rabbitmq.conf, musisz upuścić prefiks RABBITMQ_, więc spróbuj:
NODE_IP_ADDRESS = 127.0.0.1
źródło
RABBITMQ_NODE_IP_ADDRESS
alboNODE_IP_ADDRESS
działa, ale jak wspomniano tylko dla portu amqp.AFAIK, tak naprawdę nie można skonfigurować interfejsów epmd. Możesz skonfigurować tylko port epmd: http://www.erlang.org/faq/how_do_i.html#id55132
źródło