ejabberd Server unter Debian installieren

Abseits von Whatsapp und anderer proprietärer Instant‑Messaging‑Dienste existiert eine verbreitete, freie Alternative: XMPP, auch Jabber gennant. In diesem Tutorial beschreibe ich die Installation und grundlegende Konfiguration eines ejabberd‑Servers unter Debian.

XMPP ist ein offenes Kommunikations‑Protokoll. Dessen Kommunikationsnetzwerk setzt sich dabei aus föderal verwalteten Knoten zusammen, die aus einem oder mehr Servern bestehen. Jeder kann einen Knoten einrichten und sich dem Netzwerk anschließen. Dazu existieren verschiedene Server‑Implementierungen. Eine der populärsten ist ejabberd.

Verwendete Software

  • Debian 9.3 (stretch)
  • ejabberd Community Server 18.01

Voraussetzungen

Folgende Vorbereitungen müssen für den Betrieb eines XMPP‑Servers getroffen werden.

DNS‑Einträge

Zunächst einmal ist der Zugriff auf eine DNS Domäne nötig, unter jener der Dienst betrieben werden soll. In diesem Tutorial verwende ich example.com. Diese ist selbstverständlich individuell zu ersetzen.

Clients und Server ermitteln die IP‑Adresse eines XMPP‑Servers per Autodiscover. Dazu werden entweder Standardwerte verwendet, oder die Dienste über DNS aufgelöst.

Autodiscover

Per Konvention wird der Serverdienst unter dem Domainnamen des Nutzers gesucht. Dabei sind für Client- und Serververbindungen jeweils unterschiedliche Ports definiert.

Beispiel: JabberID (JID) user@example.com

Client zu Server [c2s]: example.com:5222
Server zu Server [s2s]: example.com:5269

Soll der Serverdienst jedoch auf einem bestimmten Host bzw. einem anderen Port ausgeführt werden, so muss dies mittels SRV‑Records im DNS veröffentlicht werden.

Beispiel: xmpp.example.com

_xmpp-client._tcp.example.com. 18000 IN SRV 0 5 5222 xmpp.example.com.
_xmpp-server._tcp.example.com. 18000 IN SRV 0 5 5269 xmpp.example.com.

Nur mit einem funktionierenden Autodiscover können andere XMPP‑Server Nachrichten an unseren Server leiten. Auch Clients lassen sich ohne Konfigurationsaufwand einfach verbinden.

Weitere DNS Einträge

ejabberd beherrscht verschiedene Erweiterungen, z.B. Multi User Chats (MUC) oder sog. Publish‑Subscribe Funktionalität (PubSub). Letzteres wird unter anderem für Push‑Benachrichtigungen benötigt. Standardmäßig werden diese Dienste in folgenden Subdomänen auf Port 5269 angesprochen.

MUC: conference.example.com:5269
PubSub: pubsub.example.com:5269

Für diese Namen sollte deshalb ebenfalls ein DNS‑Eintrag (A oder CNAME) existieren.

Sind die Dienste auf anderen Hosts bzw. Ports erreichbar, so müssen wiederum entsprechende SRV‑Records gesetzt werden. Dieses Mal jeweils nur für den Server.

_xmpp-server._tcp.conference.example.com. 18000 IN SRV 0 5 5269 xmpp.example.com.
_xmpp-server._tcp.pubsub.example.com.     18000 IN SRV 0 5 5269 xmpp.example.com.

Zertifikate

Für eine sichere Kommunikation ist ein gültiges SSL Zertifikat für alle verwendeten Domänennamen notwendig.

  • example.com
  • xmpp.example.com
  • conference.example.com
  • pubsub.example.com

Wie diese auch mit Let’s Encrypt erstellt werden können, beschreibe ich in einem extra Thema.

ejabbered installieren

Die Entwickler bieten ejabberd über die Paketquellen vieler Linux‑Distributionen an. Ein DEB‑Paket kann aber auch direkt von der Homepage bezogen werden. Ich habe mich für letztere Variante entschieden.

# Get the deb package
wget --content-disposition https://www.process-one.net/downloads/downloads-action.php?file=/ejabberd/18.01/ejabberd_18.01-0_amd64.deb

# Install the deb package
dpkg -i ejabberd_18.01-0_amd64.deb

# [Optional] Enable ejabberd as service
systemctl enable ejabberd.service

Damit ist der Server schon installiert. Die Serverprogramme befinden sich in /opt/ejabberd-18.01/bin, die Konfiguration hingegen in /opt/ejabberd/conf.

ejabbered konfigurieren

Out of the box verfügt ejabbered bereits über eine solide Grundkonfiguration. Die Konfigurationsdatei ejabberd.yml ist darüber hinaus sehr gut beschrieben, weshalb ich mich an dieser Stelle kurz halten und lediglich die wichtigsten Punkte aufzeigen werde.

hosts:
  - "example.org"
certfiles:
  # combined cert, chain and private key
  - /opt/ejabberd/conf/server.pem
listen:
  -
    port: 5222
    ip: "::"
    module: ejabberd_c2s
    # force secure client connections
    starttls_required: true
    ...

# only store hashed passwords
auth_method: internal
auth_password_format: scram

# the server fqdn
fqdn: "xmpp.example.com"

# specify admin user
acl:
  admin:
    user:
      - "admin@example.com"

Neue Registrierungen sind zunächst nur vom Server selbst aus (und per Web Admin) erlaubt. Siehe dazu die mod_register Konfiguration.

Web Admin Verwaltung

Die Verwaltungsoberfläche kann im Browser über http://xmpp.example.com:5280/admin aufgerufen werden.

Allerdings ist die Verbindung unverschlüsselt. Die offizielle Doku beschreibt wie die Verbindung abgesichert werden kann.

listen:
  ...
  - 
    port: 5280
    ip: "::"
    module: ejabberd_http
    # web_admin: true
    ...
  - 
    port: 5282
    ip: "::"
    module: ejabberd_http
    tls: true
    web_admin: true

Einen Benutzer erstellen

Der Server kann mit bin/ejabberdctl auf der Konsole verwaltet werden. Hiermit wird auch der erste Benutzer angelegt.

./ejabberdctl register admin example.com P4SSw0rd1

Weitere Module

Für gewisse Funktionen müssen erst noch Module aktiviert und konfiguriert werden. Dazu gehört unter anderem der Dateitransfer. Vorerst bleibt diese Funktion in meinem Setup deaktiviert. Sollte ich mich diesem Thema später noch einmal widmen, werde ich dies ergänzen.

ejabbered starten und testen

Nun wird es Zeit den XMPP‑Server das erste Mal zu starten.

# normal start
./ejabberdctl start

# start with log output on console
./ejabberdctl live

# start service
service ejabberd start

Wenn der Server gestartet ist, kann die Funktion getestet werden. Auf xmpp.net besteht zusätzlich die Möglichkeit die SSL‑Konfiguration zu überprüfen.

Es gibt eine Vielzahl an Clients, einer der bekanntesten ist Pidgin. Unter iOS verwende ich ChatSecure.

Ausblick

XMPP/Jabber besitzt eine große, aktive Community. Auch einige große Internetfirmen bieten ihre Dienste über XMPP an. Doch leider haben bisher einige die Unterstützung wieder zurückgezogen und durch eigene proprietäre Technologien ersetzt. Dazu zählen unter anderem Google oder Facebook. Auch die Konkurrenz, etwa Whatsapp, macht es dem offenen XMPP‑Standard schwer. Dennoch erfreut sich das Protokoll weiterhin großer Beliebtheit und wird noch lange erhalten bleiben.


Weitere Quellen: