RabbitMQ’yu yalnızca localhost’a nasıl dinletirim?


40

RabbitMQ’u bir Debian Linux Squeeze makinesine kurdum ve sadece localhost arayüzünü dinlemek istiyorum. ekledim

RABBITMQ_NODE_IP_ADDRESS=127.0.0.1

benim dosyama /etc/rabbitmq/rabbitmq.confve bu amqpbağlantı noktasını (5672) dinlerken sadece localhost arayüzüne bağlanır . Bununla birlikte, port epmd (4369) ve 43380 dinlerken hala tüm arayüzlere bağlanmaktadır:

# 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)

Bunu nasıl önlerim? Iptables kurmak zorunda mıyım, yoksa istediğimi yapmamı sağlayacak ilave RabbitMQ yapılandırma seçenekleri var mı?


epmd, RabbitMQ’un bir parçası değildir. Erlang adlandırma cinidir. Yalnızca localhost'a bağlanmanın en iyi yolu tavşanlara 'rabbit @ localhost' adını vermektir. Bu, birden fazla RabbitMQ sunucusunu kümelemek için kullanılan ve adlanga ağdaki düğümü bulmak için Erlang tarafından kullanılır. @ İşaretinden sonraki kısım, Tavşan çalıştıran ana bilgisayar adıdır ve açıkça, yerel ana bilgisayar harici olarak erişilebilir bir ad değildir.
Michael Dillon

Yanıtlar:


48

Aşağıdakini koymak, /etc/rabbitmq/rabbitmq-env.confRabbitMQ ve epmd'nin yalnızca localhost'ta dinlemesini sağlar:

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

Erlang'ı yalnızca daha yüksek numaralı bağlantı noktası için localhost kullanacak şekilde yapılandırmak biraz daha fazla çalışma gerektiriyor (düğümleri söyleyebileceğim kadarıyla kümelemek için kullanılıyor). Kümelemeyi umursamıyorsanız ve sadece Tavşan'ın tamamen yerel olarak çalıştırılmasını istiyorsanız, Erlang'ı yalnızca geridöngü arabirimini kullanmak için bir çekirdek seçeneğinden geçirebilirsiniz.

Bunu yapmak için, içinde yeni bir dosya oluşturun /etc/rabbitmq/- Ben arayacağım rabbit.config. Bu dosyaya çalışma zamanında yüklememiz gereken Erlang seçeneğini koyacağız.

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

Yönetim eklentisini kullanıyorsanız ve bunu localhost ile sınırlandırmak istiyorsanız, tavşanların portlarını ayrı ayrı yapılandırmanız gerekir, rabbit.config şunları içerir:

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

(RabbitMQ, kapandığında epmd'nin çalışmaya başladığını unutmayın, bu nedenle Erlang'ın kümelenme bağlantı noktasını engellemek istiyorsanız, epmd'yi Tavşan'dan ayrı olarak yeniden başlatmanız gerekir.)

Daha sonra, bunu başlangıçta RabbitMQ ile doldurmamız gerekiyor. /etc/rabbitmq/rabbitmq.confTekrar aç ve aşağıdakileri en üste koy:

export RABBITMQ_CONFIG_FILE="/etc/rabbitmq/rabbit"

Bu, tavşan sunucusu başlatıldığında yapılan yapılandırma dosyasını yükler ve seçenekleri Erlang'a iletir.

Şimdi tüm Erlang / RabbitMQ işlemlerini yalnızca yerel ana bilgisayarda dinletmelisin! Bu kontrol edilebilirnetstat -ntlap

DÜZENLEME: RabbitMQ eski sürümlerinde, yapılandırma dosyasıdır: /etc/rabbitmq/rabbitmq.conf. Ancak, bu dosya dosyayla değiştirildi rabbit-env.conf.


1
Bravo! Teşekkürler. Not: EPEL üzerinden CentOS / RHEL için RabbitMQ'da 'rabbitmq-env.conf' 'a ihtiyacım vardı. Ve 'rabbit.config' için 'tavşan' ihracatı bana garip gelse de, ekler çalıştı.
astrost

/etc/rabbitmq/rabbitmq.confMsgstr "Tekrar aç ". Neden "tekrar"? Şunu musunuz rabbitmq-env.conf?
phinz

