Frage Wie kann ich RabbitMQ nur auf localhost hören lassen?


Ich habe RabbitMQ auf einem Debian Linux Squeeze-Rechner installiert, und ich möchte nur die localhost-Schnittstelle hören. Ich habe hinzugefügt

RABBITMQ_NODE_IP_ADDRESS=127.0.0.1

zu meinem /etc/rabbitmq/rabbitmq.conf Datei, und das bindet es nur an die Localhost - Schnittstelle beim Anhören der amqp Hafen (5672). Beim Empfang der Ports epmd (4369) und 43380 wird jedoch weiterhin an alle Schnittstellen gebunden:

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

Wie verhindere ich das? Muss ich Iptables einrichten, oder gibt es zusätzliche RabbitMQ-Konfigurationsoptionen, die es machen, was ich will?


35
2018-02-15 12:28


Ursprung


epmd ist nicht Teil von RabbitMQ. Es ist der Erlang Namensdämon. Der beste Weg, nur an localhost zu binden, ist, Kaninchen den Knotennamen 'hase @ localhost' zu geben. Dies ist der Knotenname, der zum Gruppieren mehrerer RabbitMQ-Server verwendet wird und von Erlang verwendet wird, um den Knoten im Netzwerk zu finden. Der Teil nach dem @ ist der Hostname, auf dem Rabbit ausgeführt wird, und localhost ist eindeutig kein extern zugänglicher Name. - Michael Dillon


Antworten:


Putting das Folgende in /etc/rabbitmq/rabbitmq-env.conf wird RabbitMQ und epmd nur auf localhost hören lassen:

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

Es braucht etwas mehr Arbeit, um Erlang so zu konfigurieren, dass nur localhost für den Port mit der höheren Nummer verwendet wird (der für das Clustering von Knoten verwendet wird, soweit ich das beurteilen kann). Wenn Sie sich nicht um das Clustering kümmern und nur wollen, dass Rabbit vollständig lokal ausgeführt wird, können Sie Erlang eine Kerneloption übergeben, damit es nur die Loopback-Schnittstelle verwendet.

Erstellen Sie dazu eine neue Datei in /etc/rabbitmq/ - Ich werde es anrufen rabbit.config. In dieser Datei werden wir die Erlang-Option setzen, die wir zur Laufzeit laden müssen.

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

Wenn Sie das Management-Plug-in verwenden und dieses auch auf localhost beschränken möchten, müssen Sie seine Ports separat konfigurieren, sodass die Datei "rabbit.config" Folgendes enthält:

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

(Hinweis: RabbitMQ lässt epmd beim Herunterfahren laufen. Wenn Sie Erlangs Clustering-Port blockieren möchten, müssen Sie epmd separat von Rabbit neu starten.)

Als nächstes muss RabbitMQ dies beim Start laden. Aufmachen /etc/rabbitmq/rabbitmq.conf wieder und setze folgendes an die Spitze:

export RABBITMQ_CONFIG_FILE="/etc/rabbitmq/rabbit"

Dies lädt diese Konfigurationsdatei, wenn der Hasen-Server gestartet wird und übergibt die Optionen an Erlang.

Sie sollten nun alle Erlang / RabbitMQ-Prozesse nur auf localhost hören lassen! Dies kann mit überprüft werden netstat -ntlap

EDIT: In älteren Versionen von RabbitMQ ist die Konfigurationsdatei: /etc/rabbitmq/rabbitmq.conf. Diese Datei wurde jedoch durch die ersetzt rabbit-env.conf Datei.


43
2017-10-06 17:54



Bravo! Vielen Dank. Hinweis: Ich benötigte 'rabbitmq-env.conf' auf RabbitMQ für CentOS / RHEL über EPEL. Und während der 'Hase' Export für 'hasen.config' mir seltsam erschien, funktionierte es ohne Suffix. - astrostl


Um RabbitMQ auf localhost / bind nur auf localhost hören zu lassen:

