Mein Mini-PC heißt muckl, läuft unter Debian stable und soll als Server für Webseiten und Matrix messaging dienen. muckl hat eine Kabelverbindung zu einem Router (alte FRITZ!Box) und muss mit dynamischem DNS (DDNS) zurechtkommen. Im internen Netz hat muckl eine statische IPv4 Adresse und für IPv6 einen EUI-64. Für die Einrichtung des DDNS auf dem Router bin ich nach der Anleitung von Nocksoft vorgegangen und habe dynv6.com als Anbieter gewählt. muckl ist jetzt unter mismuckl.v6.rocks zu erreichen und hat gültige A und AAAA DNS records. Zusätzlich habe ich erst einmal “www” als CNAME record bei dynv6 eingetragen, da eine bestehende Webseite auch unter www.mismuckl.v6.rocks gezeigt werden soll. Ich will die DNS Auflösung lokal mit dig oder nslookup verfolgen. Dazu habe ich die DNS-rebind-protection für die beiden Namen von muckl auf der FRITZ!Box angepasst. Außerdem sind die ports für http und https zur Weitergabe von IPv4 bzw. Weiterleitung von IPv6 an muckl eingerichtet.
Als Server braucht muckl Schutz! Dazu habe ich ufw als Firewall und fail2ban nach der Anleitung von Carsten Rieger installiert. Das hat noch nichts mit Matrix-Synapse zu tun, sondern dient nur zur Absicherung des zu installierenden Webservers. Eine einfache Anleitung für ufw findet sich bei DigitalOcean. Jetzt sind nur noch die ports 80 für http, 443 für https und 22 für ssh (secure shell) offen. Bei Letzterem habe ich den Zugriff auf das lokale Netzwerk beschränkt (sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp). fail2ban wollte am Anfang nicht laufen und brauchte zwei Nachbesserungen der Konfiguration, die sich aber im Internet leicht finden ließen (sshd_backend = systemd, allowipv6 = auto).
Jetzt braucht es nginx als Webserver und acme.sh für die Zertifikate von Let's Encrypt. nginx ist schnell installiert (sudo apt install nginx). Die Webseite und die Konfiguration für nginx bestehen bereits und ziehen nur zu Muckl um. Muckls Domäne ist relativ einfach zu zertifizieren, da der DNS Anbieter dynv6.com direkt von acme.sh unterstützt wird. Ein neuer Benutzer, acmeuser wird angelegt, der nginx neu starten darf und sich acme.sh in sein home Verzeichnis installiert.
sudo adduser acmeuser --gecos "" --disabled-password
sudo usermod -aG www-data acmeuser
sudo visudo /etc/sudoers.d/acmeuser
acmeuser ALL=NOPASSWD: /bin/systemctl reload nginx.service
sudo su - acmeuser
curl https://get.acme.sh | sh
exit
Zum Holen der Zertifikate muss acmeuser neu gestartet werden. Darum machen wir erstmal weitere Vorbereitungen, Anlegen von Verzeichnissen mit Berechtigungen, Installation und Auswahl des Anbieters der Zertifikate.
sudo mkdir -p /etc/letsencrypt/rsa-certs /etc/letsencrypt/ecc-certs
sudo chmod -R 770 /etc/letsencrypt
sudo chown -R www-data:www-data /etc/letsencrypt
sudo apt install socat
sudo su - acmeuser -c ".acme.sh/acme.sh --set-default-ca --server letsencrypt"
Jetzt können die Zertifikate geholt werden. Dazu braucht acmeuser das Access Token von dynv6 für mismuckl.v6.rocks. Zur Not kann man das bei dynv6.com nachlesen unter “my zones -> mismuckl…->instructions” steht etwas von "password". Die Zertifikate werden für mismuckl und seine DNS CNAMES, z.B. www geholt, daher die Wildcard in *.mismuckl.v6.rocks.
sudo su - acmeuser
export DYNV6_TOKEN="<dynv6 access token>"
acme.sh --issue --dns dns_dynv6 -d mismuckl.v6.rocks -d *.mismuckl.v6.rocks --server letsencrypt --keylength 4096 --key-file /etc/letsencrypt/rsa-certs/privkey.pem --ca-file /etc/letsencrypt/rsa-certs/chain.pem --cert-file /etc/letsencrypt/rsa-certs/cert.pem --fullchain-file /etc/letsencrypt/rsa-certs/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"
acme.sh --issue --dns dns_dynv6 -d mismuckl.v6.rocks -d *.mismuckl.v6.rocks --keylength ec-384 --key-file /etc/letsencrypt/ecc-certs/privkey.pem --ca-file /etc/letsencrypt/ecc-certs/chain.pem --cert-file /etc/letsencrypt/ecc-certs/cert.pem --fullchain-file /etc/letsencrypt/ecc-certs/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"
ls -l /etc/letsencrypt/rsa-certs
ls -l /etc/letsencrypt/ecc-certs
crontab -l
exit
Die beiden langen Befehle werden mit “success” quittiert. Dann guckt acmeuser, ob die Zertifikate wirklich da sind, und überprüft, dass die Zertifikate auch erneuert werden. Die Zertifikate von Let's Encrypt sind zur Zeit 90 Tage gültig und sollen nach 60 Tagen erneuert werden. Letzteres wird immer kurz vor Mitternacht überprüft, wie crontab zeigt.
Die nginx Konfiguration ist sehr einfach gehalten und besteht hier nur aus zwei Dateien.
/etc/nginx/nginx.conf<
criegerde bezieht sich auf die
Anleitung von Carsten Rieger.
user www-data;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
multi_accept on;
use epoll;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
server_names_hash_bucket_size 64;
# server_name_in_redirect off;
# stuff from criegerde
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# more from criegerde
send_timeout 3600;
tcp_nodelay on;
open_file_cache max=500 inactive=10m;
open_file_cache_errors on;
keepalive_timeout 65;
reset_timedout_connection on;
resolver 176.9.93.198 176.9.1.117 valid=30s;
resolver_timeout 5s;
##
# SSL Settings
##
# Mozilla intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ecdh_curve X25519:prime256v1:secp384r1;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
##
# Logging Settings
##
log_format criegerde escape=json
'{'
'"time_local":"$time_local",'
'"remote_addr":"$remote_addr",'
'"remote_user":"$remote_user",'
'"request":"$request",'
'"status": "$status",'
'"body_bytes_sent":"$body_bytes_sent",'
'"request_time":"$request_time",'
'"http_referrer":"$http_referer",'
'"http_user_agent":"$http_user_agent"'
'}';
access_log /var/log/nginx/access.log criegerde;
##
# Gzip Settings
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
/etc/nginx/sites-enabled/mismuckl.v6.rocks
/etc/nginx sites-enabled enthält symbolic links auf Dateien in sites-available.
##
# web server only, first try with https
#
# Somebody called the server directly
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name mismuckl.v6.rocks;
ssl_certificate /etc/letsencrypt/rsa-certs/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/rsa-certs/privkey.pem;
return 301 $scheme://www.mismuckl.v6.rocks$request_uri;
}
# If somebody calls the default https://www.<server>
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name www.mismuckl.v6.rocks;
ssl_certificate /etc/letsencrypt/rsa-certs/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/rsa-certs/privkey.pem;
ssl_session_cache shared:le_nginx_SSL:10m;
ssl_session_timeout 1440m;
ssl_session_tickets off;
index index.html index.htm;
location / {
root /var/www/html/prod;
try_files $uri $uri/ =404;
}
location /demo {
root /var/www/html;
}
}
server {
listen 80 default_server;
listen [::]:80 default_server;
return 301 https://$host$request_uri;
}
Zuerst ist hier ein “matrix” als weiterer DNS CNAME bei dynv6.com einzurichten, damit Muckl auch auf matrix.mismuckl.v6.rocks hört. Dann habe ich wieder die Anleitung von Carsten Rieger befolgt, ziemlich strikt diesmal. Nach Einbinden des Repositoriums von matrix.org wird matrix-synapse installiert (sudo apt install -y matrix-synapse-py3) und die Datenbank PostgreSQL (sudo apt install -y postgresql python3-psycopg2). Die nächsten Schritte waren: servername.yaml an matrix.mismuckl.v6.rocks und meine Email Adresse anzupassen, die postgres Datenbank zu erstellen und homeserver.yaml auf die gerade erstellte Datenbank umzustellen. Leider wollte matrix-synapse nicht starten und hinterließ "... Database has incorrect ctype of 'de_DE.UTF-8'. Should be 'C'" in der log-Datei. Ich habe die Datenbank gelöscht und danach neu erstellt:
sudo su - postgres
psql
DROP DATABASE matrixdb;
CREATE DATABASE matrixdb
ENCODING 'UTF8'
LOCALE='C'
template=template0
OWNER matrix;
\q
Jetzt startet der matrix-synapse.service klaglos. Um ihn anzusprechen, brauchen wir noch nginx. Dafür können wir die Datei aus der Anleitung gleich mit den richtigen Zertifikaten verwenden:
/etc/nginx/sites-enabled/matrix.mismuckl.v6.rocks-V1
Dies ist die erste Version der Konfiguration.
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name matrix.mismuckl.v6.rocks;
# Wir nutzen zu Beginn sogenannte "self-signed-certificates'
# um bei Let's Encrypt TLS-Zertifikate anfragen zu können:
# nicht nötig, haben wir schon
ssl_certificate /etc/letsencrypt/rsa-certs/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/rsa-certs/privkey.pem;
ssl_certificate /etc/letsencrypt/ecc-certs/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/ecc-certs/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/ecc-certs/chain.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384';
ssl_ecdh_curve X448:secp521r1:secp384r1;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload;" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Robots-Tag none always;
add_header X-Download-Options noopen always;
add_header X-Permitted-Cross-Domain-Policies none always;
add_header Referrer-Policy no-referrer always;
add_header X-Frame-Options "SAMEORIGIN" always;
fastcgi_hide_header X-Powered-By;
access_log off;
error_log off;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
location /_matrix {
proxy_pass http://127.0.0.1:8008;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 50M;
}
location /.well-known/matrix/server {
return 200 '{"m.server": "matrix.mismuckl.v6.rocks:443"}';
add_header Content-Type application/json;
}
location /.well-known/matrix/client {
return 200 '{"m.homeserver": {"base_url": "https://matrix.mismuckl.v6.rocks"}}';
add_header Content-Type application/json;
add_header "Access-Control-Allow-Origin" *;
}
}
Jetzt zeigt https://matrix.mismuckl.v6.rocks/_matrix/static/ “It works! Synapse is running”. Die Tests für das “Federation-Feature” von Matrix waren positiv. Im nächsten Test wird mit “register_new_matrix_user -c /etc/matrix-synapse/conf.d/server_name.yaml http://localhost:8008” wird temporär ein neuer Benutzer angelegt (mamuckl, P0sswort). Der konnte sich dann über app.element.io bei matrix.mismuckl.v6.rocks anmelden. Die in der Anleitung verlinkten Skripte von Jan Rehr haben sehr geholfen, Matrix kennenzulernen. Allerdings erforderten sie irgendeine Erweiterung der Kommandozeile und mussten an das reine bash von Muckls Debian umgearbeitet werden.
Ich habe dann mehrere Matrix Clients ausprobiert: Element, FluffyChat, Element-Desktop. Abgesehen davon, dass alle unterschiedlich aussahen, schienen sie sich auch unterschiedlich zu verhalten. Am Erstellen eines Benutzerprofils bin ich gescheitert. Einmal habe ich versucht, das Passwort für einen Testbenutzer zu ändern, der danach keinen Zugriff mehr hatte. Es schien irgendetwas zu fehlen.
Eigentlich war bisher alles ganz gut gegangen. Mit Namen festgelegte Benutzer können Matrix benutzen. Damit die selbständig ihr Benutzerprofil verwalten können, soll Muckl nun den Matrix Authentication Service (MAS) erhalten. element-hq.github.io bietet eine sehr gute Anleitung zur Installation von MAS. Dem Setup ist einfach zu folgen, wobei die Konfiguration von SSO-Anbietern ausgelassen wurde. Besonders hilfreich waren auf der Kommandozeile die Befehle “mas-cli config check” und “mas-cli doctor”. Hier werden nur hier die für Muckl spezifischen Punkte aufgeführt. Ich hatte MAS noch gemäß dem alten, experimentellen MSC3861 installiert. Das ließ sich sehr einfach nach obiger Anleitung umstellen. Muckl brauchte zuerst als neuen DNS CNAME, auth, damit MAS unter auth.mismuckl.v6.rocks zu erreichen war. matrix-helper wurde als neuer Benutzer angelegt (sudo adduser matrix-helper --gecos "" --disabled-password --ingroup matrix-synapse --home /opt/matrix-authentication-service/ --no-create-home). In /opt/matrix-authentication-service wurde das MAS “binary” installiert. Es folgt eine Reihe neuer und geänderter Konfigurationsdateien.
Die schon bestehende server_name.yaml Datei von Synapse muss um den "matrix_authentication_service:" Block ergänzt werden.
/etc/matrix-synapse/conf.d/server_name.yaml
Dies ist die endgültige Version der Konfiguration. Der RTC
Teil wird hier noch nicht gebraucht.
# This file is autogenerated, and will be recreated on upgrade if it is deleted.
# Any changes you make will be preserved.
# The domain name of the server, with optional explicit port.
# This is used by remote servers to connect to this server,
# e.g. matrix.org, localhost:8080, etc.
# This is also the last part of your UserID.
#
server_name: matrix.mismuckl.v6.rocks
public_baseurl: https://matrix.mismuckl.v6.rocks
max_upload_size: 50M
url_preview_enabled: true
url_preview_ip_range_blacklist:
- '127.0.0.0/8'
- '10.0.0.0/8'
- '172.16.0.0/12'
- '192.168.0.0/16'
- '100.64.0.0/10'
- '192.0.0.0/24'
- '169.254.0.0/16'
- '192.88.99.0/24'
- '198.18.0.0/15'
- '192.0.2.0/24'
- '198.51.100.0/24'
- '203.0.113.0/24'
- '224.0.0.0/4'
- '::1/128'
- 'fe80::/10'
- 'fc00::/7'
- '2001:db8::/32'
- 'ff00::/8'
- 'fec0::/10'
enable_registration: false
registration_shared_secret: "first 32 random alphanumeric letters"
enable_metrics: false
report_stats: false
include_content: false
smtp_host: x.y.z
smtp_port: 587
smtp_user: "my email adress"
smtp_pass: "and password"
require_transport_security: true
#turn_uris: ["turn:coturn.ihredomain.de:443?transport=udp", "turn:coturn.ihredomain.de:443?transport=tcp"]
#turn_shared_secret: "IhrGeheimerSchlüssel"
matrix_authentication_service:
enabled: true
endpoint: http://localhost:8080/
secret: "second 32 random alphanumeric letters"
# Alternatively, using a file:
#secret_file: /path/to/secret.txt
# for RTC (real time communication)
# enable delayed events, so we quit calls that are interrupted somehow
max_event_delay_duration: 12h
Bei der config.yaml Datei für MAS gab es Schwierigkeiten mit
der direkten Email Konfiguration. Der benutzte externe SMTP Server wollte
die Emails nicht akzeptieren. Daher verschickt jetzt der matrix-helper
Benutzer die Emails mit “msmtp”. MAS braucht Emails zur Bestätigung
neu eingegebener Email-Adressen der Benutzer.
/opt/matrix-authentication-service/config.yaml
Dies ist die endgültige Version der Konfiguration.
database:
#uri: postgresql://
# Separate parameters
host: localhost
port: 5432
username: mas_user
password: <secret word>
database: mas
max_connections: 10
min_connections: 0
connect_timeout: 30
idle_timeout: 600
max_lifetime: 1800
email:
from: '"The almighty auth service" <mismuckl@online.de>'
reply_to: '"No reply" <no-reply@mismuckl.v6.rocks>'
# Default transport: don't send any emails
# transport: blackhole
# Send emails using SMTP
#transport: smtp
#mode: plain | tls | starttls
#hostname: localhost
#port: 587
#username: username
#password: password
# Send emails by calling a local sendmail binary
transport: sendmail
command: /usr/bin/msmtp
secrets:
.....
lots of keys and encryptions
.....
passwords:
enabled: true
schemes:
- version: 1
algorithm: bcrypt
unicode_normalization: true
- version: 2
algorithm: argon2id
minimum_complexity: 3
matrix:
kind: synapse
# homeserver: localhost:8008
homeserver: matrix.mismuckl.v6.rocks
secret: <second 32 random alphanumeric letters>
endpoint: http://localhost:8008/
http:
public_base: https://auth.mismuckl.v6.rocks/
listeners:
- name: web
resources:
- name: discovery
- name: human
- name: oauth
- name: compat
- name: graphql
# MAS doesn't need to serve the assets anymore
#- name: assets
binds:
# Bind on a local port
- host: localhost
port: 8080
# OR bind on a Unix domain socket
#- socket: /var/run/mas.sock
# OR bind on a systemd socket
#- fd: 0
# kind: tcp # or unix
# Optional: use the PROXY protocol
#proxy_protocol: true
trusted_proxies:
- 192.168.0.0/16
- 172.16.0.0/12
- 10.0.0.0/10
- 127.0.0.1/8
- fd00::/8
- ::1/128
auth.mismuckl.v6.rocks soll auch hinter nginx als
Reverse Proxy und braucht deshalb eine eigene Konfigurationsdatei.
/etc/nginx/sites-enabled/auth.mismuckl.v6.rocks
Dies ist die endgültige Version der Konfiguration.
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name auth.mismuckl.v6.rocks;
include includes/matrix-mismuckl.inc;
location / {
proxy_http_version 1.1;
proxy_pass http://localhost:8080;
# OR via the Unix domain socket
#proxy_pass http://unix:/var/run/mas.sock;
# Forward the client IP address
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# or, using the PROXY protocol
#proxy_protocol on;
}
# Make nginx serve the assets directly
location /assets/ {
root /opt/matrix-authentication-service/share/;
# Serve pre-compressed assets
gzip_static on;
# Cache assets for a year
expires 365d;
}
}
Die gemeinsamen Anteile der nginx-Konfiguration für MAS und
Synapse sind in der folgenden include-Datei enthalten.
/etc/nginx/includes/matrix-mismuckl.inc
Dies ist die endgültige Version der Konfiguration.
ssl_certificate /etc/letsencrypt/rsa-certs/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/rsa-certs/privkey.pem;
ssl_certificate /etc/letsencrypt/ecc-certs/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/ecc-certs/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/ecc-certs/chain.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384';
ssl_ecdh_curve X448:secp521r1:secp384r1;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload;" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Robots-Tag none always;
add_header X-Download-Options noopen always;
add_header X-Permitted-Cross-Domain-Policies none always;
add_header Referrer-Policy no-referrer always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "frame-ancestors 'self'";
fastcgi_hide_header X-Powered-By;
access_log off;
error_log off;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
Bei der Konfiguration von nginx für matrix.mismuckl.v6.rocks
waren nur die Abschnitte “location /.well-known/matrix/*”
zu beachten. Diese Abschnitte sendet nginx direkt in
JSON-Format, ohne dass extra Dateien angelegt wurden. Der
server Block konnte unverändert übernommen werden, da
der Domänenname von Muckl gleich dem DNS-Eintrag war.
Der client Block musste um auth für MAS ergänzt werden.
/etc/nginx/sites-enabled/matrix.mismuckl.v6.rocks-V2
Dies ist die zweite Version der Konfiguration.
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name matrix.mismuckl.v6.rocks;
include includes/matrix-mismuckl.inc;
# Forward to the auth service
location ~ ^/_matrix/client/(.*)/(login|logout|refresh) {
proxy_http_version 1.1;
proxy_pass http://localhost:8080;
# OR via the Unix domain socket
#proxy_pass http://unix:/var/run/mas.sock;
# Forward the client IP address
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# or, using the PROXY protocol
#proxy_protocol on;
}
# Forward to Synapse
# as per https://element-hq.github.io/synapse/latest/reverse_proxy.html#nginx
location /_matrix {
proxy_pass http://localhost:8008;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
client_max_body_size 50M;
}
location /.well-known/matrix/server {
return 200 '{"m.server": "matrix.mismuckl.v6.rocks:443"}';
add_header Content-Type application/json;
}
location /.well-known/matrix/client {
# matrix-authentication-service wishes this change as
# our synapse does not handle well-known
# return 200 '{"m.homeserver": {"base_url": "https://matrix.mismuckl.v6.rocks"}}';
return 200 '{"m.homeserver": {"base_url": "https://matrix.mismuckl.v6.rocks"},
"org.matrix.msc2965.authentication": {"issuer": "https://auth.mismuckl.v6.rocks/",
"account": "https://auth.mismuckl.v6.rocks/account/"}}';
add_header Content-Type application/json;
add_header "Access-Control-Allow-Origin" *;
}
}
/etc/systemd/system/matrix-mas.service
Dies ist die endgültige Version der Konfiguration.
# assumes original setup in /opt/matrix-authentication-service/ and user (matrix-helper)
# for environmwnt use one of debug, info, warn, error
[Unit]
Description=MAS (Matrix OIDC Auth)
After=network.target
After=postgresql.service
[Service]
ExecReload=/bin/kill -HUP $MAINPID
Environment="RUST_LOG=info"
User=matrix-helper
Group=nogroup
WorkingDirectory=/opt/matrix-authentication-service
ExecStart=/opt/matrix-authentication-service/mas-cli server
Restart=on-failure
SyslogIdentifier=matrix-mas
[Install]
WantedBy=multi-user.target