Eigener verschlüsselter Chat-Server mit Matrix Synapse
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:
sudo apt install -y lsb-release wget apt-transport-https sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/matrix-org.list sudo apt update sudo apt install matrix-synapse-py3
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 Element (ehemals 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.
Umstieg von Riot auf Element
Wer Matrix bisher mit dem Paket matrix-synapse betrieben hat, wird feststellen, dass der neue Element Client – ehemals Riot – nicht mehr mit diesem veralteten Serverpackage geht. Daher bitte oben nochmal die neuen Sources einstellen und schlicht matrix-synapse-py3 drüber installieren. Die Migration scheint ohne Probleme mit den gleichen Configs zu laufen.
Du möchtest regelmäßig Neuigkeiten von meinem Blog? Trag dich für meinen Newsletter ein:
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.
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.
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?
Nein, leider nicht. Die Administration von Usern ist bei Matrix leider generell mehr als schlecht.
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
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.
Ich bin gerade über die DNS Konfiguration gestolpert:
_matrix._tcp.
Ohne den Punkt am Ende geht es – oder halt die eigene Domain vorher noch mit dranhängen und danach den Punkt zum abschließen des Eintrags.
Danke für das Feedback. Ich habs ausgebessert.
Das kopiere mit den Zertifikaten kann man sich sparen, wenn man einen Reverse Proxy mit NGINX auf den 8448 macht. Danach kann man auch den 8448-Listener aus der homeserver.yaml entfernen und alle TLS*-Einträge. Bisschen schmaler 😉
server {
server_name matrix.server.de;
listen 80;
listen [::]:80;
return 301 https://$server_name$request_uri;
}
server {
server_name matrix.server.de;
listen 443 ssl;
listen [::]:443 ssl;
listen 8448 ssl;
listen [::]:8448 ssl;
gzip off;
# SSL
ssl_certificate fullchain.pem;
ssl_certificate_key privkey.pem;
ssl_dhparam dhparam4096.pem;
ssl_trusted_certificate chain.pem;
ssl_ecdh_curve secp521r1:secp384r1;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
ssl_prefer_server_ciphers on;
ssl_buffer_size 4k;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 15m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
# MATRIX
location /_matrix {
proxy_pass http://127.0.0.1:8008;
proxy_set_header X-Forwarded-For $remote_addr;
}
Servus,
die DNS-Konfiguration ist oder wird wohl bald obsolet sein. Darauf sollte man Verzichten und die Umsetzung lieber mit den .well-known Dateien machen. Das ist viel einfacher und wird schneller aktualisiert.
LG Andreas
Hallo und Danke für diese Anleitung.
Kann ich diese Anleitung auch auf meinen Rasbian nutzen oder muss ich hier was umstellen?
Rasbian basiert doch auf Debian
Gruß Lock
Hallo und danke für deine Anleitung.
Kannst du mir bitte diesen Punkt etwas genauer beschreiben.
Was muss ich bei Debian machen ?
Gehe nun in deine Domainverwaltung und füge für Federation folgenden SRV Record hinzu:
_matrix._tcp SRV 10 0 8448 chat.deinedomain.de.
Dank dir!
Das musst du im DNS setzen (SRV-Record) – hat mit Debian nichts zu tun.
Hallo,
Meine Frage dazu wäre, ob es eine maximale Useranzahl gibt, die sich z.B. über Element mit meinem Server verbinden? Also ich habe derzeit 6 Benutzer angelegt. Und bei einem kam die Meldung, dass der “Server voll ist”. Ich dachte, dass man bei einem selbst aufgesetzten Server keine Begrenzung hat. Oder kann man das irgendwie einstellen? Wäre wirklich hilfreich das zu wissen.
Geplant wären ca. 25 Leute die auf dem Server chatten wollen.
Hab jetzt auch einen synapse server laufen.
Direkt über Python in einen virtualenv installiert.
Habe python3 benutzt und mich für PostgreSQL entschieden.
Die Datenbank und die Python executables und der rest bis auf den Media Store liegt auf einer ssd.
Habe meinem Synapse Container 2 CPU Kerne und 4gb ram gegeben.
Habe auch diverse Optionen in der Synapse config getätigt um die Leistung zu steigern.
Leider ist es immernoch manchmal etwas träge v.a. wenn der backlog geladen wird.
Im Log hab ich gesehen dass viele Server nicht erreicht werden können bzw per DNS gar nicht aufgelöst werden können (time Out)
Hat jemand eine Idee wie man diese Probleme beheben kann.
Hallo,
ein grafische Benutzeroberfläche zur Benutzerverwaltung findet ihr hier:
https://github.com/Awesome-Technologies/synapse-admin/
Kann noch nicht alles, aber für den Anfang schon ganz hilfreich. Gibt es als Docker-Container.