3 verschiedene Wege (alle gleichwertig):

  • Setzen Sie NODE_IP_ADDRESS = 127.0.0.1 in die Umgebungsvariablendatei (Sehen http://www.rabbitmq.com/configure.html#define-environment-variables)

  • Setzen Sie die Eigenschaften tcp_listeners und ssl_listeners in die Konfigurationsdatei: Die Konfigurationseinträge tcp_listeners und ssl_listeners bestimmen die Schnittstellen, die RabbitMQ überwacht. Ein Eintrag für das Abhören von localhost wäre z. B. {tcp_listeners, [{'127.0.0.1', 5672}]} (Syntax ist möglicherweise nicht korrekt, überprüfen Sie es) http://www.rabbitmq.com/configure.html#config-file

  • exportiere das env. Variable im Startskript (/etc/init.d/rabbitmq-server) export RABBITMQ_NODE_IP_ADDRESS = 127.0.0.1

Letzteres hat für mich gearbeitet.

EPMD:

Das Programm Epmd macht verteilte Teile der Erlang-Laufzeitumgebung funktionsfähig. Wenn Sie einen Cluster mit mehreren Maschinen erstellen, müssen Sie sie anderen Knoten und natürlich localhost zugänglich lassen. Aber es hat eingebauten Schutz über Cookie-Datei.

Es erfordert kaum Aufmerksamkeit. Denken Sie daran, dass Erlang-Programme (einschließlich Rabbitmqctl zum Beispiel) auf diesen Port zugreifen müssen, um andere Erlang-Programme zu kontaktieren.

Wenn Sie jedoch mit Finanzdaten oder Gesundheitsakten zu tun haben, ist der Schutz von epmd eine gute Idee. Der Standard-Port, den epmd verwendet, ist 4369, andere Programme verbinden sich über tcp mit ihm.

Siehe auch: http://www.erlang.org/doc/man/epmd.html#environment_variables

Wenn Sie RabbitMQ noch weiter absichern müssen,

  1. Deaktivieren Sie das integrierte Gastkonto http://www.rabbitmq.com/admin-guide.html#default-state

  2. Erwägen Sie die Verwendung von SSL und die Authentifizierung mithilfe der Zertifikatskette

Ich habe diese Antworten vom RabbitMQ Community IRC Channel bekommen.

Ich möchte ihnen danken.

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

Ich hoffe, dass das oben genannte etwas Zeit für Sie spart (ich brauchte 6 Stunden, um eine Antwort zu finden).


13
2018-06-15 06:43



Der obige epmd-Link hat einen Eintrag für ERL_EPMD_ADDRESS, vermutlich um die Adressen festzulegen, an die epmd binden wird, außer dass ich nicht sehe, wo diese Umgebungsvariable für den rabbitmq-Benutzer gesetzt werden soll. - François Beausoleil


Wenn Sie Umgebungsvariablen in der Datei rabbitmq.conf angeben, müssen Sie das Präfix RABBITMQ_ löschen.

NODE_IP_ADDRESS = 127.0.0.1


5
2018-02-15 13:25



Auf meiner Installation, entweder RABBITMQ_NODE_IP_ADDRESS oder NODE_IP_ADDRESS funktioniert, aber wie erwähnt nur für den amqp port. - Vebjorn Ljosa
Der epmd-Port ist eine Funktion des Erlang-Port-Mappers, und afaik ist es nicht möglich, seine Bind-Adresse einzuschränken. - cbz
Außerdem ist der EPMD-Port mit Cookies geschützt, so dass niemand eine Verbindung herstellen kann, wenn er Ihr RabbitMQ-Server-Cookie nicht kennt. Sie würden diesen Cookie nur anderen Mitgliedern eines RabbitMQ-Clusters geben. Gleiches Prinzip wie ein API-Schlüssel. - Michael Dillon


AFAIK kann man epmd-Schnittstellen nicht wirklich konfigurieren. Sie können den epmd-Port nur einrichten: http://www.erlang.org/faq/how_do_i.html#id55132


1
2018-02-16 09:59