Bei Matrix denkt man zuerst vermutlich an die Filmreihe mit Keanu Reeves als Neo. Also zumindest die älteren Leute, immerhin kam der erste Teil bereits 1999 in die Kinos. Vielleicht denkt man auch an Mathematik.

Inzwischen denkt man bei Matrix aber auch an Messenger und Chat-Kommunikation. Der Vorteil gegenüber geschlossenen Systemen beruht darauf, dass sich im Prinzip jeder einen entsprechenden Server aufsetzen und betreiben kann. Dabei kann dieser Server mit anderen Servern in Verbindung stehen - eine sogenannte FEDERATION. Allerdings kann der Server auch allein für sich stehen und so z.B. der (verschlüsselten) Kommunikation innerhalb einer Gruppe dienen.

Installation

Unter Debian kann man mit folgenden Schritten den Server synapse installieren:


apt install lsb-release wget apt-transport-https
wget https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg -O /usr/share/keyrings/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" | tee /etc/apt/sources.list.d/matrix-org.list
apt update
apt install matrix-synapse-py3

Konfiguration

Die Konfiguration erfolgt über die Datei /etc/matrix-synapse/homeserver.yml. Der Name des Servers sollte bereits bei der Installation abgefragt worden sein. Dieser wird (bei Debian) in der Datei /etc/matrix-synapse/conf.d/server_name.yaml abgelegt. Dieser Servername dient auch für die URL des Servers, so dass dort keine Änderung nötig sein sollte. Außerdem stellt der Servername den Domainteil der User-ID dar. code>@user:my.domain.com</code

Als Datenbank kommt standardmäßig SQLite zum Einsatz. Für größere Anwendungsgebiete (also eigentlich alles, was über einen Testbetrieb hinausgeht) empfiehlt sich die Umstellung auf PostgreSQL.

Zahlreiche Einstellung kommen nur zum Tragen, wenn kein Reverse Proxy verwendet wird. Für den

Reverse Proxy

Damit der Matrix-Server auch von außen erreichbar ist, wird ein Webserver als Reverse Proxy eingesetzt. Das kann Apache, nginx oder auch lighttpd sein. Die Einstellungen für lighttpd sind in der Dokumentation von Synape nicht erwähnt. In Anlehnung an die Einstellungen für andere Reverse-Proxy sollte die Konfiguration funktionieren.


$HTTP["host"] == "matrix.server.de" {
    $HTTP["url"] =~ "^/.well-known/"  {
       mimetype.assign = (
         "client" => "application/x-web-app-manifest+json",
         "server" => "application/x-web-app-manifest+json"
       )
       alias.url += (
     "/.well-known/matrix/server" => "/var/www/html/static/.well-known/matrix/server",
     "/.well-known/matrix/client" => "/var/www/html/static/.well-known/matrix/client"
       )
    }

    $HTTP["url"] !~ "^/.well-known/matrix/" {
       proxy.server = ("" => (("host" => "127.0.0.1", "port" => 8008)))
    }

    $HTTP["scheme"] == "http" {
       url.redirect = ("" => "https://${url.authority}${url.path}${qsa}")
    }

    $HTTP["scheme"] == "https" {
       ssl.pemfile = "/etc/lighttpd/certs/matrix.winux.eu.pem"
       ssl.openssl.ssl-conf-cmd = ("MinProtocol" => "TLSv1.2")
       ssl.openssl.ssl-conf-cmd += ("Options" => "-ServerPreference")
       ssl.openssl.ssl-conf-cmd += ("CipherString" => "ECDHE-ECDSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384")

       setenv.add-response-header  = (
     "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload",
     "X-Frame-Options" => "DENY",
     "X-Content-Type-Options" => "nosniff",
         "Access-Control-Allow-Origin" => "*"
       ) 
    }

}

Damit ist der Server für Clients erreichbar. Soll auch die Kommunikation mit anderen Servern (Federation) genutzt werden, muss noch ein Eintrag ergänzt werden.


$SERVER["socket"] == ":8448" {
   ssl.engine  = "enable"
   proxy.server = ("" => (("host" => "127.0.0.1", "port" => 8008)))
}

Zusätzlich müssen natürlich die beiden statischen Files im Verzeichnis .well-known angelegt werden. /.well-known/matrix/server


{
"m.server": "matrix.server.de:443"
}
/.well-known/matrix/client

{
"m.homeserver": {
"base_url": "https://matrix.server.de"
}
}

Verwaltung

Wenn der Server läuft, müssen natürlich noch Nutzer angelegt werden. Wenn in der Konfigurationsdatei homeserver.yaml die User-Registrierung deaktiviert ist enable_registration: false, was standardmäßig der Fall ist, erfolgt das Anlegen neuer User direkt in der Shell.

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

New user localpart: USERNAME
Password:
Confirm password:
Make admin [no]:
Success!
Stand: 30.06.2022