Eigener verschlüsselter Chat-Server mit Matrix Synapse

6

Ein sicherer Chat ist heutzutage viel Wert: eure Chatnachrichten werden bei WhatsApp & Co. ausgewertet und bei Bedarf an Behörden oder Unternehmen weitergegeben (wie das bei Facebook war).

Wer über einen eigenen kleinen Server verfügt, kann schnell einen eigenen Chatserver mit Federation aufsetzen und so verschlüsselt mit allen Freunden und Bekannten chatten. Die Clients gibt es für alle Plattformen! Wer sogar einen TURN / STUN Server hat, kann Videotelefonie aktivieren. Die Zaubersoftware dafür heißt Matrix Synapse.

Die Installation unter Debian ist einfach, allerdings ist die richtige Konfiguration für z.B. Federation etwas tricky. Federation ist ähnlich wie bei Nextcloud oder Diaspora die Möglichkeit, sich mit Usern und Chaträumen von anderen Matrix Chat-Servern zu verbinden. Damit ergibt sich ein dezentrales Netzwerk.

Installation

Die Grundinstallation am besten über die offizielle Debianquelle durchführen:


wget -qO - https://matrix.org/packages/debian/repo-key.asc | apt-key add -
add-apt-repository https://matrix.org/packages/debian/

apt install matrix-synapse

Während der Installation legt man den Chat Servernamen fest. Unter diesem Hostnamen läuft der Chatserver, also z.B. chat.deinedomain.de. Dieser Servername muss später im Client angegeben werden.

Abschließend starten wir den Service und überprüfen, ob die Ports 8008 und 8448 (Federation Port) verfügbar sind:


systemctl start matrix-synapse
systemctl enable matrix-synapse

netstat -tulpn

Ich würde euch empfehlen, PostgreSQL für die Nutzerdatenbank zu verwenden. Die Installation bzw. Einrichtung ist nicht schwer, aber die Infos brauche ich nicht kopieren, sondern findet ihr direkt beim Hersteller immer up to date.

nginx Reverse Proxy / SSL

Damit der Chatserver direkt unter dem oben festgelegten Hostname laufen kann, wäre ein SSL Proxy sinnvoll. Let´s Encrypt bzw. Certbot zum Erstellen der Zertifikate reicht dafür aus. Der nginx Vhost sollte dann so aussehen:

Da in Matrix Key und Cert von Let´s Encrypt noch einmal benötigt werden, aber Matrix keinen Zugriff auf die Let´s Encrypt Pfade hat, müssen wir die von Certbot generierten Dateien jedes Mal in den Matrix Folder kopieren und dann dem Matrix User zuweisen. Folgendes Skript automatisiert über den Crontab diesen Prozess, sobald ihr ihn einmal initial eingerichtet habt.

Matrix Konfiguration

Die wichtigste und abschließende Konfiguration passiert unter /etc/matrix-synapse/homeserver.yaml. Damit User sicher manuell registriert werden können, solltest du vorher ein eigenes Secret über einen Passwort Generator oder über die Kommandozeile erzeugen (registration_shared_secret).

Nicht vergessen, vorher PostgreSQL einzurichten und Key und Cert zu kopieren. Folgende Punkte solltest du editieren:

Einmal neustarten und alles sollte nun laufen.

DNS

Gehe nun in deine Domainverwaltung und füge für Federation folgenden SRV Record hinzu:

_matrix._tcp.   SRV    10 0 8448 chat.deinedomain.de.

SRV ist dabei nur der DNS Typ, d.h. links davon wird der Key definiert und der rechte Teil ist der Value. Die Punkte nicht vergessen, da diese entscheidend sind!

Ob Federation funktionert, solltest du als erstes prüfen, dass du beim Federation Checker keine Propertie siehst, die false anzeigt oder einen Error:

https://matrix.org/federationtester/api/report?server_name=chat.deinedomain.de

Es kann sein, dass es etwas dauert, bis der SRV Record richtig geladen wird.

Abschließend

Da nun alles konfiguriert ist, registrieren wir den ersten (Admin)-User, was nur über die Kommandozeile geht!


register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008

Lest euch die Anweisungen am Bildschirm genau durch und erstellt für euch selbst einen Admin Account!

Damit ihr nun chatten könnt, braucht ihr noch einen Chat Client. Der beste und bekannteste ist Riot. Ihr könnt es entweder direkt auf eurem PC installieren oder als Web Applikation selbst hosten. Bei der Anmeldeseite müsst ihr lediglich auf Benutzerdefinierter Server klicken und dort unter Heimserver-URL eure Chat Serverdomain einstellen. Identitätsserver URL ist immer https://vector.im!

Für jeden weiteren Nutzer, der mit euch chatten mag, entweder auf matrix.org registrieren oder bei euch hosten mittels register_new_matrix_user.

6 Comments
  1. noses. says

    Letsencrypt: Ich würde auf dieses magische chown-Gedöns aus der crontab verzichten, matrix eine eigene Gruppe geben und mit setfacl auf den entsprechenden Pfaden Zugriff für matrix-synapse erlauben. Das ist, falls man seine Dokumentation schludrig führt, auch noch einfacher zu finden, wenn man danach sucht.

    1. Benjamin Hartwich says

      Ich bin mir nicht sicher, ob die Gruppenzuordnung des matrix synapse users so sinnvoll ist. So wie ich Debian bei Gitlab z.B. kenne, werden die Gruppenzuordnungen der Service-User bei Paketupdates teils wieder auf initial zurückgesetzt.

  2. Andre says

    Geil währe jetzt noch die User von WordPress mit Synapse zu verbinden. Sollte über kamax und die WP Rest Api irgendwie funktionieren. Hast du darüber irgendwelche Informationen?

    1. Benjamin Hartwich says

      Nein, leider nicht. Die Administration von Usern ist bei Matrix leider generell mehr als schlecht.

  3. marko says

    Wo kommt denn der Part der ngix konfig hin?
    Als nicht ganz Profi verstehe ich das nicht.

    wie muss am ende die nginx.conf komplett aussehen?
    paste ich den code vom howto an das ende der ngix.conf
    bekomme ich unter systemctl restart nginx fehler und nginx läuft nicht….

    danke
    marko

    1. Benjamin Hartwich says

      Der nginx Part muss in eine Config-Datei, z.B. unter conf.d eine Datei mit matrix.conf anlegen. Du kannst die Anweisungen meines Erachtens auch in die nginx.conf in den http block packen, aber ich habe es immer gern separiert. Für die nginx.conf musst du für Matrix nichts groß beachten. Mit nginx -t prüfst du, was genau falsch ist.

Leave A Reply

Your email address will not be published.