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