Prosody
Prosody ist ein moderner Kommunikations-Server für das XMPP Protokoll. Sein Ziel ist es, einfach zu installieren, einfach zu konfigurieren und sparsam im Umgang mit Systemressourcen zu sein. Außerdem ist er einfach zu erweitern.
Prosody ist Open-Source Software unter der freizügigen MIT/X11 Lizenz.
Im Folgenden ist die Installation von Prosody auf einem Raspberry Pi (Raspbian Jessie) beschrieben.
Vorbereitungen
System aktualisieren
Vor der Installation eines neuen Paketes ist es immer sinnvoll, die Paket-Quellen zu aktualisieren und installierte Pakete auf den neuesten Stand zu bringen.
sudo apt-get update && sudo apt-get upgrade -y
Router bzw. Firewall konfigurieren
Soll die Prosody-Installation aus dem Internet erreichbar sein, muss natürlich die Firewall bzw. der Router entsprechend konfiguriert werden. Stichwort Port-Forwarding oder NAT. Da das Vorgehen hierfür für jedes Gerät unterschiedlich ist, kann hier keine Anleitung dazu gegeben werden.
Prosody hört in der Standardeinstellung auf Port 5222. Dieser muss an die IP-Adresse des Raspberry Pi weitergeleitet werden.
Installation
Repository hinzufügen
Damit der Paket-Manager die Prosody-Installationsdateien findet, muss ihm das Repository zuerst bekannt gemacht werden. Dazu wird im Ordner /etc/apt/sources.list.d eine neue Datei angelegt und die URL zur Quelle darin hinterlegt.
Die entsprechende Zeile würde wie folgt aussehen:
deb http://packages.prosody.im/debian VERSION main
VERSION muss dann durch die jeweilige Version des Betriebssystems ersetzt werden. Welche Version man betreibt, kann man mit lsb_release -sc
herausfinden.
Somit sieht der endgültige Befehl zum Erzeugen der neuen Paket-Quell-Datei so aus:
echo deb http://packages.prosody.im/debian $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/prosody.list
Repository Key File hinzufügen
Um zu verhindern, dass bei der Installation Warnungen bezüglich nicht authorisierter Pakete ausgegeben werden, muss noch ein Sicherheitsschlüssel importiert werden.
wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
Paketquellen aktualisieren
Anschließend muss man nochmal die Paketquellen aktualisieren
sudo apt-get update
Prosody installieren
Dann kann Prosody ganz einfach mittels diesem Befehl installiert werden
sudo apt-get install prosody -y
Konfiguration
Die Konfiguration von Prosody besteht aus einer einzigen Datei /etc/prosody/prosody.cfg.lua. Diese ist in zwei Abschnitte unterteilt.
Der erste Abschnitt behandelt Einstellungen, die global, also für den ganzen Server, gelten. Sie sind auch die Standard-Einstellungen für jeden Host.
Der zweite besteht aus VirtualHost- und Component-Definitionen, die nur für den jeweiligen virtuellen Host gelten. So können auf einer Prosody-Installation mehrere verschiedene Instanzen laufen.
Um's einfach zu halten, konzentrieren wir uns auf eine Instanz.
Um zu einem schnellen Ergebnis zu gelangen, ist es nur nötig, ein SSL-Zertifikat zu erzeugen und einen Host sowie einen User zu definieren. Danach können schon Nachrichten versendet werden. Wer möchte, kann zusätzlich noch einen Chatroom (Multi-User Conference) einrichten.
Host hinzufügen
Ein Host in Prosody ist eine Domain, unter der User angelegt werden. Soll ein Prosody-User also die Adresse franz.hubert@beispiel.eu haben, muss der Virtual Host beispiel.eu angelegt werden. Dies geschieht durch eine neue Zeile in der Konfigurationsdatei im Abschnitt Virtual Hosts.
VirtualHost "beispiel.eu"
Alle weiteren Konfigurationseinträge unter dieser Zeile betreffen dann nur den jeweiligen Host.
Nach Änderungen in der Konfigurationsdatei muss Prosody immer neu gestartet werden. Dies wird durch nachfolgenden Befehl erledigt
sudo service prosody restart
SSL Zertifikat generieren
Prosody bietet den Möglichkeit, den die Nachrichten zwischen Client und Server zu verschlüsseln. Dazu muss zuerst ein SSL Zertifikat erstellt werden. Prosody bietet mit seinem Verwaltungstool prosodyctl einen einfachen Weg, wie solche Zertifikate erstellt werden können.
sudo prosodyctl cert generate beispiel.eu
Dabei werden einige Fragen gestellt, von denen aber eigentlich nur die Schlüssellänge und der CommonName befüllt werden müssen. Sind die vorgeschlagenen Werte in Klammer in Ordnung, können diese einfach durch Betätigen der ENTER-Taste übernommen werden. Soll ein Feld nicht im Zertifikat aufscheinen, wird einfach ein . eingegeben.
Hier ein Beispiel wie so ein Vorgang aussieht:
$ sudo prosodyctl cert generate beispiel.eu
Choose key size (2048):
Generating RSA private key, 2048 bit long modulus
........................................................+++
..............+++
e is 65537 (0x10001)
Key written to /var/lib/prosody/beispiel.eu.key
Please provide details to include in the certificate config file.
Leave the field empty to use the default value or '.' to exclude the field.
countryName (EU): .
localityName (The Internet): .
organizationName (Your Organisation): .
organizationalUnitName (XMPP Department): .
commonName (beispiel.eu):
emailAddress (xmpp@beispiel.eu): .
Config written to /var/lib/prosody/beispiel.eu.cnf
Certificate written to /var/lib/prosody/beispiel.eu.crt
Daraufhin erhält man zwei neue Dateien:
- /var/lib/prosody/beispiel.eu.key
- /var/lib/prosody/beispiel.eu.crt
Diese müssen in die Konfigurations-Datei /etc/prosody/prosody.cfg.lua im Abschnitt des jeweiligen VirtualHosts eingetragen werden.
sudo nano /etc/prosody/prosody.cfg.lua
VirtualHost "beispiel.eu"
-- Assign this host a certificate for TLS, otherwise it would use the one
-- set in the global section (if any).
-- Note that old-style SSL on port 5223 only supports one certificate, and will always
-- use the global one.
ssl = {
key = "/var/lib/prosody/beispiel.eu.key";
certificate = "/var/lib/prosody/beispiel.eu.crt";
}
Ein Hinweis: Dieses Zertifikat ist selbst-signiert und wird somit von Clients als nicht vertrauenswürdig eingestuft. Es wird daher eine Fehlermeldung geben, die aber ignoriert werden kann. Wir vertrauen dem Zertifikat ja. Wer diese Warnung umgehen möchte, muss vertrauenswürdige Zertifikate verwenden. Solche können z.B. mit Certbot erstellt werden.
Wie immer muss nach Änderungen an der Konfigurationsdatei Prosody neu gestartet werden. Ein zweiter Weg, wie man das machen könnte:
sudo prosodyctl restart
Benutzer hinzufügen
Prosody bietet drei Möglichkeiten, wie neue Benutzer erstellt werden können.
- Vom Benutzer angestossene Registrierung
- Import von ejabbered
- Verwendung des Tools prosodyctl
Hier wird nur der Weg über prosodyctl beschrieben.
Das Anlegen eines neuen Benutzers ist denkbar einfach:
sudo prosodyctl adduser franz.hubert@beispiel.eu
Nach Absenden dieses Befehls wird nach einem Passwort für den Benutzer gefragt. Ist dieses vergeben, kann sich der Benutzer bereits am Server anmelden.
Multi-User Conference
Um einen Chatroom einzurichten, ist nur die Aktivierung einer der vielen in Prosody eingebauten Komponenten nötig. In diesem Fall die der Komponente MUC (Multi-User Conference).
Das geschieht ganz einfach durch das Hinzufügen dieses Eintrages an das Ende der Konfigurationsdatei:
Component "conference.beispiel.eu" "muc"
Nach einem erneuten Neustart des Prosody-Services können dann Chat-Räume angelegt werden in dem man mit dem Client einfach einem Raum beitritt. Man wird dann automatisch zum Administrator dieses Raumes.