Willkommen in der Matrix

Veröffentlicht von Ulf Joksch am 26.02.2021

Messaging über die Matrix

WhatsApp hat sich unbeliebt gemacht. Die Nutzer rennen scharenweise zu anderen Messenger-Anbietern wie Signal, Threema oder Telegram.

Aber es gibt noch eine Alternative, die unsere Aufmerksamkeit verdient. Matrix hat folgende Vorteile, die es sehr attraktiv erscheinen lassen:

  • Open Source
  • Ende-zu-Ende Verschlüsselung
  • dezentrale Infrastruktur

Besonders die dezentrale Infrastruktur lässt eine große Flexibilität zu, ohne von einem Anbieter abhängig zu sein. Hängt ein Nutzer an einer Matrix-Synapse (also irgendeinem Server in der Matrix), so kann man mit ihm kommunizieren. Man benötigt nur seine Matrix-Adresse, die vergleichbar ist mit einer E-Mail-Adresse.

Eine Matrix-Adresse sieht folgendermaßen aus: @Name:domain.de

Man kann sich einer bestehenden Matrix-Synapse anschließen oder aber auch seine eigene Matrix-Synapse einrichten.

Hier ein ausführlicher Artikel über Matrix: https://blog.novatrend.ch/2021/01/18/whatsapp-threema-signal-komm-in-die-matrix-jetzt/

Hier beschreibe ich, wie ich meine Synapse auf einem CentOS 7 Server eingerichtet habe:

Installation des Synapse-Servers

mkdir /opt/synapse
py3-virtualenv -p python3 /opt/synapse/env
source /opt/synapse/env/bin/activate
pip install --upgrade pip
pip install --upgrade setuptools
pip install matrix-synapse

cd /opt/synapse
python -m synapse.app.homeserver \
--server-name mymatrix.de \
--config-path homeserver.yaml \
--generate-config \
--report-stats=[yes|no]

Installation von PostgreSQL

