Prosody est un serveur XMPP open-source gratuit écrit en Lua. C'est rapide et léger. XMPP est un excellent protocole de messagerie instantanée. Ce tutoriel va vous montrer comment installer et configurer le serveur Prosody XMPP sur Ubuntu 18.04. Une fois ce tutoriel terminé, vous disposerez de votre propre serveur de chat.
Étape 1 :Installez Prosody sur Ubuntu 18.04
Prosody est inclus dans le référentiel Ubuntu par défaut, mais il est très obsolète. L'équipe Prosody maintient un référentiel de packages. Si vous souhaitez obtenir la dernière version, vous devez ajouter le référentiel Prosody avec la commande suivante.
echo 'deb https://packages.prosody.im/debian bionic main' | sudo tee /etc/apt/sources.list.d/prosody.list
Exécutez ensuite la commande suivante pour télécharger et importer la clé publique Prosody, ce qui permet au gestionnaire de packages APT de vérifier l'intégrité des packages téléchargés à partir de ce référentiel.
wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key ajouter -
Ensuite, mettez à jour l'index des packages locaux et installez la dernière version de Prosody.
sudo apt met à jourudo apt install prosody
Une fois installé, Prosody démarrera automatiquement. Vous pouvez vérifier son statut avec :
prosodie d'état systemctl
Sortie :
● prosody.service - Serveur Prosody XMPP chargé :chargé (/lib/systemd/system/prosody.service ; activé ; préréglage fournisseur :activé) Actif :actif (en cours d'exécution) depuis le dim 2020-04-19 13:58 :40 UTC ; Il y a 16 s Docs :https://prosody.im/doc PID principal :1894 (lua5.2) Tâches :1 (limite :1108) CGroup :/system.slice/prosody.service └─1894 lua5.2 /usr/bin /prosody -FApr 19 13:58:40 localhost systemd[1] :Démarrage du serveur Prosody XMPP.
S'il ne fonctionne pas, vous pouvez le démarrer avec
sudo systemctl démarrer la prosodie
Pour activer le démarrage automatique au démarrage du système, exécutez
sudo systemctl activer la prosodie
Étape 2 :Ouvrir des ports dans le pare-feu
Par défaut, il écoute sur les ports TCP 5269 et 5222 de l'adresse IP publique, comme on peut le voir avec la commande suivante. (Si votre Ubuntu n'a pas la commande netstat, vous pouvez l'installer avec sudo apt install net-tools
.)
sudo netstat -lnptu | grep lua
- Le port 5222 est utilisé pour la connexion client-serveur.
- Le port 5269 est utilisé pour la connexion de serveur à sereur.
Si vous avez activé le pare-feu UFW sur Ubuntu, vous devez ouvrir les ports ci-dessus avec la commande suivante.
sudo ufw autorise 5222,5269/tcp
Étape 3 :Configurer le serveur Prosody XMPP
Modifiez le fichier de configuration principal avec un éditeur de texte en ligne de commande tel que Nano.
sudo nano /etc/prosody/prosody.cfg.lua
Dans module_enabled {...}
section, vous pouvez décommenter une ligne pour activer un module spécifique, ou commenter une ligne pour désactiver un module spécifique. Chaque module a une description vous indiquant ce qu'il fait. Vous souhaitez probablement activer le module BOSH, qui signifie B flux-idirectionnels O ver S H synchrone PTT. Il permet la communication XMPP via HTTP.
Ensuite, faites défiler vers le bas dans le fichier de configuration. Si vous souhaitez autoriser l'enregistrement de compte à partir du client XMPP, définissez allow_registration
à vrai. Notez que vous devez savoir comment prévenir les abus avant de le faire. Si vous débutez avec XMPP, vous ne souhaitez probablement pas autoriser les clients XMPP à créer eux-mêmes des comptes.
allow_registration =vrai ;
La prosodie n'autorise que la communication cryptée, indiquée par les deux lignes suivantes.
c2s_require_encryption =trues2s_require_encryption =true
Cependant, nous devons créer un hôte virtuel et installer un certificat TLS, afin que les connexions puissent être chiffrées. Par défaut, il n'y a qu'un seul hôte virtuel dans Prosody :localhost, comme indiqué par la ligne suivante.
Hôte virtuel "localhost"
Maintenant, nous créons un autre hôte virtuel comme chat.example.com
. Ajoutez la ligne suivante dans ce fichier.
Hôte virtuel "chat.example.com"
Enregistrez et fermez le fichier. Ensuite, nous devons obtenir et installer un certificat TLS de confiance de Let's Encrypt.
Étape 4 :Obtenir un certificat TLS de confiance auprès de Let's Encrypt
Exécutez les commandes suivantes pour installer le client Let's Encrypt (certbot) sur le serveur Ubuntu à partir du PPA officiel.
sudo apt install software-properties-commonsudo add-apt-repository ppa:certbot/certbotsudo apt install certbot
Si vous n'avez pas encore de serveur Web en cours d'exécution, je vous recommande d'en installer un (Apache ou Nginx), car il est plus facile d'obtenir et d'installer un certificat TLS avec un serveur Web qu'en utilisant d'autres méthodes.
Si vous utilisez le serveur Web Apache, vous devez installer le plugin Apache. (La commande suivante installera le serveur Web Apache s'il n'est pas déjà installé sur votre système.)
sudo apt installer python3-certbot-apache
Si vous utilisez le serveur Web Nginx, installez le plugin Nginx. (La commande suivante installera le serveur Web Nginx s'il n'est pas déjà installé sur votre système.)
sudo apt installer python3-certbot-nginx
Obtenir un certificat TLS avec le serveur Web Apache
Vous devez avoir un hôte virtuel Apache pour chat.example.com
avant d'obtenir le certificat Let's Encrypt TLS. Créez le fichier d'hôte virtuel :
sudo nano /etc/apache2/sites-available/prosody.conf
Collez ensuite le texte suivant dans le fichier. Remplacez chat.example.com
avec votre vrai nom de domaine. N'oubliez pas de définir un enregistrement DNS A pour cela.
ServerName chat.example.com DocumentRoot /var/www/prosody
Enregistrez et fermez le fichier. Créez ensuite le répertoire webroot.
sudo mkdir /var/www/prosody
Définir www-data
(utilisateur Apache) en tant que propriétaire de la racine Web.
sudo chown www-data:www-data /var/www/prosody -R
Activez cet hôte virtuel.
sudo a2ensite prosody.conf
Rechargez Apache pour que les modifications prennent effet.
sudo systemctl recharger apache2
Une fois l'hôte virtuel créé et activé, exécutez la commande suivante pour obtenir et installer le certificat Let's Encrypt TLS.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com
Remplacez le texte rouge par vos données réelles. Vous devriez voir ce qui suit, ce qui signifie que le certificat a été obtenu avec succès. Vous pouvez également voir le répertoire dans lequel votre certificat est stocké.
Obtenir un certificat TLS avec le serveur Web Nginx
Vous devez avoir un hôte virtuel Nginx pour chat.example.com
avant d'obtenir le certificat Let's Encrypt TLS. Créez le fichier d'hôte virtuel :
sudo nano /etc/nginx/conf.d/prosody.conf
Ensuite, collez le texte suivant dans le fichier. Remplacez chat.example.com
avec votre vrai nom de domaine. N'oubliez pas de définir un enregistrement DNS A pour cela.
serveur { écoute 80 ; écouter [::]:80 ; nom_serveur chat.exemple.com ; racine /var/www/prosody/ ; location ~ /.well-known/acme-challenge { tout autoriser ; }}
Enregistrez et fermez le fichier. Créez ensuite le répertoire racine Web.
sudo mkdir /var/www/prosody/
Définir www-data
(utilisateur Nginx) en tant que propriétaire de la racine Web.
sudo chown www-data:www-data /var/www/prosody -R
Rechargez Nginx pour que les modifications prennent effet.
sudo systemctl recharger nginx
Une fois l'hôte virtuel créé et activé, exécutez la commande suivante pour obtenir et installer le certificat Let's Encrypt avec le plugin Nginx.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com
Vous devriez voir ce qui suit, ce qui signifie que le certificat a été obtenu avec succès. Vous pouvez également voir le répertoire dans lequel votre certificat est stocké.
Étape 5 :Installer le certificat TLS dans Prosody
Modifiez le fichier de configuration principal.
sudo nano /etc/prosody/prosody.cfg.lua
Accédez à votre hôte virtuel Prosody et ajoutez le certificat TLS et le fichier de clé.
ssl ={ key ="/etc/letsencrypt/live/chat.example.com/privkey.pem" ; certificat ="/etc/letsencrypt/live/chat.example.com/fullchain.pem";}
Comme ceci :
Enregistrez et fermez le fichier. Puisque le serveur Prosody XMPP s'exécute en tant que prosody
utilisateur, nous devons autoriser l'utilisateur de la prosodie à lire le certificat TLS et le fichier de clé avec la commande suivante.
sudo apt install aclsudo setfacl -R -m u:prosody:rx /etc/letsencrypt/
Étape 6 :Créer des comptes utilisateur
Un compte utilisateur pour le serveur Prosody XMPP peut être créé à l'aide de la commande suivante. Vous serez invité à saisir un mot de passe.
sudo prosodyctl adduser [email protected]
Pour changer de mot de passe, exécutez
sudo prosodyctl passwd [email protected]
Étape 7 :Redémarrez Prosody
Vérifiez la syntaxe du fichier de configuration en exécutant :
sudo prosodyctl check config
Si la syntaxe est correcte, redémarrez Prosody pour que les modifications prennent effet.
sudo systemctl redémarrer la prosodie
Étape 8 :Configurer le client XMPP
Ce didacticiel utilise la messagerie instantanée Pidgin comme client XMPP. L'empathie est un autre client que vous pouvez utiliser. Ils peuvent être installés sur un bureau Ubuntu en exécutant :
sudo apt install pidginsudo apt install empathie
Lors du premier lancement, vous devrez ajouter un compte dans Pidgin. Cliquez sur Ajouter bouton.
Sélectionnez ensuite XMPP dans la liste des protocoles et entrez votre nom d'utilisateur, votre domaine et votre mot de passe.
Cliquez sur Ajouter bouton et vous serez connecté.
Configurer BOSH
Comme nous l'avons expliqué précédemment, BOSH vous permet d'utiliser XMPP sur HTTP, c'est-à-dire dans un navigateur Web. Par exemple, le logiciel de visioconférence Jitsi Meet utilise BOSH pour intégrer Prosody dans les pages Web, afin que les participants puissent discuter par SMS tout en rejoignant une visioconférence en ligne.
Si vous avez activé le module BOSH, alors éditez le fichier de configuration de Prosody (/etc/prosody/prosody.cfg.lua
) et ajoutez les deux lignes suivantes à la fin du fichier de configuration.
consider_bosh_secure =true;cross_domain_bosh =true;https_ssl ={ certificate ="/etc/letsencrypt/live/chat.example.com/fullchain.pem" ; clé ="/etc/letsencrypt/live/chat.example.com/privkey.pem" ; }Où :
- La première ligne applique une connexion HTTPS sécurisée.
- La deuxième ligne ajoute des en-têtes COR aux réponses BOSH pour permettre aux requêtes de provenir de n'importe quel domaine.
- Le paramètre https_ssl spécifie le certificat TLS et le fichier de clé pour le service BOSH.
Enregistrez et fermez le fichier. Redémarrez ensuite Prosody.
sudo systemctl redémarrer la prosodie
Si vous avez activé le pare-feu UFW sur le serveur Ubuntu, vous devez ouvrir les ports 5280 et 5281 avec la commande suivante.
sudo ufw autorise 5280,5281/tcp
Le point de terminaison BOSH sera disponible à l'adresse suivante une fois que vous aurez terminé ce didacticiel. port 5280 est pour le texte brut HTTP, port 5281 pour HTTPS.
http://chat.example.com:5280/http-bind
ou
https://chat.example.com:5281/http-bind.
Un point de terminaison BOSH est une URL utilisée par un client pour se connecter au serveur XMPP via HTTP.
Salle de discussion multi-utilisateurs
Pour activer un MUC (Multi-User Chat), ajoutez la ligne suivante dans le fichier de configuration de Prosody. Remplacez conference.example.com
avec votre sous-domaine préféré.
Composant "conference.example.com" "muc" restrict_room_creation ="admin"
La deuxième ligne permettra uniquement à l'administrateur de créer des salles. Pour définir l'administrateur du serveur XMPP, vous devez d'abord créer un compte en utilisant le sudo prosodyctl adduser
commande comme indiqué ci-dessus. Puis dans le fichier de configuration, ajoutez le compte dans admin {...}
section comme ci-dessous.
admins ={ "[email protected]", "[email protected]" }
Vérifiez la syntaxe du fichier de configuration en exécutant :
sudo prosodyctl check config
Si la syntaxe est correcte, redémarrez Prosody pour que les modifications prennent effet.
sudo systemctl redémarrer la prosodie
Dépannage
Le fichier journal principal pour Prosody est /var/log/prosody/prosody.log
. Il existe également un journal des erreurs /var/log/prosody/prosody.err
. Si Prosody ne fonctionne pas comme prévu, le journal des erreurs est un bon endroit pour vérifier.
Certificat TLS à renouvellement automatique
Vous pouvez créer une tâche Cron pour renouveler automatiquement le certificat TLS. Ouvrez le fichier crontab de l'utilisateur root.
sudo crontab -e
Si vous utilisez le serveur Web Apache, ajoutez la ligne suivante au bas du fichier.
@daily certbot renouveler --quiet &&systemctl recharger prosody apache2
Si vous utilisez le serveur Web Nginx, ajoutez la ligne suivante.
@daily certbot renouveler --quiet &&systemctl recharger la prosodie nginx
Le rechargement de Prosody et du serveur Web est nécessaire pour que ces programmes récupèrent le nouveau certificat et la clé privée.