Was ist XMPP?

XMPP (Extensible Messaging and Presence Protocol) ist ein offenes, dezentrales Kommunikationsprotokoll. Im Gegensatz zu WhatsApp, Signal oder Telegram betreibst du deinen eigenen Server und behältst die volle Kontrolle über deine Daten. XMPP nutzt eine föderierte Architektur – ähnlich wie E-Mail –, sodass Nutzer verschiedener Server problemlos miteinander kommunizieren können.

Was ist OMEMO?

OMEMO ist eine Ende-zu-Ende-Verschlüsselung für XMPP, die auf dem Signal-Protokoll (Double Ratchet) basiert. Im Unterschied zu OTR unterstützt OMEMO mehrere Geräte gleichzeitig und verschlüsselt auch Dateien. Der Server sieht dabei nur verschlüsselte Daten – selbst als Admin kannst du keine Nachrichten mitlesen.

Prosody installieren

Wir verwenden Prosody als XMPP-Server. Auf Debian oder Ubuntu installierst du zuerst das offizielle Repository:

sudo apt install apt-transport-https
echo "deb https://packages.prosody.im/debian $(lsb_release -cs) main" | \
  sudo tee /etc/apt/sources.list.d/prosody.list
curl -fsSL https://prosody.im/files/prosody-debian-packages.key | \
  sudo tee /etc/apt/trusted.gpg.d/prosody.asc
sudo apt update
sudo apt install prosody prosody-modules

TLS-Zertifikate einrichten

sudo apt install certbot
sudo certbot certonly --standalone -d xmpp.example.com \
  -d conference.xmpp.example.com \
  -d upload.xmpp.example.com
sudo prosodyctl --root cert import /etc/letsencrypt/live/

PEP und PubSub für OMEMO aktivieren

Öffne die Hauptkonfiguration unter /etc/prosody/prosody.cfg.lua:

modules_enabled = {
    -- Core
    "roster";
    "saslauth";
    "tls";
    "dialback";
    "disco";

    -- OMEMO-relevante Module
    "pep";
    "pep_simple";
    "pubsub";

    -- Nützliche Erweiterungen
    "carbons";        -- Nachrichten an alle Geräte
    "mam";            -- Nachrichtenarchiv
    "smacks";         -- Stream Management
    "csi_simple";     -- Client State Indication
    "cloud_notify";   -- Push-Benachrichtigungen
    "http_upload";    -- Datei-Upload
    "blocklist";
    "bookmarks";
    "vcard_legacy";
}

Wichtig: Das Modul pep ist zwingend erforderlich. Ohne PEP kann kein Client seine OMEMO-Schlüssel veröffentlichen, und die Verschlüsselung schlägt fehl.

HTTP File Upload für verschlüsselte Medien

Component "upload.xmpp.example.com" "http_upload"
    http_upload_file_size_limit = 104857600  -- 100 MB
    http_upload_expire_after = 60 * 60 * 24 * 30  -- 30 Tage
    http_upload_quota = 1073741824  -- 1 GB pro Nutzer
    http_external_url = "https://upload.xmpp.example.com/"
server {
    listen 443 ssl http2;
    server_name upload.xmpp.example.com;
    location / {
        proxy_pass http://127.0.0.1:5281/upload/;
        proxy_set_header Host $host;
        client_max_body_size 105m;
    }
}

MAM (Message Archive Management) konfigurieren

archive_expires_after = "4w"
default_archive_policy = true

VirtualHost "xmpp.example.com"
    ssl = {
        key = "/etc/prosody/certs/xmpp.example.com.key";
        certificate = "/etc/prosody/certs/xmpp.example.com.crt";
    }

Component "conference.xmpp.example.com" "muc"
    modules_enabled = { "muc_mam"; }
    muc_log_by_default = true
    muc_log_expires_after = "4w"

Benutzer anlegen und Server starten

sudo prosodyctl register alice xmpp.example.com sicheres-passwort
sudo prosodyctl register bob xmpp.example.com anderes-passwort
sudo systemctl enable --now prosody
sudo prosodyctl status

Empfohlene Clients

Fehlerbehebung und häufige Probleme

OMEMO wird im Client nicht angeboten

Stelle sicher, dass mod_pep geladen ist. Prüfe die Logs unter /var/log/prosody/prosody.log.

Datei-Upload schlägt fehl

curl -I https://upload.xmpp.example.com/

Häufige Ursachen: Fehlende CORS-Header, falscher http_external_url, oder die Firewall blockiert Port 5281.

Verbindungsprobleme mit anderen Servern

_xmpp-client._tcp.xmpp.example.com. 3600 IN SRV 0 5 5222 xmpp.example.com.
_xmpp-server._tcp.xmpp.example.com. 3600 IN SRV 0 5 5269 xmpp.example.com.

Tipp: Führe regelmäßig sudo apt update && sudo apt upgrade prosody prosody-modules aus. Sicherheitslücken in XMPP-Servern werden schnell ausgenutzt.

Wer selbst einen XMPP-Account will: xmpp.voidcall.dev