Einrichten des Repositories und Installation der Pakete:

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm -y`

yum install postgresql12-server postgresql12-plpython3 postgresql12
yum install python36-pg8000.noarch

Initialisieren der Datenbank:

/usr/pgsql-12/bin/postgresql-12-setup initdb

Einrichten und Starten des Dienstes:

systemctl enable postgresql-12.service
systemctl start postgresql-12.service
su - postgres
createuser --pwprompt synapse_user

Hier müssen wir für den User ein Passwort angeben. Auf dieses nehme ich später noch einmal unter dem Begriff Synapse_User_pgDB_Passwort Bezug

Nun lege ich die Datenbank für den Synapse-Server an. Dafür verbinde ich mich auf die interaktive Kommandooberfläche von PostgreSQL mit dem Kommando

psql

und gebe folgenden SQL-Befehl ein, um die Datenbank anzulegen:

CREATE DATABASE synapse
ENCODING 'UTF8'
LC_COLLATE='C'
LC_CTYPE='C'
template=template0
OWNER synapse_user;

Anschliessend verlassen wir psql wieder:

\q

Ab hier brauche ich nicht mehr als postgres-User zu agieren und verlasse dessen Shell:

exit

Die Zugriffsregelung für den von mir angelegten Benutzer synapse_user tragen wir in die PostgreSQL Konfigurationsdatei /var/lib/pgsql/12/data/pg_hba.conf ein:

host    synapse     synapse_user    127.0.0.1/32     md5  # or `scram-sha-256` instead of `md5` if you use that
host synapse synapse_user ::1/128 md5 # or `scram-sha-256` instead of `md5` if you use that

Daraufhin starte ich den Datenbankserver neu:

systemctl restart postgresql-12.service

Konfigurieren von Synapse

Jetzt gilt es noch, den Synapse-Server so zu konfigurieren, wie ich ihn einsetzen will. Dafür wechsle ich wieder in das Verzeichnis des Servers

cd /opt/synapse

und nehme die Konfigurationsdatei homeserver.yaml in den Editor:

vim homeserver.yaml

Hier sind alle Konfigurationseinstellungen gelistet, die ich in meiner Konfigurationsdatei angepasst habe:

server_name: "mymatrix.de"
pid_file: /opt/synapse/homeserver.pid
public_baseurl: https://mymatrix.de
use_presence: true
require_auth_for_profile_requests: false
limit_profile_requests_to_users_who_share_rooms: false
allow_public_rooms_without_auth: false
allow_public_rooms_over_federation: false
block_non_admin_invites: false
enable_search: true

listeners:
- port: 8008
tls: false
type: http
x_forwarded: true
bind_addresses: ['127.0.0.1']

resources:
- names: [client, federation]
compress: false

admin_contact: 'mailto:admin@mydomain.de'

limit_remote_rooms:

retention:

tls_certificate_path: "/etc/letsencrypt/live/mymatrix.de/fullchain.pem"
tls_private_key_path: "/etc/letsencrypt/live/mymatrix.de/privkey.pem"

database:
name: psycopg2
args:
user: synapse_user
password: Synapse_User_pgDB_Passwort
database: synapse
host: localhost
cp_min: 5
cp_max: 10

log_config: "/opt/synapse/mymatrix.de.log.config"
media_store_path: "/opt/synapse/media_store"

disable_msisdn_registration: false
enable_3pid_lookup: true
registration_shared_secret: "blubBlaBlub55635265435235gdlkgjrfkldjglkj"

account_threepid_delegates:
msisdn: https://vector.im # Delegate SMS sending to this local process

macaroon_secret_key: "GulligulliGulligulliRamsamsam65464675758573645"
form_secret: "tfkfefkeskrfgwFQGEWREgre&%$%§$rgbfbfdDSABFFDb"
signing_key_path: "/opt/synapse/mymatrix.de.signing.key"
old_signing_keys:
trusted_key_servers:
- server_name: "ourmatrix.de"

password_config:
pepper: "ThatsThePepper235523254@43!"
policy:
enabled: true
minimum_length: 8
require_digit: true
require_symbol: true
require_lowercase: true
require_uppercase: true

email:
smtp_host: my.mailserver.de
smtp_port: 25
require_transport_security: true
notif_from: "Your Friendly %(app)s homeserver <noreply@mymatrix.de>"
enable_notifs: true

Als Reverse-Proxy installiere ich nun noch den NGinx und passe dessen Konfiguration an:

yum install nginx
systemctl enable nginx

vi /etc/nginx/nginx.conf

/etc/nginx/nginx.conf

server {
listen 443 ssl http2;

# For the federation port
listen 8448 ssl http2 default_server;

server_name mymatrix.de;

ssl_certificate "/etc/letsencrypt/live/mymatrix.de/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/mymatrix.de/privkey.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location ~* ^(\/_matrix|\/_synapse\/client) {
proxy_pass http://localhost:8008;
proxy_set_header X-Forwarded-For $remote_addr;
# Nginx by default only allows file uploads up to 1M in size
# Increase client_max_body_size to match max_upload_size defined in homeserver.yaml
client_max_body_size 50M;
}
location /.well-known/matrix/client {
return 200 '{"m.homeserver": {"base_url": "https://mymatrix.de"}}';
default_type application/json;
add_header Access-Control-Allow-Origin *;
}
systemctl start nginx.service
cd
yum install snapd
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap
snap install core

Nach der üblichen Fehlermeldung ein zweites Mal:

snap install core
snap refresh core
snap install --classic certbot

Einrichtung des LetsEncrypt-Zertifikates:

certbot certonly --standalone
pip install psycopg2-binary
source /opt/synapse/env/bin/activate
synctl start

Einrichten eines Matrix-Benutzers:

register_new_matrix_user -c homeserver.yaml http://localhost:8008
New user localpart: erikj
Password:
Confirm password:
Make admin [no]:
Success!

Willkommen in der Matrix!

Der Client für die Matrix heißt Element (früher: RiotIM). Für Linux, Windows oder MacOSx kann ich mir den Client unter https://element.io herunterladen. Für iOS im AppStore und Android im Google-Playstore.