Saya telah menginstal RabbitMQ pada mesin Debian Linux Squeeze, dan saya hanya ingin mendengarkan antarmuka localhost. saya telah menambahkan
RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
ke /etc/rabbitmq/rabbitmq.conf
file saya , dan itu membuatnya hanya mengikat antarmuka localhost saat mendengarkan pada amqp
port (5672). Namun, itu masih mengikat semua antarmuka saat mendengarkan pada port epmd (4369) dan 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)
Bagaimana saya mencegah ini? Apakah saya harus mengatur iptables, atau ada opsi konfigurasi tambahan RabbitMQ yang akan membuatnya melakukan apa yang saya inginkan?
Jawaban:
Memasukkan yang berikut ini
/etc/rabbitmq/rabbitmq-env.conf
akan membuat RabbitMQ dan EPMD hanya mendengarkan localhost:Dibutuhkan sedikit lebih banyak pekerjaan untuk mengkonfigurasi Erlang untuk hanya menggunakan localhost untuk port bernomor lebih tinggi (yang digunakan untuk mengelompokkan node sejauh yang saya tahu). Jika Anda tidak peduli tentang pengelompokan dan hanya ingin Rabbit dijalankan sepenuhnya secara lokal maka Anda dapat memberikan opsi kernel kepada Erlang untuk itu hanya menggunakan antarmuka loopback.
Untuk melakukannya, buat file baru di
/etc/rabbitmq/
- saya akan memanggilnyarabbit.config
. Dalam file ini kita akan meletakkan opsi Erlang yang perlu kita muat pada saat dijalankan.Jika Anda menggunakan plugin manajemen dan juga ingin membatasinya ke localhost, Anda harus mengkonfigurasi port-portnya secara terpisah, membuat rabbit.config menyertakan ini:
[ {rabbitmq_management, [ {listener, [{port, 15672}, {ip, "127.0.0.1"}]} ]}, {kernel, [ {inet_dist_use_interface,{127,0,0,1}} ]} ].
(Catatan RabbitMQ membiarkan epmd berjalan ketika dimatikan, jadi jika Anda ingin memblokir port pengelompokan Erlang, Anda harus memulai ulang EPDM secara terpisah dari Rabbit.)
Selanjutnya kita harus meminta RabbitMQ memuat ini saat startup. Buka
/etc/rabbitmq/rabbitmq.conf
lagi dan letakkan yang berikut di atas:Ini memuat file konfigurasi saat server kelinci dimulai dan akan meneruskan opsi ke Erlang.
Anda sekarang harus memiliki semua proses Erlang / RabbitMQ hanya mendengarkan di localhost! Ini dapat diperiksa dengan
netstat -ntlap
EDIT: Dalam versi RabbitMQ, file konfigurasi adalah:
/etc/rabbitmq/rabbitmq.conf
. Namun, file ini telah digantikan olehrabbit-env.conf
file tersebut.sumber
/etc/rabbitmq/rabbitmq.conf
lagi". Kenapa lagi"? Apakah yang Anda maksudrabbitmq-env.conf
?ERL_EPMD_ADDRESS
hanya mengontrol IP mendengarkan EPDM, jika Anda ingin mengubah port cluster (25672) mendengarkan IP dari RabbitMQ, maka Anda perlu menggunakaninet_dist_use_interface
opsi.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}"
Untuk membuat RabbitMQ mendengarkan di localhost / bind hanya ke localhost:
3 Cara berbeda (semua setara):
Masukkan NODE_IP_ADDRESS = 127.0.0.1 dalam file variabel lingkungan (Lihat http://www.rabbitmq.com/configure.html#define-environment-variables )
Letakkan properti tcp_listeners dan ssl_listeners dalam file config: Entri konfigurasi tcp_listeners dan ssl_listeners mengatur antarmuka yang didengarkan RabbitMQ. Entri untuk hanya mendengarkan di localhost akan menjadi misalnya, {tcp_listeners, [{'127.0.0.1', 5672}]} (Sintaks mungkin tidak benar, periksa) http://www.rabbitmq.com/configure.html# file konfigurasi
ekspor env. variabel dalam skrip startup (/etc/init.d/rabbitmq-server) ekspor RABBITMQ_NODE_IP_ADDRESS = 127.0.0.1
Yang terakhir ini bekerja untuk saya.
EPMD:
Program Epmd membuat bagian-bagian terdistribusi dari runtime Erlang berfungsi. Jika Anda sedang membangun cluster multi-mesin, Anda harus membuatnya dapat diakses oleh node lain dan tentunya localhost. Tetapi ia memiliki perlindungan bawaan melalui file cookie.
Hampir tidak pernah membutuhkan perhatian. Perlu diingat bahwa program erlang (termasuk rabbitmqctl, misalnya) perlu mengakses port tersebut untuk menghubungi program erlang lainnya.
Tetapi, jika Anda berurusan dengan data keuangan atau catatan kesehatan, melindungi EPMD mungkin merupakan ide yang baik. Port default menggunakan epmd adalah 4369, program lain terhubung ke sana melalui tcp.
Lihat juga: http://www.erlang.org/doc/man/epmd.html#environment_variables
Jika Anda perlu mengamankan RabbitMQ lebih jauh,
Nonaktifkan akun tamu bawaan http://www.rabbitmq.com/admin-guide.html#default-state
Pertimbangkan untuk menggunakan SSL dan mengautentikasi menggunakan rantai sertifikat
Saya mendapat jawaban ini dari saluran IRC komunitas RabbitMQ.
Saya ingin mengucapkan terima kasih.
http://dev.rabbitmq.com/irclog/index.php?date=2011-06-14
Semoga hal di atas menghemat waktu untuk Anda (butuh saya 6 jam untuk menemukan jawaban).
sumber
Jika Anda menentukan variabel lingkungan di file rabbitmq.conf Anda harus meletakkan awalan RABBITMQ_, jadi cobalah:
NODE_IP_ADDRESS = 127.0.0.1
sumber
RABBITMQ_NODE_IP_ADDRESS
atauNODE_IP_ADDRESS
berfungsi, tetapi sebagaimana disebutkan hanya untuk port amqp.AFAIK Anda tidak bisa benar-benar mengkonfigurasi antarmuka EPDM. Anda hanya dapat mengatur port epmd: http://www.erlang.org/faq/how_do_i.html#id55132
sumber