Spätestens seit 2013 gibt es Initiativen, die das XMPP-Netzwerk durch Transportverschlüsselung sicherer machen wollen. Mittlerweile unterstützen fast alle öffentlichen XMPP-Server zumindest optional Transportverschlüsselung via TLS oder SSL. Leider wird das Thema nur in den wenigsten Fällen wirklich ernst genommen - und das mache ich u.A. daran fest: In viel zu vielen Fällen können wir bei der Server-to-Server-Kommunikation folgendes finden:
- Verwendung von selbst signierten Zertifikaten
- Defekte / ungültige Zertifikatskonfigurationen (fehlendes Intermediate-Cert, abgelaufene Zertifikate, …)
- Tolerierung unverschlüsselter Verbindungen
Vor allem gegen den letzten Punkt muss unbedingt etwas unternommen werden. Viel zu viele Server priorisieren zwar verschlüsselte Verbindungen, verifizieren angebotene Zertifikate jedoch nicht, und wenn kein Zertifikat angeboten wird, wird via Dialback authentifiziert oder die Verschlüsselung gleich ganz deaktiviert. Besser könnten die Konditionen für MitM-Attacken kaum sein. Man signalisiert damit zwar Bereitschaft, zu verschlüsseln, aber wenn er andere nicht will, oder wenn ein Angreifer auf der Leitung sitzt, dann verschlüsselt man eben nicht. Es leuchtet ein, dass das nicht besonders viel Sinn ergibt. Wenn wir Zertifikate nicht prüfen und bereit sind, die Verschlüsselung zu deaktivieren, damit jemand mit uns spricht, können wir es auch gleich sein lassen, und unverschlüsselt kommunizieren. Der Effekt ist derselbe: Wer mithören will, kann mithören.
Mit der Zeit häufen sich auf XMPP-Servern unzählige ungenutzte XMPP-Accounts an. Es schadet nicht, diese nach einem festgelegten Zeitraum zu löschen und die Benutzernamen wieder freizugeben. Nicht zuletzt kann so eine Reinigungsaktion auch für die Datenbank-Performance hilfreich sein. Standardmäßig enthält Prosody leider keinen Mechnismus zum Löschen inaktiver Accounts, doch mit zwei Modulen und ein paar Kommandozeilen-Tricks kann man den Server von Altlasten befreien.
Um zu erkennen, welcher Account wann zuletzt genutzt wurde, muss der Zeitpunkt der letzten Aktivität (dazu zählen Registrierung, Login, Logout) für jeden Account ermittelt werden. Dazu gibt es das prosody-Modul “mod_lastlog”. Darauf kann das zweite Modul “mod_list_inactive” aufbauen: Es nutzt die von mod_lastlog bereitgestellten Aktivitäts-Timestamps und gibt auf Wunsch eine Liste der Nutzer-IDs aus, welche in dem vorgegebenen Zeitraum nicht aktiv waren.
Prosody ist ein inzwischen weit verbreiteter und moderner XMPP-Server, der durch zahlreiche Module erweitert werden kann. Geschrieben ist Prosody in der Skriptsprache Lua. Zur Installation habe ich vor 3 Jahren schon einmal eine Anleitung geschrieben. Dieser Beitrag soll die etwas veraltete Version ersetzen.
Voraussetzungen
- vServer oder Rootserver mit Ubuntu 14.04 oder höher
- Möglichkeit, valide TLS-Zertifikate auszustellen, z.B. über Let’s Encrypt
- Eigene Domain + Zugriff auf zugehörige DNS-Records
- Grundkenntnisse im Umgang mit Ubuntu Server, DNS, TLS-Zertifikaten, MySQL
Annahmen
- Verwendete XMPP-Domain: xmppserver.tld (ergibt XMPP-IDs nach dem Muster: benutzer@xmppserver.tld)
- Verwendete XMPP-Domain für Konferenzen / Chatrooms: conference.xmppserver.tld
Installation
Oftmals ist die Software aus den Ubuntu-Repositories veraltet. Aus diesem Grund wird Prosody nicht aus den offiziellen Ubuntu-Repos installiert, sondern aus dem Debian-Repo der Prosody-Entwickler. Das Repo muss zunächst hinzugefügt werden: