Den XMPP-Server Openfire installieren

Möchte man einen eigenen Messenger-Dienst installieren und nutzen, bieten sich solche auf Basis des XMPP-Standards an. Ein entsprechender Server ist Openfire an dem man dann Clients für Android, iOS, Linux, per WebApp oder Windows anbinden kann.

Zu beachten ist, das nicht alle XMPP-kompatiblen Clients jenseits von Text-Nachrichten miteinander können. Das gilt besonders wenn es um Emojis, die Übertragung von Bildern und Dateien oder weiteres wie Sprachnachrichten bis hin zu Audio- oder Videotelefonie geht.

Warum Openfire?

Der XMPP-Server Openfire ist leicht und schnell unter Linux, Mac und Windows zu installieren und wird via Browser verwaltet. Das macht es einfach den Server zu handhaben und lässt einem die Freiheit bei der Wahl des Betriebssystems. Die einzige Voraussetzung ist Java.

Openfire – Installation unter Debian 9 Stretch

Unter Linux kann man entweder das Original-Java von Oracle installieren oder auf die Alternative OpenJDK zurückgreifen. Letzteres kommt für diesen Beitrag zum Einsatz:

apt install default-jre

Ob bereits eine Java-Umgebung installiert ist und falls ja ob Original oder open source lässt sich mit

java -version

ermitteln. Openfire ansich befindet sich nicht in einer Paketquelle und muss von daher zunächst heruntergeladen werden:

wget https://github.com/igniterealtime/Openfire/releases/download/v4.2.4/openfire_4.2.4_all.deb

Die aktuelle Version und der dazugehörige Download-Link findet sich direkt im Download-Bereich der Macher oder auf GitHub:

ignite realtime – Downloads

GitHub – igniterealtime/Openfire – Releases

Sobald das aktuelle Installationspaket heruntergeladen wurde kann man dieses mit

dpkg -i openfire_4.2.4_all.deb

ausführen. Die Installation erfolgt rasch, so das man kurze Zeit später direkt im Browser fortfahren kann.

Erst-Konfiguration

Nach der Installation geht es direkt im Browser unter

http://<IP-oder-Hostname>:9090
oder
https://<IP-oder-Hostname>:9091

weiter. Man durchläuft zunächst einen Ersteinrichtungsassistenten, im Anschluss kann man direkt unter “Benutzer/Gruppen” mit dem Anlegen von Benutzern beginnen.

DNS-Einstellungen

Idealerweise setzt man folgende Einstellungen im DNS:

XMPP – Wiki – https://wiki.xmpp.org/web/SRV_Records

Beim Test klappte es aber auch ohne nur unter Angabe der (öffentlichen) IP-Adresse oder des FQDN.

SSL/TLS-Zertifikat

Bei der Installation richtet Openfire ein selbstsigniertes Zertifikat ein. Bei der Nutzung von so mancher App wird zunächst nachfragt ob dem Zertifikat vertraut werden soll. Bei aufmerksamen Nutzern hält sich das Risiko für Man-in-the-middle-Attacken in Grenzen. Nichts destotrotz kann man (natürlich) auch auf Let’s Encrypt setzen. Getestet habe ich es nich, aber umsetzen bzw. ein vorhandenes Zertifikat liese sich wohl wie hier beschrieben importieren:

Using letsencrypt certs on Openfire

Firewall

Mit einem einzelnen (verschlüsselten) Port ist es leider nicht getan. Die Transportweg ist SSL/TLS-verschlüsselt, zusätzlich kann man, in Abhängigkeit des XMPP-Clients noch auf die Nachrichtenverschlüsselung mittels OMEMO oder OTR setzen.

Man sollte nicht die Adminkonsole in der Firewall zum Internet hin freigeben! Ebenso wenig sollten unverschlüsselte Ports freigegeben werden. Soweit möglich sollte zudem auf old-style- oder legacy-Verbindungen verzichtet werden.

Im Idealfall werden nur folgende Ports geöffnet:

  • 5222/tcp XMPP (mit STARTTLS)
  • 7443/tcp http-bind (over https)
  • 7777/tcp File Transfer Proxy (Relevant für die Dateiübertragung, wenn die Benutzer sich nicht im gleichen Netzwerk befinden)

Sicherheit

Im Bereich Sicherheit wurde in Sachen SSL/TLS-Zertifikat als auch Firewall bereits ein wenig erwähnt. In Openfire ansich gibt es noch weitere Einstellungen die man setzen bzw. ändern kann.

Selbstregistrierung für Benutzer deaktivieren:

Server - Servereinstellungen - Registrierung & Anmeldungen (Registrierungseinstellungen) - Interne Kontenregistrierung auf "Deaktiviert" setzen