Ortam değişkeni, ERL_EPMD_ADDRESSyalnızca EPM'nin dinleme IP'sini kontrol eder, RabbitMQ'un küme portunu (25672) dinleyen IP'sini değiştirmek istiyorsanız, o zaman inet_dist_use_interfaceseçeneği kullanmanız gerekir . 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}"
Terry

13

RabbitMQ'nin localhost'ta dinlemesini sağlamak / yalnızca localhost'a bağlanmak için:

3 Farklı yollar (hepsi eşdeğeri):

  • NODE_IP_ADDRESS = 127.0.0.1 ortam değişkenleri dosyasına koyun (Bkz. Http://www.rabbitmq.com/configure.html#define-environment-variables )

  • Config dosyasına tcp_listeners ve ssl_listeners özelliklerini koyun: tcp_listeners ve ssl_listeners yapılandırma girdileri RabbitMQ'nin dinlediği arabirimleri yönetir. Yalnızca yerel ana bilgisayarı dinlemek için yapılan bir giriş, örneğin: {tcp_listeners, [{'127.0.0.1', 5672}]} (Sözdizimi doğru olmayabilir, kontrol edin) http://www.rabbitmq.com/configure.html# yapılandırma dosyası

  • env dışa aktar başlangıç ​​betiğindeki değişken (/etc/init.d/rabbitmq-server) dışa aktarır RABBITMQ_NODE_IP_ADDRESS = 127.0.0.1

İkincisi benim için çalıştı.

Epmd:

Epmd programı, Erlang çalışma zamanının çalışmasının dağıtılmış bölümlerini yapar. Çok makineli bir küme inşa ediyorsanız, onları diğer düğümlere ve kesinlikle yerel ana makinelere erişilebilir kılmanız gerekir. Ancak çerez dosyası üzerinden yerleşik korumaya sahiptir.

Neredeyse hiç dikkat gerektirmiyor. Sadece erlang programlarının (örneğin, rabbitmqctl dahil) diğer erlang programlarına ulaşmak için bu porta erişmesi gerektiğini unutmayın.

Ancak, finansal verilerle veya sağlık kayıtlarıyla uğraşıyorsanız, epmd'yi korumak iyi bir fikir olabilir. Varsayılan port epmd'nin kullandığı 4369'dur, diğer programlar tcp ile bağlanır.

Ayrıca bakınız: http://www.erlang.org/doc/man/epmd.html#environment_variables

RabbitMQ cihazını daha da güvenli hale getirmeniz gerekirse,

  1. Yerleşik misafir hesabını devre dışı bırakın http://www.rabbitmq.com/admin-guide.html#default-state

  2. SSL kullanmayı ve sertifika zincirini kullanarak kimlik doğrulamayı düşünün

Bu cevapları RabbitMQ topluluğu IRC kanalından aldım.

Onlara teşekkür etmek isterim.

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

Yukarıdakilerin sizin için biraz zaman kazandıracağını ümit ediyorum (bir cevap bulmam 6 saatimi aldı).


Yukarıdaki epmd bağlantısında, Emd_EPMD_ADDRESS için bir giriş var, tahminen epmd adreslerini bağlayacağı tahmin edildi, ancak bu ortam değişkenini rabbitmq kullanıcısı için nereye ayarlayacağımı görmeme dışında.
François Beausoleil

5

Rabbitmq.conf dosyasında ortam değişkenlerini belirtirseniz RABBITMQ_ önekini bırakmanız gerekir, bu nedenle deneyin:

NODE_IP_ADDRESS = 127.0.0.1


Kurulumumda RABBITMQ_NODE_IP_ADDRESSya NODE_IP_ADDRESSçalışır ya da çalışır, ancak yalnızca amqp bağlantı noktası için belirtildiği gibi.
Vebjorn Ljosa,

1
Epmd portu erlang port mapper'ın bir fonksiyonudur ve afaik'in adres adresini sınırlandırması mümkün değildir.
cbz

Ayrıca, EPMD bağlantı noktası çerezlerle korunur, böylece RabbitMQ sunucu çerezinizi bilmediği sürece kimse bağlanamaz. Bu kurabiyeyi yalnızca bir RabbitMQ kümesinin diğer üyelerine verirsiniz. Bir API anahtarıyla aynı prensip.
Michael Dillon

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.