Prosody : un serveur XMPP à découvrir...

Vous avez un didactiel ou une astuce particulière concernant un logiciel, partagez votre expérience dans cette partie.

Prosody : un serveur XMPP à découvrir...

Messagede le Manchot Masqué » Mer 21 Fév 2018, 02:47

Je n'aborde pas ici l'installation et le maniement du client XMPP Pidgin que beaucoup connaissent déjà, cette partie étant plutôt réservé aux administrateurs qui veulent installer rapidement un serveur XMPP léger mais déjà complet...
Sinon il y a ejabberd, plus complet encore que prosody, mais plus difficile à configurer et à manipuler.

La partie qui suit est donc un récapitulatif de test en machine virtuelle, pour configurer et appréhender rapidement l'outil.

Ports réseaux à ouvrir :
TCP 5222 pour les communications clients/serveur
TCP 5269 pour les communications serveur/serveur

On créé un hôte virtuel sur l'IP du réseau dans /etc/hosts :
Code: Select All Code
192.168.0.XXX   toto.lan toto


Téléchargement et installation de l'outil :
Soit l'outil est déjà disponible sur votre distribution, soit il faut aller le rechercher comme suit.
Code: Select All Code
# wget https://prosody.im/files/prosody-debian-packages.key -O- | apt-key add -
# apt-get update && apt-get dist-upgrade
# apt-get install prosody


Configuration
Code: Select All Code
cd /etc/prosody

Dans prosody.cfg.lua, on active tous les modules la section "Generally required", "Not essential, but recommended" et "Nice to have".
On laisse le module "admin_adhoc" mais on commente le "admin_telnet".
Les modules HTTP restent commentés.
On peut activer les modules de "Other specific functionality", et notamment le module "groups" que l'on utilise plus loin.

Si vous voulez que les contacts s'enregistrent eux-mêmes directement, via Pidgin (ou tout autre client XMPP), ne pas oublier de modifier le paramètre :
Code: Select All Code
allow_registration = true;


sinon il faut créer manuellement les usagers sur le serveur avec :
Code: Select All Code
# prosodyctl adduser toto1@toto.lan
# prosodyctl adduser toto2@toto.lan
...


et s'il faut demain changer le mot de passe de toto1 :
Code: Select All Code
# prosodyctl passwd toto1@toto.lan


Génération de l'hôte virtuel
Code: Select All Code
# cd /etc/prosody/certs
# openssl req -new -x509 -nodes -out toto.lan.crt -keyout toto.lan.key -days 3650

Répondre aux questions posées pour générer le certificat auto-signé.

On créé le fichier de configuration de notre hôte virtuel /etc/prosody/conf.avail/toto.lan.cfg.lua :

Code: Select All Code
-- attention à bien mettre les tabulations !
VirtualHost "toto.lan"
   groups_file="/etc/prosody/toto.groups.txt"
   ssl = {
      key = "/etc/prosody/certs/toto.lan.key";
      certificate = "/etc/prosody/certs/toto.lan.crt";
      }
Component "muc.toto.lan" "muc"


On a ici indiqué un fichier qui contient une liste de groupes d'utilisateurs spécifiques à notre hôte virtuel. Son contenu sera automatiquement envoyé aux clients XMPP à chaque connexion, sans avoir besoin de confirmation côté usager, contrairement à ce qui se passe en mode manuel, où le contact doit d'abord valider la demande d'inscription avant d'apparaître dans la liste du demandeur.

On crée donc notre fichier de groupe dans /etc/prosody/toto.groups.txt comme indiqué - en donnant bien entendu les bons droits sur le fichier :

Code: Select All Code
# chown prosody:prosody /etc/prosody/toto.groups.txt


Puis on remplie le fichier avec les groupes et les membres de chaque groupe (ici on s'est retreint à un groupe avec deux usagers) :
Code: Select All Code
# cat toto.groups.txt
[Groupe des TOTOS]
toto1@toto.lan=toto1
toto3@toto.lan=toto3


On fait ensuite le lien symbolique comme pour Apache :
Code: Select All Code
# cd /etc/prosody/conf.d/
# ln -s ../conf.avail/toto.lan.cfg.lua .


et on redémarrage le programme :
Code: Select All Code
# prosodyctl restart

ou
Code: Select All Code
# service prosody restart


On vérifie l'état du processus :
Code: Select All Code
# prosodyctl status

ou
Code: Select All Code
# service prosody status


Si tout s'est bien passé, on a quelque chose du genre
Code: Select All Code
# ll /var/lib/prosody/toto%2elan/
total 24
drwxr-x--- 6 prosody prosody 4096 févr. 20 23:12 ./
drwxr-x--- 3 prosody prosody 4096 févr. 20 12:13 ../
drwxr-x--- 2 prosody prosody 4096 févr. 20 12:44 accounts/
drwxr-x--- 2 prosody prosody 4096 févr. 20 12:45 offline/
drwxr-x--- 2 prosody prosody 4096 févr. 21 00:05 roster/
drwxr-x--- 2 prosody prosody 4096 févr. 20 12:45 vcard/


Le serveur enregistre les paramètres des comptes dans le sous-dossier "account/", la liste des contacts/salons dans "roster/", etc

Exemples de contenus :

Code: Select All Code
# cat /var/lib/prosody/toto%2elan/accounts/toto1.dat
return {
   ["password"] = "toto1";
};

# cat /var/lib/prosody/toto%2elan/roster/toto3.dat
return {
   [false] = {};
   ["pending"] = {};
   ["toto1@toto.lan"] = {
      ["subscription"] = "both";
      ["groups"] = {
         ["Groupe des TOTOS"] = true;
         ["Buddies"] = true;
      };
      ["name"] = "toto1";
   };
};


Prosody peut aussi utiliser LDAP avec le paquet aditionnel "prosody-modules", et peut utiliser une base SQL classique au lieu de stocker ses informations dans des fichiers texte. En cas d'utilisation de SQL, il faut juste penser à bien remettre ses tables à jour à chaque évolution de Prosody...

En cas de problème :

1 / vérifier la syntaxe du fichier de configuration avec :
Code: Select All Code
# luac -p /etc/prosody/prosody.cfg.lua



2 / changer la ligne
Code: Select All Code
info = "/var/log/prosody/prosody.log";

en
Code: Select All Code
debug = "/var/log/prosody/prosody.log";

dans le fichier /etc/prosody/prosody.cfg.lua, relancer le service, et surveiller les journaux en temps réel :
Code: Select All Code
# tail -f /var/log/prosody/prosody.*


3 / activer le module "admin_telnet", et se connecter directement dans l'outil pour y lancer des commandes (la liste est disponible sur https://prosody.im/doc/console :
Code: Select All Code
# telnet localhost 5582
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
|                    ____                \   /     _       
                    |  _ \ _ __ ___  ___  _-_   __| |_   _
                    | |_) | '__/ _ \/ __|/ _ \ / _` | | | |
                    |  __/| | | (_) \__ \ |_| | (_| | |_| |
                    |_|   |_|  \___/|___/\___/ \__,_|\__, |
                    A study in simplicity            |___/


| Welcome to the Prosody administration console. For a list of commands, type: help
| You may find more help on using this console in our online documentation at
| http://prosody.im/doc/console

module.reload("groups")
| OK: Module reloaded on 0 hosts
module.reload("pep")
| OK: Module reloaded on 0 hosts
config:reload()
| OK: Config reloaded (you may need to reload modules to take effect)
c2s:show("toto.lan")
| toto.lan
|    toto3@toto.lan/405ecd4e-dd2c-4dc2-8a29-4abfc6173672 - available(1)
|    toto1@toto.lan/f9465597-9829-44b5-9678-6651c1adad80 - available(1)
| OK: Total: 2 clients

CTRL-D pour quitter la session telnet
Avatar de l’utilisateur
le Manchot Masqué
Administrateur du site
 
Messages: 338
Inscription: Lun 26 Mai 2008, 21:05
Localisation: Guebwiller
Distribution: Debian, Ubuntu
Niveau: Moitié plein !

Retourner vers Sur un logiciel

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron