XMPP-Server

Entscheidend für das Projekt ist die Installation und Konfiguration eines XMPP-Servers. Unsere Wahl fiel dabei auf Prosody IM (https://prosody.im). Prosody kann mithilfe der Konfigrationsdatei „prosody.cfg.lua“ recht simpel konfiguriert werden. In der Konfigurationsdatei gibt es einen server-weiten Teil und einen Teil, welcher die virtuellen Hosts konfiguriert. Außerdem gibt es einen Teil, indem die Verwendung der Module (Erweiterungen (oft in Form für Prosody umgesetzter XEPs)) geregelt wird. Auch einen Teil für die server-weite und spezifisch für virtuelle Hosts genutzte TLS-Konfiguration findet sich in der Konfigurationsdatei.

Mit dem Befehl „prosodyctl“ kann Prosody mithilfe der Kommandozeile verschiedene Aktionen durchführen. Wie z. B. die Erstellung neuer Benutzer, bzw. auch das Entfernen angelegter Benutzer oder die Änderung deren Kennwörter. Der Befehl „prosodyctl“ dient im weitesten Sinne der Administration des Servers im laufenden Betrieb.

Tor-Integration und Test mit Conversations (XMPP-Client für Android)

Zur Installation von Tor gibt es bezüglich der Verwendung von Raspbian auf dem Raspberry Pi einige Herausforderungen. (https://tor.stackexchange.com/questions/242/how-to-run-tor-on-raspbian-on-the-raspberry-pi) Ein Kompilieren auf dem Raspberry Pi würde zwar zu einer funktionierenden Installation führen, allerdings zu viel Zeit in Anspruch nehmen und auf lange Sicht wieder zu veralteten Paketen führen, was nicht im Sinne des Projekts (Sicherheit) ist. Ab Raspberry Pi 2 ist ein Hinzufügen der Quellen für die Architektur (armhf) möglich.

Ist Tor installiert, können Einträge in der Datei /etc/tor/torrc vorgenommen werden. Dazu werden in der Sektion der „location-hidden services“ folgende Informationen hinterlegt:


#XMPP_SDIM
HiddenServiceDir /var/lib/tor/xmpp_SDIM/
#xmpp_c2s
HiddenServicePort 5222 127.0.0.1:5222
#Für die Client-to-Server-Kommunikation
#xmpp_s2s
HiddenServicePort 5269 127.0.0.1:5269
#Für die Server-to-Server-Kommunikation, insbesondere der Austausch
#zwischen SDIM-Instanzen

Der erzeugte Hostname des Hidden-Service findet sich in der Datei: /var/lib/tor/xmpp_SDIM/hostname

Der Hostname hat folgendes Schema: q3opwghbl9xswmz2.onion

Der Hostname kann verwendet werden, um den VirtualHost-Eintrag von Prosody anzupassen, eine JID (Jabber-ID) für die Domain zu erstellen und/oder ein neues selbstsigniertes Zertifikat zu erstellen.

Die Zeile mit dem Inhalt „VirtualHost „example.com““ in /etc/prosody/prosody.cfg.lua wird dazu folgendermaßen ersetzt:

VirtualHost "q3opwghbl9xswmz2.onion"

Ein neuer Benutzer kann folgendermaßen hinzugefügt werden:
prosodyctl adduser me@q3opwghbl9xswmz2.onion

Für die Verwendung mit Conversations (https://conversations.im), einem XMPP-Client für Android, ist die Einstellung „Über Orbot verbinden“ in den Experteneinstellungen von Conversations erforderlich, um den Server zu erreichen. Natürlich muss dazu auch Orbot (Tor für Android) installiert und aktiviert sein.

Conversations benötigt dazu einige aktivierte XMPP-Erweiterungsprotokolle (XEP). Um die Prosody-Module, welche für Conversations benötigt werden, zu installieren, ist die Installation von Mercurial nötig. Standardmäßig werden die Built-in-Module von Prosody auf Debian in /usr/lib/prosody/modules abgelegt. Im Ordner können mit Mercurial die aktuellen Module heruntergeladen und auch aktualisiert werden (https://prosody.im/doc/installing_modules). Damit die heruntergeladenen Module verwendet werden können, muss der Pfad zum Ordner mit den Modulen in die Konfigurationsdatei von Prosody aufgenommen werden.

Die für Conversations teilweise nötigen XEPs finden sich auf der GitHub-Seite (https://github.com/siacs/Conversations) und umfassen:

XEP-0065: SOCKS5 Bytestreams (or mod_proxy65). Will be used to transfer files if both parties are behind a firewall (NAT).

XEP-0163: Personal Eventing Protocol for avatars and OMEMO.

XEP-0191: Blocking command lets you blacklist spammers or block contacts without removing them from your roster.

XEP-0198: Stream Management allows XMPP to survive small network outages and changes of the underlying TCP connection.

XEP-0280: Message Carbons which automatically syncs the messages you send to your desktop client and thus allows you to switch seamlessly from your mobile client to your desktop client and back within one conversation.

XEP-0237: Roster Versioning mainly to save bandwidth on poor mobile connections

XEP-0313: Message Archive Management synchronize message history with the server. Catch up with messages that were sent while Conversations was offline.

XEP-0352: Client State Indication lets the server know whether or not Conversations is in the background. Allows the server to save bandwidth by withholding unimportant packages.

XEP-0363: HTTP File Upload allows you to share files in conferences and with offline contacts.

Ein Mapping der XEPs auf die jeweiligen Prosody-Module kann hier eingesehen werden: https://prosody.im/doc/xeplist

Liste der (möglichen/aktivierten) XEPs (für die Prosody-Konfiguration) – die Liste kann ggf. noch unvollständig sein oder auch zu viele aktivierte Module beinhalten, was im Einzelfall noch geprüft werden muss (In der Projektdoku ist dazu beispielsweise ein Hinweis auf vermeidbare „Leaks“ zu finden):

"blocklist";
"smacks";
"smacks_offline";
"carbons";
"mam";
"mam_archive";
--"mam_muc";
--"http_muc_log";
"csi";
--"http_upload_external";
--"http_upload";
--http_upload_path = "/var/www/files";
"cloud_notify";
"blocking";
"admin_blocklist";
"privacy_lists";
--"profile";
"pep_vcard_avatar";
"http";
"throttle_presence";
"pinger";

Außerdem kann „c2s_require_encryption“ auf „true“ gesetzt, Component „conference.oniondomain.onion“ „muc“ und Component „proxy.oniondomain.onion“ „proxy65“ aktiviert werden. Es genügt dazu, die beiden Bindestriche für Kommentare zu entfernen. Nach Änderung der Zertifikate und privaten Schlüssel an beiden Stellen der TLS-Konfiguration und der Änderung der falschen Endung .crt in .cert (.crt ist hier zwar gebräuchlicher, das von Prosody erstellte Zertifikat hat allerdings die Endung .cert) fragt Conversations beim Test nach einem Aufbau trotz nicht validem Zertifikat. Die Zertifikatsprüfung kann hier ignoriert werden. Die Verbindung kommt beim Test zustande.

Eventuell muss/kann „mod_onions“ noch aktiviert werden. Die Verbindung zum Server ist durch die Verwendung von Tor durch mehrere NAT und sogar einem CG-NAT möglich. (Im Fall der Verwendung von SDIM hinter einem DS-Lite-Anschluss)

Die Konfiguration von Prosody und Tor wurde abschließend in die Konfiguration des Images übernommen und dadurch bereits automatisiert.

XMPP-Server und Tor

Ein Kommentar zu „XMPP-Server und Tor

Kommentare sind geschlossen.