मैं RabbitMQ को केवल लोकलहोस्ट कैसे सुनूं?


40

मैंने डेबियन लिनक्स स्क्वीज़ मशीन पर RabbitMQ स्थापित किया है, और मैं चाहूंगा कि यह केवल स्थानीयहोस्ट इंटरफ़ेस को सुने। मैंने जोड़ा है

RABBITMQ_NODE_IP_ADDRESS=127.0.0.1

मेरी /etc/rabbitmq/rabbitmq.confफ़ाइल के लिए, और यह amqpपोर्ट (5672) को सुनने पर केवल स्थानीयहोस्ट इंटरफ़ेस के लिए बाध्य करता है । हालाँकि, यह अभी भी सभी इंटरफेस को बांधता है जब पोर्ट्स एपीएमडी (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 कॉन्फ़िगरेशन विकल्प हैं जो यह कर देंगे कि मुझे क्या चाहिए?


epmd RabbitMQ का हिस्सा नहीं है। यह एरलंग नामकरण डेमॉन है। केवल लोकलहोस्ट को बांधने का सबसे अच्छा तरीका है कि खरगोश को 'खरगोश @ लोकलहोस्ट' नाम दिया जाए। यह कई RabbitMQ सर्वरों को क्लस्टर करने के लिए उपयोग किया जाने वाला नोडेनैम है, और नेटवर्क भर में नोड को खोजने के लिए Erlang द्वारा उपयोग किया जाता है। @ के बाद का हिस्सा होस्टनाम है जो खरगोश और स्पष्ट रूप से चल रहा है, लोकलहोस्ट बाहरी रूप से सुलभ नाम नहीं है।
माइकल डिलन

जवाबों:


48

निम्नलिखित को डालने से /etc/rabbitmq/rabbitmq-env.confRabbitMQ और epmd केवल स्थानीयहोस्ट पर सुनेंगे:

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

एर्लांग को कॉन्फ़िगर करने के लिए थोड़ा अधिक काम लगता है केवल उच्च संख्या वाले पोर्ट के लिए लोकलहोस्ट का उपयोग करना (जो कि जहां तक ​​मैं बता सकता हूं क्लस्टरिंग के लिए उपयोग किया जाता है)। यदि आप क्लस्टरिंग के बारे में परवाह नहीं करते हैं और बस खरगोश को पूरी तरह से स्थानीय रूप से चलाना चाहते हैं तो आप इसके लिए एर्लांग को एक कर्नेल विकल्प पास कर सकते हैं केवल लूपबैक इंटरफ़ेस का उपयोग करने के लिए।

ऐसा करने के लिए, /etc/rabbitmq/मैं एक नई फ़ाइल बनाता हूं - मैं इसे कॉल करूंगा rabbit.config। इस फ़ाइल में हम Erlang विकल्प डालेंगे जिसे हमें रन टाइम पर लोड करना होगा।

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

यदि आप प्रबंधन प्लगइन का उपयोग कर रहे हैं और यह भी कि आप लोकलहोस्ट तक सीमित करना चाहते हैं, तो आपको इसके बंदरगाहों को अलग से कॉन्फ़िगर करना होगा, जिससे खरगोश को शामिल किया जा सकता है।

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

(ध्यान दें कि RabbitMQ, जब यह बंद हो जाता है, तो एपीएमडी चल रहा है, इसलिए यदि आप एर्लैंग के क्लस्टरिंग पोर्ट को बंद करना चाहते हैं, तो आपको रैबिट से अलग से एपीएमडी को पुनः आरंभ करना होगा।)

इसके बाद हमें स्टार्टअप पर RabbitMQ लोड करने की आवश्यकता है। /etc/rabbitmq/rabbitmq.confफिर से खोलें और शीर्ष पर निम्नलिखित डालें:

export RABBITMQ_CONFIG_FILE="/etc/rabbitmq/rabbit"

यह लोड होता है जो खरगोश सर्वर शुरू होने पर फाइल को कॉन्फ़िगर करता है और एर्लैंग के विकल्पों को पास करेगा।

अब आपको सभी Erlang / RabbitMQ प्रक्रियाएँ केवल लोकलहोस्ट पर ही सुननी चाहिए! इससे जांच की जा सकती हैnetstat -ntlap

EDIT: RabbitMQ के पुराने संस्करणों में, कॉन्फ़िगरेशन फ़ाइल है /etc/rabbitmq/rabbitmq.conf:। हालाँकि, इस फ़ाइल को फ़ाइल से बदल दिया गया है rabbit-env.conf


1
वाहवाही! धन्यवाद। नोट: मुझे EPEL के माध्यम से CentOS / RHEL के लिए RabbitMQ पर 'rabbitmq-env.conf' की आवश्यकता थी। और जबकि 'खरगोश.कॉन्फिग' के लिए 'खरगोश' का निर्यात मुझे अजीब लगा, इसने सैंस प्रत्यय का काम किया।
astrostl

" /etc/rabbitmq/rabbitmq.confफिर से खोलो "। फिर से क्यों"? क्या आपका मतलब है rabbitmq-env.conf?
phinz

पर्यावरण चर ERL_EPMD_ADDRESSकेवल एपीएमडी के सुनने वाले आईपी को नियंत्रित करता है, यदि आप रैबिटबैंक के क्लस्टर पोर्ट (25672) सुनने वाले आईपी को बदलना चाहते हैं, तो आपको 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}"
टेरी

13

RabbitMQ को लोकलहोस्ट पर सुनने के लिए / केवल लोकलहोस्ट से बाँधें:

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 सुनता है। लोकलहोस्ट पर सिर्फ सुनने के लिए एक प्रविष्टि होगी, जैसे, {tcp_listeners, [{'127.0.0.1', 5672}]} (सिंटैक्स सही नहीं हो सकता है, इसे जांचें) http://www.rabbitmq.com/configure/# config फ़ाइल

  • env निर्यात करें। स्टार्टअप स्क्रिप्ट में चर (/etc/init.d/rabbitmq-server) RABBITMQ_NODE_IP_ADDRESS = 127.0.0.1 निर्यात करें

बाद वाले ने मेरे लिए काम किया।

EPMD:

एपडम कार्यक्रम एरलांग रनटाइम कार्य के वितरित भागों को बनाता है। यदि आप एक मल्टी-मशीन क्लस्टर का निर्माण कर रहे हैं, तो आपको उन्हें अन्य नोड्स और निश्चित रूप से लोकलहोस्ट के लिए सुलभ छोड़ना होगा। लेकिन इसमें कुकी फ़ाइल के माध्यम से अंतर्निहित सुरक्षा है।

यह शायद ही कभी किसी भी ध्यान की आवश्यकता है। बस इस बात को ध्यान में रखें कि एरगैंग प्रोग्राम्स (रैबिटमक्टल सहित, उदाहरण के लिए) को अन्य एरांग प्रोग्राम्स से संपर्क करने के लिए उस पोर्ट को एक्सेस करना होगा।

लेकिन, यदि आप वित्तीय डेटा या स्वास्थ्य रिकॉर्ड के साथ काम कर रहे हैं, तो एपीएमडी की रक्षा करना एक अच्छा विचार हो सकता है। डिफ़ॉल्ट पोर्ट एपीएमडी उपयोग 4369 है, अन्य प्रोग्राम टीसीपी के माध्यम से इसे कनेक्ट करते हैं।

इसे भी देखें: http://www.erlang.org/doc/man/epmd.html#environment_variables

यदि आपको RabbitMQ को और सुरक्षित करने की आवश्यकता है,

  1. अंतर्निहित अतिथि खाते को अक्षम करें http://www.rabbitmq.com/admin-guide.html#default-state

  2. SSL का उपयोग करने और प्रमाणपत्र श्रृंखला का उपयोग करके प्रमाणित करने पर विचार करें

मुझे ये जवाब RabbitMQ कम्युनिटी IRC चैनल से मिला है।

उन्हें धन्यवाद देना चाहूंगा।

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

आशा है कि उपरोक्त आपके लिए कुछ समय बचाता है (उत्तर खोजने में मुझे 6 घंटे लगे)।


ऊपर दिए गए epmd लिंक में ERL_EPMD_ADDRESS के लिए एक प्रविष्टि है, सम्भवतः पता सेट करने के लिए epmd बाँध देगा, सिवाय इसके कि मैं यह न देखूँ कि खरगोश के उपयोगकर्ता के लिए वह वातावरण चर कहाँ स्थापित किया जाए।
फ्रांस्वा ब्यूसोइल 19

5

यदि आप rabbitmq.conf फ़ाइल में पर्यावरण चर निर्दिष्ट करते हैं, तो आपको RABBITMQ_ उपसर्ग को छोड़ना होगा, इसलिए प्रयास करें:

NODE_IP_ADDRESS = 127.0.0.1


मेरी स्थापना, या तो पर RABBITMQ_NODE_IP_ADDRESSया NODE_IP_ADDRESSकाम करता है, लेकिन जैसा कि केवल AMQP बंदरगाह के लिए उल्लेख किया है।
Vebjorn Ljosa

1
एपीएमडी पोर्ट एरालांग पोर्ट मैपर का एक कार्य है, और एफाइक यह बाइंड एड्रेस को प्रतिबंधित करना संभव नहीं है।
cbz

इसके अलावा, EPMD पोर्ट कुकीज़ से सुरक्षित है, इसलिए कोई भी तब तक कनेक्ट नहीं हो सकता जब तक कि वे आपके RabbitMQ सर्वर कुकी को नहीं जानते। आप केवल उस कुकी को एक RabbitMQ क्लस्टर के अन्य सदस्यों को देंगे। API कुंजी के रूप में समान सिद्धांत।
माइकल डिलन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.