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:
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:
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
Verheiratet, Vater von zwei Kindern, eines an der Hand, eines im Herzen. Schon immer Technik-Freund, seit 2001 in der IT tätig und seit über 10 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen.
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
Hallo Mario,
ich vermute das ist “nur” eine Störung, da mehrere XMPP/Jabber-Seite aktuell nicht funktionieren.
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?
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 :::*
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