RabbitMQ nativ auf Ubuntu installieren und absichern – APT-Repo, VHosts und Management-Plugin
RabbitMQ 4.x direkt auf Ubuntu oder Debian installieren: mit dem offiziellen Team-RabbitMQ-APT-Repository, korrektem Erlang-Setup, systemd-Dienst, Benutzerverwaltung, VHosts und dem Management-Plugin – ohne Docker-Abhängigkeiten.

RabbitMQ ist der meistgenutzte Open-Source-Message-Broker für AMQP-basierte Architekturen und kommt überall dort zum Einsatz, wo Dienste asynchron kommunizieren müssen – ob Microservices, Hintergrundverarbeitung oder Event-driven-Workflows. Diese Anleitung zeigt, wie du RabbitMQ 4.x direkt auf Ubuntu (20.04, 22.04 oder 24.04) beziehungsweise Debian (11–13) als nativen systemd-Dienst betreibst: mit dem offiziellen Team-RabbitMQ-APT-Repository, dem passenden Erlang aus derselben Quelle, einer gehärteten Basiskonfiguration sowie VHosts, Benutzerverwaltung und dem Management-Plugin. Docker ist hier bewusst außen vor – dieser Weg eignet sich für alle, die einen dedizierten Broker-Server ohne Container-Overhead betreiben möchten.
Voraussetzungen
- Ubuntu 20.04 (Focal), 22.04 (Jammy) oder 24.04 (Noble) LTS – alternativ Debian 11 (Bullseye), 12 (Bookworm) oder 13 (Trixie)
- Root- bzw.
sudo-Zugriff auf den Server - Internetverbindung zu
keys.openpgp.orgunddeb1.rabbitmq.com - Mindestens 512 MB RAM (1–2 GB empfohlen für Produktionsbetrieb)
- Mindestens 2 GB freier Speicherplatz (für Logs, Queue-Persistenz und Erlang-Pakete)
- Grundkenntnisse in der Linux-Kommandozeile und systemd
Erlang- und RabbitMQ-Versionen im Überblick
Die korrekte Erlang-Version ist die häufigste Fehlerquelle bei RabbitMQ-Installationen. Ubuntu-Standardrepos liefern oft eine veraltete Erlang-Version, die mit RabbitMQ 4.x schlicht inkompatibel ist. Das Team-RabbitMQ-Repo stellt immer die passenden Builds bereit.
| RabbitMQ-Version | Min. Erlang | Empfohlen | Hinweis |
|---|---|---|---|
| 4.3.x (aktuell, Juni 2026) | 26.2 | 26.x / 27.x | Erlang 28 nur für Neucluster; Erlang 29 nicht unterstützt |
| 4.0.x | 26.2 | 26.x / 27.x | – |
| 3.13.x | 26.0 | 26.2.x | EOL nähert sich |
| 3.12.x | 25.0 | 26.2.x | Veraltet, kein aktiver Support |
Schritt 1: Abhängigkeiten und GPG-Schlüssel einrichten
Zunächst installierst du die notwendigen Hilfspakete und importierst den GPG-Schlüssel des Team-RabbitMQ-Repositories. Ohne diesen Schlüssel würde APT die Paketsignaturen nicht verifizieren können.
sudo apt-get update -y
sudo apt-get install curl gnupg apt-transport-https -yJetzt den GPG-Schlüssel von keys.openpgp.org herunterladen und als Keyring-Datei ablegen:
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" \
| sudo gpg --dearmor \
| sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/nullVerifizieren: Der Befehl ls -lh /usr/share/keyrings/com.rabbitmq.team.gpg sollte eine Datei mit einigen Kilobyte ausgeben. Kein Fehler und kein leeres Ergebnis bedeutet Erfolg.
Schritt 2: APT-Repository einrichten
Das Repository muss für deine Ubuntu-Version eingetragen werden. Das folgende Beispiel gilt für Ubuntu 24.04 Noble – für ältere Versionen ersetzt du noble durch jammy (22.04) oder focal (20.04). Für Debian nimmst du stattdessen bookworm, bullseye oder trixie und den entsprechenden Debian-Pfad.
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Team RabbitMQ: Erlang-Pakete
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] \
https://deb1.rabbitmq.com/rabbitmq-erlang/ubuntu/noble noble main
## Team RabbitMQ: RabbitMQ Server
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] \
https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/noble noble main
EOFFür Ubuntu 22.04 ersetzt du noble durch jammy, für 20.04 durch focal.
Wichtig: Die alten Repository-URLs ppa1.rabbitmq.com und ppa2.rabbitmq.com wurden am 1. November 2025 abgeschaltet. Jede Installationsanleitung, die noch diese URLs enthält, ist veraltet und wird fehlschlagen. Ausschließlich deb1.rabbitmq.com und deb2.rabbitmq.com verwenden.
Schritt 3: Erlang und RabbitMQ installieren
Erlang wird immer zuerst installiert. Dabei sind alle benötigten Module einzeln anzugeben – ein reines erlang-Metapaket aus den Standard-Repos würde unter Umständen eine inkompatible Version ziehen.
sudo apt-get update -y
# Erlang mit allen von RabbitMQ benötigten Modulen
sudo apt-get install -y erlang-base erlang-asn1 erlang-crypto \
erlang-eldap erlang-ftp erlang-inets erlang-mnesia erlang-os-mon \
erlang-parsetools erlang-public-key erlang-runtime-tools erlang-snmp \
erlang-ssl erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
# RabbitMQ Server selbst
sudo apt-get install rabbitmq-server -y --fix-missingVerifizieren: Mit erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().' -noshell prüfst du, ob Erlang 26 oder 27 installiert ist. Die Ausgabe sollte 26 oder 27 lauten.
Schritt 4: systemd-Dienst aktivieren und starten
Nach der Installation läuft RabbitMQ noch nicht automatisch. Du aktivierst den Dienst für den Autostart und startest ihn dann manuell für die erste Einrichtung:
sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server
sudo systemctl status rabbitmq-serverVerifizieren: Der Status-Befehl sollte Active: active (running) in grün ausgeben. Falls der Dienst nicht startet, liefert sudo journalctl -u rabbitmq-server -n 50 die relevanten Log-Einträge.
Schritt 5: Management-Plugin aktivieren
Das Management-Plugin stellt eine Web-UI unter Port 15672 sowie eine HTTP-API bereit. Es wird im laufenden Betrieb aktiviert – ein Neustart des Brokers ist nicht notwendig:
sudo rabbitmq-plugins enable rabbitmq_managementVerifizieren: Der Befehl sudo rabbitmq-plugins list zeigt alle Plugins. rabbitmq_management sollte mit einem [E*] (Enabled, running) markiert sein.
Schritt 6: Admin-Benutzer anlegen und Guest-User entfernen
Der Standard-User guest mit dem Passwort guest ist in RabbitMQ auf localhost-Zugriff beschränkt – in der Praxis aber ein bekanntes Default-Credential, das in Produktionsumgebungen zwingend entfernt werden muss. Du ersetzt es durch einen eigenen Admin-User:
# Admin-User anlegen (Passwort anpassen!)
sudo rabbitmqctl add_user 'admin' 'SICHERES_PASSWORT'
# Administrator-Tag setzen
sudo rabbitmqctl set_user_tags admin administrator
# Vollzugriff auf den Standard-VHost "/" vergeben
sudo rabbitmqctl set_permissions -p "/" "admin" ".*" ".*" ".*"
# Standard-Guest-User entfernen
sudo rabbitmqctl delete_user guestDie drei Rechteparameter von set_permissions sind jeweils reguläre Ausdrücke für: configure (Ressourcen anlegen/löschen), write (Nachrichten senden) und read (Nachrichten empfangen). .* bedeutet Vollzugriff auf alle Ressourcen im jeweiligen VHost.
Verifizieren: sudo rabbitmqctl list_users zeigt jetzt nur noch den neuen admin-User mit dem Tag administrator. Der guest-Eintrag darf nicht mehr erscheinen.
Schritt 7: VHosts und Applikationsbenutzer einrichten
VHosts sind die logischen Mandanten in RabbitMQ – jeder VHost hat seine eigenen Exchanges, Queues, Bindings und Berechtigungen. Der Standard-VHost / kann nicht gelöscht werden; für Produktionsanwendungen legst du besser einen eigenen VHost pro Anwendung an:
# Anwendungs-VHost anlegen
sudo rabbitmqctl add_vhost myapp
# Applikationsbenutzer anlegen
sudo rabbitmqctl add_user 'myapp_user' 'APP_PASSWORT'
# Berechtigungen NUR für den eigenen VHost setzen
sudo rabbitmqctl set_permissions -p "myapp" "myapp_user" ".*" ".*" ".*"
# Übersicht prüfen
sudo rabbitmqctl list_users
sudo rabbitmqctl list_vhosts
sudo rabbitmqctl list_permissions -p myappWichtig: Ein neu angelegter VHost hat zunächst keinerlei Benutzerberechtigungen. Verbindungsversuche scheitern mit der Fehlermeldung „access to vhost refused", bis explizit Berechtigungen gesetzt werden.
Verifizieren: sudo rabbitmqctl list_permissions -p myapp sollte eine Zeile mit myapp_user und den drei .*-Mustern ausgeben.
Schritt 8: Grundkonfiguration für den Produktionsbetrieb
Die Konfigurationsdatei liegt unter /etc/rabbitmq/rabbitmq.conf und verwendet das sysctl/ini-Format – nicht das ältere Erlang-Format, das in advanced.config gehört. Eine sichere Basiskonfiguration sieht so aus:
# /etc/rabbitmq/rabbitmq.conf
# AMQP auf alle Interfaces oder nur intern binden
listeners.tcp.default = 5672
# Management-UI nur auf localhost (niemals direkt ins Internet!)
management.tcp.ip = 127.0.0.1
management.tcp.port = 15672
# Memory-Alarm bei 70 % RAM (Standard: 60 %)
vm_memory_high_watermark.relative = 0.7
# Disk-Free-Limit: mindestens 2 GB (Standard 50 MB ist zu wenig)
disk_free_limit.absolute = 2GB
# Log-Level
log.file.level = info
# Heartbeat-Intervall in Sekunden
heartbeat = 60Nach Änderungen an rabbitmq.conf ist ein Neustart des Dienstes notwendig:
sudo systemctl restart rabbitmq-serverVerifizieren: sudo rabbitmq-diagnostics environment zeigt die aktiven Konfigurationswerte. Prüfe, ob management.tcp.ip auf 127.0.0.1 gesetzt ist.
Schritt 9: Firewall-Regeln mit ufw
Port 5672 (AMQP) sollte nur für vertrauenswürdige interne Netze erreichbar sein. Das Management-UI auf Port 15672 gehört nie direkt ins Internet – der Zugriff erfolgt per SSH-Tunnel oder bleibt auf localhost beschränkt. Die inter-node-Ports 4369 (EPMD) und 25672 dürfen intern erreichbar sein, müssen aber nach außen gesperrt bleiben.
# AMQP nur für internes Netz freigeben (Beispiel: 10.0.0.0/8)
sudo ufw allow from 10.0.0.0/8 to any port 5672
# Management-UI: NICHT von außen öffnen – nur per SSH-Tunnel erreichbar
# Beispiel SSH-Tunnel vom lokalen Rechner:
# ssh -L 15672:localhost:15672 user@server
# Standardmäßig alle anderen eingehenden Verbindungen ablehnen
sudo ufw enable
sudo ufw status verbose| Port | Protokoll / Zweck | TLS-Pendant | Extern erreichbar? |
|---|---|---|---|
| 5672 | AMQP 0-9-1 / 1.0 (Clients) | 5671 | Je nach Anwendungsfall |
| 15672 | HTTP Management UI + API | 15671 | Nein – nur intern / SSH-Tunnel |
| 25672 | Inter-Node + CLI-Tools | – | Nein – nur intern |
| 4369 | EPMD Peer Discovery | – | Nein – nur intern |
| 1883 | MQTT Clients (Plugin) | 8883 | Optional |
| 15692 | Prometheus Metrics (Plugin) | 15691 | Nur intern |
Schritt 10: Dienststatus und Diagnose
RabbitMQ bringt eigene Diagnosewerkzeuge mit, die über die bloße systemd-Statusanzeige hinausgehen:
# Umfassender Broker-Status
sudo rabbitmq-diagnostics status
# Aktive Konfigurationswerte ausgeben
sudo rabbitmq-diagnostics environment
# Live-Logs beobachten
sudo journalctl -u rabbitmq-server -f
# VHosts, Benutzer und Verbindungen auflisten
sudo rabbitmqctl list_vhosts
sudo rabbitmqctl list_users
sudo rabbitmqctl list_connectionsVerifizieren: sudo rabbitmq-diagnostics status gibt einen mehrzeiligen Statusbericht aus. Ganz oben sollte stehen: Status of node rabbit@<hostname> ... ohne Fehlermeldungen.
Troubleshooting / Typische Fehler
Erlang-Version inkompatibel
Wenn rabbitmq-server beim Start sofort abbricht, ist oft eine falsche Erlang-Version installiert. Prüfe mit rabbitmq-diagnostics runtime_info oder erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().' -noshell die installierte OTP-Version. Für RabbitMQ 4.x wird Erlang 26.2 bis 27.x benötigt. Stelle sicher, dass du Erlang aus dem Team-RabbitMQ-Repo installiert hast und nicht aus den Ubuntu-Standardquellen.
„access to vhost refused" beim Verbindungsaufbau
Dieser Fehler bedeutet fast immer, dass für den betreffenden Benutzer keine Berechtigungen im Ziel-VHost gesetzt wurden. Prüfe mit sudo rabbitmqctl list_permissions -p <vhostname> und setze die Rechte mit set_permissions nach.
Repository-Fehler bei apt-get update
Falls APT einen Fehler wie „404 Not Found" für rabbitmq.com-Repos meldet, verwendest du wahrscheinlich noch die alten ppa1/ppa2-URLs. Prüfe /etc/apt/sources.list.d/rabbitmq.list und ersetze alle Einträge durch die neuen deb1.rabbitmq.com-URLs wie in Schritt 2 gezeigt.
Dienst startet nach Konfigurationsänderung nicht
Ein häufiger Fehler ist falsches Dateiformat in rabbitmq.conf. Diese Datei erwartet das sysctl/ini-Format (key = value), kein Erlang-Term-Format. Erlang-spezifische Einstellungen gehören in /etc/rabbitmq/advanced.config. Prüfe Syntaxfehler mit sudo journalctl -u rabbitmq-server -n 100.
Memory-Alarm: Publishing wird gebremst
Wenn Clients keine Nachrichten mehr publishen können, hat RabbitMQ den Speicher-Alarm ausgelöst. Der Standardschwellenwert liegt bei 60 % des verfügbaren RAM. Prüfe mit sudo rabbitmq-diagnostics status den Abschnitt „alarms". Entweder mehr RAM bereitstellen oder den Schwellenwert in rabbitmq.conf anpassen (vm_memory_high_watermark.relative).
Sonderzeichen in Passwörtern
Zeichen wie !, & oder $ in Passwörtern müssen in Shell-Befehlen korrekt gequotet werden. In rabbitmqctl-Befehlen sind einzelne Anführungszeichen ('passwort') am sichersten, da sie keine Shell-Interpolation auslösen.
Häufige Fragen
Muss ich nach dem Aktivieren des Management-Plugins neu starten?
Nein. Das Management-Plugin wird im laufenden Betrieb aktiviert. rabbitmq-plugins enable rabbitmq_management ist sofort wirksam, ohne dass der Broker neu gestartet werden muss.
Kann ich den Standard-VHost „/" für Produktionsanwendungen nutzen?
Technisch ist das möglich, aber nicht empfohlen. Saubere Trennung bedeutet: ein eigener VHost pro Anwendung, mit jeweils eigenem Benutzer und eingeschränkten Berechtigungen. So verhinderst du, dass eine Anwendung versehentlich Queues einer anderen liest oder Nachrichten in falsche Exchanges schreibt.
Was ist der Unterschied zwischen rabbitmqctl und rabbitmq-diagnostics?
rabbitmqctl ist das allgemeine Verwaltungswerkzeug für Benutzer, VHosts, Policies und Cluster-Operationen. rabbitmq-diagnostics ist auf Fehlerdiagnose ausgerichtet und liefert Statusinformationen, Health-Checks und Umgebungsdetails, ohne Konfigurationsänderungen vorzunehmen.
Wie aktualisiere ich RabbitMQ auf eine neue Version?
Mit dem offiziellen APT-Repo geht das einfach per sudo apt-get update && sudo apt-get upgrade rabbitmq-server. Bei Major-Version-Sprüngen (z. B. 3.x auf 4.x) prüfst du vorher die Erlang-Kompatibilitätsmatrix und aktualisierst ggf. zuerst Erlang. Für Cluster-Upgrades gilt: gleiche Erlang-Hauptversion auf allen Knoten ist Pflicht.
Wie sichere ich das Management-UI per HTTPS ab?
In rabbitmq.conf setzt du management.ssl.port = 15671 und gibst die Zertifikatspfade an (management.ssl.cacertfile, management.ssl.certfile, management.ssl.keyfile). Den HTTP-Port kannst du anschließend deaktivieren. Eine einfachere Alternative für den internen Betrieb ist der SSH-Tunnel.
Wie prüfe ich die installierte Erlang-Version?
Mit erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().' -noshell oder sudo rabbitmq-diagnostics runtime_info. Letzteres zeigt die Version direkt im RabbitMQ-Kontext.
Fazit
Eine native RabbitMQ-Installation auf Ubuntu ist mit dem offiziellen Team-RabbitMQ-APT-Repository in rund 25 Minuten erledigt. Der entscheidende Unterschied zur verbreiteten Docker-Variante: Du hast direkten systemd-Zugriff, kein Container-Overhead und eine klare Trennung von Konfiguration und Laufzeitumgebung. Die wichtigsten Absicherungsschritte – Guest-User löschen, Admin anlegen, VHosts pro Anwendung, Management-UI nur intern erreichbar, sinnvolle Speicher-Limits – kosten wenige Minuten, verhindern aber die häufigsten Sicherheitsvorfälle in Produktionsumgebungen. Für Langzeit-Monitoring empfiehlt das RabbitMQ-Team selbst den Einsatz von Prometheus und Grafana zusätzlich zum eingebauten Management-Plugin.
Weiterführende Anleitungen und Quellen
- PostgreSQL nativ installieren und absichern (Ubuntu/Debian, ohne Docker)
- MongoDB nativ installieren und absichern (Ubuntu/Debian, ohne Docker)
- MariaDB / MySQL installieren und absichern
- VPS absichern und härten: Anleitung mit UFW, SSH-Keys und Fail2Ban
- systemd-Service selbst erstellen und verwalten
- RabbitMQ: Installing on Debian and Ubuntu (offizielle Dokumentation)
- RabbitMQ: Access Control – Benutzer und Berechtigungen
- RabbitMQ: Management Plugin
- RabbitMQ: Virtual Hosts
- RabbitMQ: Networking und Ports
- RabbitMQ: Erlang-Versionsanforderungen