Prosody ist ein kostenloser Open-Source-XMPP-Server, der in Lua geschrieben ist. Es ist schnell und leicht. XMPP ist ein großartiges Protokoll für Instant Messaging. Dieses Tutorial zeigt Ihnen, wie Sie den Prosody XMPP-Server unter Ubuntu 18.04 installieren und konfigurieren. Sobald Sie dieses Tutorial abgeschlossen haben, haben Sie Ihren eigenen Chat-Server.
Schritt 1:Installieren Sie Prosody auf Ubuntu 18.04
Prosody ist im Standard-Ubuntu-Repository enthalten, aber es ist sehr veraltet. Das Prosody-Team verwaltet ein Paket-Repository. Wenn Sie die neueste Version erhalten möchten, müssen Sie das Prosody-Repository mit dem folgenden Befehl hinzufügen.
echo 'deb https://packages.prosody.im/debian bionic main' | sudo tee /etc/apt/sources.list.d/prosody.list
Führen Sie dann den folgenden Befehl aus, um den öffentlichen Schlüssel von Prosody herunterzuladen und zu importieren, wodurch der APT-Paketmanager die Integrität von Paketen überprüfen kann, die aus diesem Repository heruntergeladen wurden.
wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
Aktualisieren Sie als Nächstes den lokalen Paketindex und installieren Sie die neueste Version von Prosody.
sudo apt update sudo apt install prosody
Nach der Installation wird Prosody automatisch gestartet. Sie können den Status überprüfen mit:
systemctl status prosody
Ausgabe:
● prosody.service - Prosody XMPP Server Loaded: loaded (/lib/systemd/system/prosody.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020-04-19 13:58:40 UTC; 16s ago Docs: https://prosody.im/doc Main PID: 1894 (lua5.2) Tasks: 1 (limit: 1108) CGroup: /system.slice/prosody.service └─1894 lua5.2 /usr/bin/prosody -F Apr 19 13:58:40 localhost systemd[1]: Started Prosody XMPP Server.
Wenn es nicht läuft, können Sie es mit
startensudo systemctl start prosody
Um den automatischen Start beim Systemstart zu aktivieren, führen Sie
aussudo systemctl enable prosody
Schritt 2:Ports in der Firewall öffnen
Standardmäßig lauscht es auf den TCP-Ports 5269 und 5222 der öffentlichen IP-Adresse, wie mit dem folgenden Befehl zu sehen ist. (Wenn Ihr Ubuntu nicht über den netstat-Befehl verfügt, können Sie ihn mit sudo apt install net-tools
installieren .)
sudo netstat -lnptu | grep lua
- Port 5222 wird für die Client-zu-Server-Verbindung verwendet.
- Port 5269 wird für die Server-zu-Serer-Verbindung verwendet.
Wenn Sie die UFW-Firewall auf Ubuntu aktiviert haben, müssen Sie die oben genannten Ports mit dem folgenden Befehl öffnen.
sudo ufw allow 5222,5269/tcp
Schritt 3:Prosody XMPP-Server konfigurieren
Bearbeiten Sie die Hauptkonfigurationsdatei mit einem Befehlszeilen-Texteditor wie Nano.
sudo nano /etc/prosody/prosody.cfg.lua
In module_enabled {...}
Abschnitt können Sie eine Zeile auskommentieren, um ein bestimmtes Modul zu aktivieren, oder eine Zeile auskommentieren, um ein bestimmtes Modul zu deaktivieren. Jedes Modul hat eine Beschreibung, die Ihnen sagt, was es tut. Wahrscheinlich möchten Sie das BOSH-Modul aktivieren, das für B steht idirektionale Ströme O ver S synchron H TTP. Es ermöglicht die XMPP-Kommunikation über HTTP.
Scrollen Sie als Nächstes in der Konfigurationsdatei nach unten. Wenn Sie die Kontoregistrierung vom XMPP-Client zulassen möchten, legen Sie allow_registration
fest zu wahr. Beachten Sie, dass Sie wissen müssen, wie Sie Missbrauch verhindern können, bevor Sie dies tun. Wenn Sie neu bei XMPP sind, möchten Sie wahrscheinlich nicht zulassen, dass XMPP-Clients selbst Konten registrieren.
allow_registration = true;
Prosody erlaubt nur verschlüsselte Kommunikation, was durch die folgenden zwei Zeilen angezeigt wird.
c2s_require_encryption = true s2s_require_encryption = true
Wir müssen jedoch einen virtuellen Host erstellen und ein TLS-Zertifikat installieren, damit Verbindungen verschlüsselt werden können. Standardmäßig gibt es in Prosody nur einen virtuellen Host:localhost, wie in der folgenden Zeile angegeben.
VirtualHost "localhost"
Jetzt erstellen wir einen weiteren virtuellen Host wie chat.example.com
. Fügen Sie dieser Datei die folgende Zeile hinzu.
VirtualHost "chat.example.com"
Speichern und schließen Sie die Datei. Dann müssen wir ein vertrauenswürdiges TLS-Zertifikat von Let’s Encrypt erhalten und installieren.
Schritt 4:Erhalten Sie ein vertrauenswürdiges TLS-Zertifikat von Let’s Encrypt
Führen Sie die folgenden Befehle aus, um den Let’s Encrypt-Client (certbot) auf dem Ubuntu-Server vom offiziellen PPA zu installieren.
sudo apt install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt install certbot
Wenn Sie noch keinen Webserver haben, empfehle ich Ihnen, einen zu installieren (Apache oder Nginx), da es einfacher ist, ein TLS-Zertifikat mit einem Webserver zu erhalten und zu installieren, als mit anderen Methoden.
Wenn Sie den Apache-Webserver verwenden, müssen Sie das Apache-Plugin installieren. (Der folgende Befehl installiert den Apache-Webserver, falls er noch nicht auf Ihrem System installiert ist.)
sudo apt install python3-certbot-apache
Wenn Sie den Nginx-Webserver verwenden, installieren Sie das Nginx-Plugin. (Der folgende Befehl installiert den Nginx-Webserver, falls er noch nicht auf Ihrem System installiert ist.)
sudo apt install python3-certbot-nginx
Erhalten des TLS-Zertifikats mit dem Apache-Webserver
Sie benötigen einen virtuellen Apache-Host für chat.example.com
bevor Sie das Let’s Encrypt TLS-Zertifikat erhalten. Erstellen Sie die virtuelle Hostdatei:
sudo nano /etc/apache2/sites-available/prosody.conf
Fügen Sie dann den folgenden Text in die Datei ein. Ersetzen Sie chat.example.com
mit Ihrem echten Domainnamen. Vergessen Sie nicht, dafür einen DNS-A-Eintrag festzulegen.
<VirtualHost *:80> ServerName chat.example.com DocumentRoot /var/www/prosody </VirtualHost>
Speichern und schließen Sie die Datei. Erstellen Sie dann das Webroot-Verzeichnis.
sudo mkdir /var/www/prosody
Setzen Sie www-data
(Apache-Benutzer) als Eigentümer der Webroot.
sudo chown www-data:www-data /var/www/prosody -R
Aktivieren Sie diesen virtuellen Host.
sudo a2ensite prosody.conf
Laden Sie Apache neu, damit die Änderungen wirksam werden.
sudo systemctl reload apache2
Sobald der virtuelle Host erstellt und aktiviert ist, führen Sie den folgenden Befehl aus, um das TLS-Zertifikat von Let’s Encrypt zu erhalten und zu installieren.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com
Ersetzen Sie den roten Text durch Ihre tatsächlichen Daten. Sie sollten Folgendes sehen, was bedeutet, dass das Zertifikat erfolgreich erhalten wurde. Sie können auch das Verzeichnis sehen, in dem Ihr Zertifikat gespeichert ist.
Erhalten des TLS-Zertifikats mit dem Nginx-Webserver
Sie benötigen einen virtuellen Nginx-Host für chat.example.com
bevor Sie das Let’s Encrypt TLS-Zertifikat erhalten. Erstellen Sie die virtuelle Hostdatei:
sudo nano /etc/nginx/conf.d/prosody.conf
Fügen Sie als Nächstes den folgenden Text in die Datei ein. Ersetzen Sie chat.example.com
mit Ihrem echten Domainnamen. Vergessen Sie nicht, dafür einen DNS-A-Eintrag festzulegen.
server { listen 80; listen [::]:80; server_name chat.example.com; root /var/www/prosody/; location ~ /.well-known/acme-challenge { allow all; } }
Speichern und schließen Sie die Datei. Erstellen Sie dann das Web-Root-Verzeichnis.
sudo mkdir /var/www/prosody/
Setzen Sie www-data
(Nginx-Benutzer) als Eigentümer des Webstammverzeichnisses.
sudo chown www-data:www-data /var/www/prosody -R
Laden Sie Nginx neu, damit die Änderungen wirksam werden.
sudo systemctl reload nginx
Sobald der virtuelle Host erstellt und aktiviert ist, führen Sie den folgenden Befehl aus, um das Let’s Encrypt-Zertifikat mit dem Nginx-Plugin zu erhalten und zu installieren.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com
Sie sollten Folgendes sehen, was bedeutet, dass das Zertifikat erfolgreich erhalten wurde. Sie können auch das Verzeichnis sehen, in dem Ihr Zertifikat gespeichert ist.
Schritt 5:TLS-Zertifikat in Prosody installieren
Bearbeiten Sie die Hauptkonfigurationsdatei.
sudo nano /etc/prosody/prosody.cfg.lua
Gehen Sie zu Ihrem virtuellen Prosody-Host und fügen Sie das TLS-Zertifikat und die Schlüsseldatei hinzu.
ssl = { key = "/etc/letsencrypt/live/chat.example.com/privkey.pem"; certificate = "/etc/letsencrypt/live/chat.example.com/fullchain.pem"; }
So:
Speichern und schließen Sie die Datei. Da läuft der Prosody XMPP Server als prosody
Benutzer müssen wir dem prosody-Benutzer erlauben, das TLS-Zertifikat und die Schlüsseldatei mit dem folgenden Befehl zu lesen.
sudo apt install acl sudo setfacl -R -m u:prosody:rx /etc/letsencrypt/
Schritt 6:Benutzerkonten erstellen
Ein Benutzerkonto für den Prosody XMPP-Server kann mit dem folgenden Befehl erstellt werden. Sie werden aufgefordert, ein Passwort einzugeben.
sudo prosodyctl adduser [email protected]
Um das Passwort zu ändern, führen Sie
aussudo prosodyctl passwd [email protected]
Schritt 7:Starten Sie Prosody neu
Überprüfen Sie die Syntax der Konfigurationsdatei, indem Sie Folgendes ausführen:
sudo prosodyctl check config
Wenn die Syntax korrekt ist, starten Sie Prosody neu, damit die Änderungen wirksam werden.
sudo systemctl restart prosody
Schritt 8:XMPP-Client konfigurieren
Dieses Tutorial verwendet Pidgin Instant Messenger als XMPP-Client. Empathie ist ein weiterer Client, den Sie verwenden können. Sie können auf einem Ubuntu-Desktop installiert werden, indem Sie Folgendes ausführen:
sudo apt install pidgin sudo apt install empathy
Beim ersten Start müssen Sie ein Konto in Pidgin hinzufügen. Klicken Sie auf Hinzufügen Schaltfläche.
Wählen Sie dann XMPP aus der Liste der Protokolle aus und geben Sie Ihren Benutzernamen, Ihre Domäne und Ihr Passwort ein.
Klicken Sie auf Hinzufügen klicken und Sie werden angemeldet.
BOSH einrichten
Wie wir bereits erklärt haben, ermöglicht Ihnen BOSH die Verwendung von XMPP über HTTP, d. h. in einem Webbrowser. Beispielsweise verwendet die Videokonferenzsoftware Jitsi Meet BOSH, um Prosody in Webseiten zu integrieren, damit Teilnehmer Text-Chats führen können, während sie an einer Online-Videokonferenz teilnehmen.
Wenn Sie das BOSH-Modul aktiviert haben, bearbeiten Sie die Prosody-Konfigurationsdatei (/etc/prosody/prosody.cfg.lua
) und fügen Sie die folgenden zwei Zeilen am Ende der Konfigurationsdatei hinzu.
consider_bosh_secure = true; cross_domain_bosh = true; https_ssl = { certificate = "/etc/letsencrypt/live/chat.example.com/fullchain.pem"; key = "/etc/letsencrypt/live/chat.example.com/privkey.pem"; }
Wo:
- Die erste Zeile erzwingt eine sichere HTTPS-Verbindung.
- Die zweite Zeile fügt BOSH-Antworten COR-Header hinzu, damit Anfragen von jeder Domäne kommen können.
- Der https_ssl-Parameter gibt das TLS-Zertifikat und die Schlüsseldatei für den BOSH-Dienst an.
Speichern und schließen Sie die Datei. Starten Sie dann Prosody neu.
sudo systemctl restart prosody
Wenn Sie die UFW-Firewall auf dem Ubuntu-Server aktiviert haben, müssen Sie Port 5280 und 5281 mit dem folgenden Befehl öffnen.
sudo ufw allow 5280,5281/tcp
Der BOSH-Endpunkt ist nach Abschluss dieses Tutorials unter der folgenden Adresse verfügbar. Port 5280 ist für Klartext-HTTP, Port 5281 für HTTPS.
http://chat.example.com:5280/http-bind
oder
https://chat.example.com:5281/http-bind.
Ein BOSH-Endpunkt ist eine URL, die von einem Client verwendet wird, um sich über HTTP mit dem XMPP-Server zu verbinden.
Mehrbenutzer-Chatraum
Um einen MUC (Multi-User Chat) zu aktivieren, fügen Sie die folgende Zeile in die Prosody-Konfigurationsdatei ein. Ersetzen Sie conference.example.com
mit Ihrer bevorzugten Subdomain.
Component "conference.example.com" "muc" restrict_room_creation = "admin"
Die zweite Zeile erlaubt nur dem Administrator, Räume zu erstellen. Um den Administrator für den XMPP-Server zu definieren, müssen Sie zuerst ein Konto mit sudo prosodyctl adduser
erstellen Befehl wie oben gezeigt. Fügen Sie dann in der Konfigurationsdatei das Konto in admin {...}
hinzu Abschnitt wie unten.
admins = { "[email protected]", "[email protected]" }
Überprüfen Sie die Syntax der Konfigurationsdatei, indem Sie Folgendes ausführen:
sudo prosodyctl check config
Wenn die Syntax korrekt ist, starten Sie Prosody neu, damit die Änderungen wirksam werden.
sudo systemctl restart prosody
Fehlerbehebung
Die Hauptprotokolldatei für Prosody ist /var/log/prosody/prosody.log
. Es gibt auch ein Fehlerprotokoll /var/log/prosody/prosody.err
. Wenn Prosody nicht wie erwartet funktioniert, ist das Fehlerprotokoll ein guter Ort, um es zu überprüfen.
Automatische Verlängerung des TLS-Zertifikats
Sie können einen Cron-Job erstellen, um das TLS-Zertifikat automatisch zu erneuern. Öffnen Sie die Crontab-Datei des Root-Benutzers.
sudo crontab -e
Wenn Sie den Apache-Webserver verwenden, fügen Sie die folgende Zeile am Ende der Datei hinzu.
@daily certbot renew --quiet && systemctl reload prosody apache2
Wenn Sie den Nginx-Webserver verwenden, fügen Sie die folgende Zeile hinzu.
@daily certbot renew --quiet && systemctl reload prosody nginx
Das Neuladen von Prosody und dem Webserver ist notwendig, damit diese Programme das neue Zertifikat und den privaten Schlüssel abrufen.