Matrix-Chat: Verschluesselter Messenger¶
Uebersicht¶
Die FEGH-Dokumentation App enthaelt einen integrierten, Ende-zu-Ende verschluesselten Messenger basierend auf dem Matrix-Protokoll. Der Chat laeuft ueber einen eigenen Server und ist vollstaendig DSGVO-konform.
Architektur¶
| Komponente | Technologie | Standort |
|---|---|---|
| Server | Conduit (Matrix-Server in Rust) | Eigener STRATO-Server, Deutschland |
| Protokoll | Matrix (offener Standard) | Dezentral, foederierbar |
| Verschluesselung | Megolm (E2E, wie Signal/Threema) | Client-seitig, Server sieht nur Ciphertext |
| Client | matrix SDK v6.2.0 (Flutter) | In die App integriert |
| SSL | Let's Encrypt (automatische Erneuerung) | TLS 1.2+ |
| Domain | DEINE-DOMAIN.de | A-Record auf Server-IP |
Server-Infrastruktur¶
Hardware (Empfehlung)¶
| Eigenschaft | Mindestanforderung |
|---|---|
| OS | Debian 12 oder Ubuntu 22.04+ |
| CPU | 2 Kerne |
| RAM | 2 GB (empfohlen: 4 GB) |
| Speicher | 10 GB frei |
| Standort | Rechenzentrum Deutschland (DSGVO) |
Software-Stack¶
| Dienst | Zweck | Status |
|---|---|---|
| Conduit | Matrix-Homeserver (Docker) | Aktiv, Port 6167 intern |
| Nginx | Reverse Proxy, SSL-Termination | Aktiv, Port 80/443 |
| Let's Encrypt | SSL-Zertifikat (auto-renew) | Automatische Erneuerung |
| UFW | Firewall (nur 22, 80, 443 offen) | Aktiv |
| fail2ban | Brute-Force-Schutz (SSH) | Aktiv, 3 Versuche, 1h Ban |
| unattended-upgrades | Automatische Sicherheitsupdates | Aktiv |
Sicherheitsmassnahmen¶
| Massnahme | Umsetzung |
|---|---|
| Firewall | UFW: nur SSH (22), HTTP (80), HTTPS (443) offen |
| SSH-Haertung | Nur Public-Key-Auth, kein Passwort-Login |
| Brute-Force-Schutz | fail2ban: 3 fehlgeschlagene Versuche → 1 Stunde IP-Sperre |
| Registrierung geschlossen | allow_registration = false -- neue User nur durch Admin |
| SSL/TLS | Let's Encrypt mit automatischer Erneuerung |
| Auto-Updates | Debian unattended-upgrades fuer Sicherheitspatches |
| Backup | Taeglich um 02:00 Uhr, 30 Tage Aufbewahrung |
| Federation deaktiviert | Kein Austausch mit externen Matrix-Servern |
Verschluesselung¶
Ende-zu-Ende (Megolm)¶
Alle Chat-Raeume werden mit E2E-Verschluesselung erstellt:
- Algorithmus:
m.megolm.v1.aes-sha2(identisch mit Signal-Protokoll-Basis) - Schluesselaustausch: Olm (Double-Ratchet)
- Der Server sieht nur verschluesselte Nachrichten -- selbst der Server-Admin kann Inhalte nicht lesen
- Schluessel liegen nur auf den Endgeraeten der Teilnehmer
Was der Server sieht (Metadaten)¶
| Sichtbar | Nicht sichtbar |
|---|---|
| Wer mit wem kommuniziert | Nachrichteninhalte |
| Zeitpunkt der Nachricht | Dateiinhalte |
| Raum-Mitgliedschaften | Verschluesselungsschluessel |
Da der Server im eigenen Besitz ist, sind die Metadaten unter eigener Kontrolle und verlassen nicht die Organisation.
Vergleich mit gaengigen Messengern¶
| Eigenschaft | FEGH-Chat | Threema | Signal | |
|---|---|---|---|---|
| E2E-Verschluesselung | Ja | Ja | Ja | Ja |
| Eigener Server | Ja | Nein | Nein | Nein |
| Open Source | Ja | Teilweise | Ja | Nein |
| Server in DE | Ja (eigener) | Schweiz | USA | USA |
| Kein Drittanbieter | Ja | Nein | Nein | Nein |
| DSGVO (eigene Kontrolle) | Ja | Teilweise | Nein | Nein |
| Metadaten unter eigener Kontrolle | Ja | Nein | Nein | Nein |
DSGVO-Konformitaet¶
Rechtsgrundlage¶
- Art. 6 Abs. 1f DSGVO: Berechtigtes Interesse an sicherer interner Kommunikation
- Art. 32 DSGVO: Angemessene technische Massnahmen (E2E, eigener Server, Firewall)
Konformitaets-Checkliste¶
| Anforderung | Status | Details |
|---|---|---|
| E2E-Verschluesselung | Erfuellt | Megolm (AES-256, Olm Double-Ratchet) |
| Datenstandort Deutschland | Erfuellt | STRATO-Server, deutsches Rechenzentrum |
| Kein Drittanbieter | Erfuellt | Eigener Server, keine AVV noetig |
| Zugriffskontrolle | Erfuellt | Registrierung geschlossen, nur Admin-Einladung |
| Transportverschluesselung | Erfuellt | TLS 1.2+ mit Let's Encrypt |
| Datensparsamkeit | Erfuellt | Nur notwendige Metadaten, Inhalte E2E-verschluesselt |
| Loeschkonzept | Erfuellt | Cleanup-Cronjob, Admin kann Raeume/User loeschen |
| Backup | Erfuellt | Taeglich verschluesselt, 30 Tage Aufbewahrung |
| Protokollierung | Erfuellt | Nginx Access-Log (365 Tage), fail2ban-Log |
| Server-Sicherheit | Erfuellt | Firewall, fail2ban, SSH-Key-Only, Auto-Updates |
Organisatorische Pflichten¶
- Verarbeitungsverzeichnis ergaenzen: Matrix-Chat als Kommunikationsmittel auffuehren
- Datenschutzerklaerung fuer Mitarbeiter: Information ueber Chat-Nutzung
- Zugang entziehen: Bei Ausscheiden Mitarbeiter vom Server loeschen
App-Integration¶
Chat-Zugang¶
Der Chat ist in der App unter dem Nachrichten-Tab (Index 5) erreichbar.
Login¶
Beim ersten Zugriff melden sich Nutzer mit Matrix-Credentials an: - Benutzername: Vom Admin vergeben - Passwort: Vom Admin vergeben - Server: Wird vom Admin konfiguriert
Features¶
| Feature | Status |
|---|---|
| 1:1 Chats (verschluesselt) | Verfuegbar |
| Gruppen-Chats (Team-Raeume) | Verfuegbar |
| Ungelesen-Anzeige | Verfuegbar |
| Verschluesselungs-Indikator | Verfuegbar |
| Mitglieder-Ansicht | Verfuegbar |
| Nachrichten-Verlauf | Verfuegbar |
| User einladen | Verfuegbar |
| Video Calls | Geplant (WebRTC/LiveKit) |
| Datei-Versand | Geplant |
| Sprachnachrichten | Geplant |
Neuen User anlegen¶
Da die Registrierung geschlossen ist, muss der Admin neue User anlegen. Dies geschieht aktuell ueber die Server-Kommandozeile:
curl -s -X POST http://localhost:6167/_matrix/client/v3/register \
-H 'Content-Type: application/json' \
-d '{"username":"neuer_user","password":"SicheresPasswort123","auth":{"type":"m.login.dummy"}}'
Zukuenftig wird die User-Erstellung in den Admin-Bereich der App integriert.
Backup und Wartung¶
Automatisches Backup¶
- Zeitplan: Taeglich um 02:00 Uhr
- Speicherort:
/var/backups/conduit/ - Aufbewahrung: 30 Tage
- Inhalt: Conduit-Datenbank + Konfiguration (komprimiert)
SSL-Zertifikat¶
- Let's Encrypt Zertifikat erneuert sich automatisch (certbot Timer)
- Aktuelles Zertifikat gueltig bis: 08.07.2026
Server-Monitoring¶
Regelmaessig pruefen:
# Conduit laeuft?
docker ps
# Festplatte
df -h /
# fail2ban Status
fail2ban-client status sshd
# SSL-Zertifikat
certbot certificates
# Backup vorhanden?
ls -lh /var/backups/conduit/