Ich habe RabbitMQ auf einer Debian Linux Squeeze-Maschine installiert und möchte, dass es nur die localhost-Schnittstelle hört. Ich habe hinzugefügt
RABBITMQ_NODE_IP_ADDRESS=127.0.0.1
zu meiner /etc/rabbitmq/rabbitmq.conf
Datei, und das macht es beim Abhören auf dem amqp
Port (5672) nur an die localhost-Schnittstelle binden . Es wird jedoch weiterhin an alle Schnittstellen gebunden, wenn die Ports epmd (4369) und 43380 abgehört werden:
# 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, mit denen es tun kann, was ich will?
Antworten:
Wenn Sie Folgendes
/etc/rabbitmq/rabbitmq-env.conf
eingeben, hören RabbitMQ und epmd nur localhost:Es ist etwas aufwändiger, Erlang so zu konfigurieren, dass nur localhost für den höher nummerierten Port verwendet wird (der, soweit ich das beurteilen kann, für das Clustering von Knoten verwendet wird). Wenn Sie sich nicht für Clustering interessieren und Rabbit nur vollständig lokal ausführen möchten, 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 nennenrabbit.config
. In diese Datei wird die Erlang-Option eingefügt, die zur Laufzeit geladen werden muss.Wenn Sie das Verwaltungs-Plugin verwenden und dies auch auf localhost beschränken möchten, müssen Sie die 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 also den Erlang-Clustering-Port blockieren möchten, müssen Sie epmd separat von Rabbit neu starten.)
Als nächstes muss RabbitMQ dies beim Start laden. Öffne
/etc/rabbitmq/rabbitmq.conf
erneut und setze das Folgende oben drauf:Dadurch wird diese Konfigurationsdatei beim Start des Rabbit-Servers geladen und die Optionen an Erlang übergeben.
Sie sollten jetzt alle Erlang / RabbitMQ-Prozesse nur auf localhost abhören lassen! Dies kann mit überprüft werden
netstat -ntlap
EDIT: In älteren Versionen von RabbitMQ, die Konfigurationsdatei ist:
/etc/rabbitmq/rabbitmq.conf
. Diese Datei wurde jedoch durch dierabbit-env.conf
Datei ersetzt.quelle
/etc/rabbitmq/rabbitmq.conf
Wieder aufmachen". Warum nochmal"? Meinst durabbitmq-env.conf
?ERL_EPMD_ADDRESS
steuert nur die Empfangs-IP von epmd. Wenn Sie die Empfangs-IP von RabbitMQ für den Cluster-Port (25672) ändern möchten, müssen Sie dieinet_dist_use_interface
Option verwenden.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}"
Um RabbitMQ zu veranlassen, localhost abzuhören / nur localhost zu binden:
3 verschiedene Arten (alle gleichwertig):
Fügen Sie NODE_IP_ADDRESS = 127.0.0.1 in die Umgebungsvariablendatei ein (siehe http://www.rabbitmq.com/configure.html#define-environment-variables ).
Fügen Sie die Eigenschaften tcp_listeners und ssl_listeners in die Konfigurationsdatei ein: Die Konfigurationseinträge tcp_listeners und ssl_listeners steuern die Schnittstellen, auf denen RabbitMQ lauscht. Ein Eintrag zum Abhören von localhost wäre zB {tcp_listeners, [{'127.0.0.1', 5672}]} (Syntax ist möglicherweise nicht korrekt, überprüfen Sie sie) http://www.rabbitmq.com/configure.html# Konfigurationsdatei
Exportieren Sie die Umgebung. Variable im Startskript (/etc/init.d/rabbitmq-server) export RABBITMQ_NODE_IP_ADDRESS = 127.0.0.1
Letzteres hat bei mir funktioniert.
EPMD:
Das Epmd-Programm sorgt dafür, dass verteilte Teile der Erlang-Laufzeit funktionieren. Wenn Sie einen Cluster mit mehreren Computern erstellen, müssen Sie diese für andere Knoten und auf jeden Fall für localhost zugänglich machen. Aber es hat einen eingebauten Schutz durch eine 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 Krankenakten zu tun haben, ist es möglicherweise eine gute Idee, epmd zu schützen. Der voreingestellte Port, den epmd verwendet, ist 4369. Andere Programme stellen über TCP eine Verbindung her.
Siehe auch: http://www.erlang.org/doc/man/epmd.html#environment_variables
Wenn Sie RabbitMQ weiter sichern müssen,
Deaktivieren Sie das integrierte Gastkonto http://www.rabbitmq.com/admin-guide.html#default-state
Erwägen Sie die Verwendung von SSL und die Authentifizierung mithilfe der Zertifikatkette
Ich habe diese Antworten vom IRC-Kanal der RabbitMQ-Community erhalten.
Möchte mich bei ihnen bedanken.
http://dev.rabbitmq.com/irclog/index.php?date=2011-06-14
Hoffe, das oben Genannte spart Ihnen etwas Zeit (ich habe 6 Stunden gebraucht, um eine Antwort zu finden).
quelle
Wenn Sie Umgebungsvariablen in der Datei rabbitmq.conf angeben, müssen Sie das Präfix RABBITMQ_ löschen. Versuchen Sie Folgendes:
NODE_IP_ADDRESS = 127.0.0.1
quelle
RABBITMQ_NODE_IP_ADDRESS
oderNODE_IP_ADDRESS
, aber wie erwähnt, nur für den amqp-Port.AFAIK, Sie können epmd-Schnittstellen nicht wirklich konfigurieren. Sie können nur den epmd-Port einrichten: http://www.erlang.org/faq/how_do_i.html#id55132
quelle