An gleicher kann und sollte man, wenn man schonmal da ist, die Anmeldemethoden ändern, allerdings streikt dann so mancher Client wie z.B. Pidgin wenn sowohl MD5 als auch Plain deaktiviert ist.

Einstellungen für unsichere Verbindungen sollte man dahingehend ändern, das diese auf verschlüsselte Verbindungen umgeleitet werden:

Server - Servereinstellungen - Client Connections

Jeweils unter “Advanced configuration…” kann geregelt werden, das Verbindung keine, optional (wenn verfügbar, entspricht der Voreinstellung) oder immer STARTTLS verwenden. An gleicher Stelle kann man alte TLS-Versionen und Cipher Suites deaktivieren.

Weiteres / Sonstiges

Per Voreinstellung werden Offline-Nachrichten gespeichert, bis zur maximalen Größe des Speicherplatzes. Die Einstellung ist allerdings auf 100 KB pro Benutzer festgelegt. Bekommt man also ein Bild geschickt, während man Offline ist, klappt das schlicht nicht. Der Absender bekommt unschönerweise lediglich “Übermittlung” fehlgeschlagen angezeigt. Ändern kann man das unter

Server - Servereinstellungen - Offlinenachrichten

Allerdings gelang es mir bislang nicht, diesen Wert zu ändern.

Quellen:

openfire – Installation Guide

Linuxize – How to install Java on Debian 9

TecAdmin.net – How to Install Java on Debian 9 (Stretch)

DigitalOcean – How To Install Openfire XMPP Server on a Debian or Ubuntu VPS

5 Kommentare

  1. mario

    Hallo,
    ein interessanter Beitrag, funktioniert soweit alles bestens, außer das Zertifikat, aber nagut. Meine Instanz ist ohnehin mehr privater Natur.
    Eine Frage hab ich allerdings, der Link zu den SRV Records funktioniert nicht mehr (bei mir zumindest). Gibt es da etwas besonderes zu beachten für Openfire, oder reichet da eine allgemeine Anleitung, die man irgendwo findet? Also funktioniert das dann ebenfalls mit Openfire? Vielen dank im vorraus.

    Mit freundlichen Grüßen

  2. Andy

    Hallo Mario,

    ich vermute das ist “nur” eine Störung, da mehrere XMPP/Jabber-Seite aktuell nicht funktionieren.

  3. Peter

    Ich bekomme beim Aufruf der URL ein “Keine Verbindung möglich”. Auch nicht lokal (lynx localhost:9090). Muss man OpenFire erst noch irgendwie starten? Apache neu starten oder so?

  4. Peter

    Ideen?

    root@raspi8:/etc/init.d# ./openfire status
    best java alternative in: /usr/lib/jvm/java-7-openjdk-armhf/jre
    openfire is not running

    root@raspi8:/etc/init.d# ./openfire start
    best java alternative in: /usr/lib/jvm/java-7-openjdk-armhf/jre
    Starting openfire: openfire.

    root@raspi8:/etc/init.d# ./openfire status
    best java alternative in: /usr/lib/jvm/java-7-openjdk-armhf/jre
    openfire is not running
    root@raspi8:/etc/init.d#

    Auch kein Port 9090 ist offen.

    root@raspi8:/etc/init.d# netstat -nl
    Aktive Internetverbindungen (Nur Server)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 127.0.0.1:4711 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN
    tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
    tcp6 0 0 ::1:4711 :::* LISTEN
    tcp6 0 0 :::80 :::* LISTEN
    tcp6 0 0 :::53 :::* LISTEN
    tcp6 0 0 :::22 :::* LISTEN
    udp 0 0 0.0.0.0:5353 0.0.0.0:*
    udp 0 0 0.0.0.0:49157 0.0.0.0:*
    udp 0 0 0.0.0.0:53 0.0.0.0:*
    udp 0 0 0.0.0.0:68 0.0.0.0:*
    udp 0 0 192.168.2.10:123 0.0.0.0:*
    udp 0 0 127.0.0.1:123 0.0.0.0:*
    udp 0 0 0.0.0.0:123 0.0.0.0:*
    udp6 0 0 :::38080 :::*
    udp6 0 0 :::5353 :::*
    udp6 0 0 :::53 :::*
    udp6 0 0 ::1:123 :::*
    udp6 0 0 :::123 :::*
    raw6 0 0 :::58 :::*

  5. Uwe Böhm

    Das Einrichten von OpenFire hat wunderbar funktioniert. Die URL “https://your-server.com:7443/ofmeet” funktioniert auch. Dann habe ich auf meinem iPhone versucht per JITSI-Meet auf den OF-Server zuzugreifen, weiß aber nicht was ich bei JITSI als sog. Server-URL eintragen soll … habe alles mögliche an Kombinationen probiert, aber keinen Erfolg gehabt 🙁 HG Uwe Böhm

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

© 2024 Andy's Blog

Theme von Anders NorénHoch ↑