Serveur de messagerie XMPP avec Prosody sous CentOS 7

ProsodyXMPP est un protocole de communication utilisé notamment pour la messagerie instantanée. Outre le fait d’être libre, il repose sur une architecture décentralisée. Le réseau Jabber utilise ce protocole, et on peut s’inscrire sur un des nombreux serveurs publics pour pouvoir communiquer sur ce service. La meilleure solution consiste évidemment à monter nous-mêmes notre propre serveur XMPP. De cette manière, nous sommes sûrs que nos données nous appartiennent.

Dans cet article, je décris en détail l’installation et la configuration d’un serveur de messagerie XMPP avec Prosody sur un serveur dédié tournant sous CentOS 7. L’accent est mis sur la sécurité, avec des communications chiffrées entre les clients et le serveur.

Prérequis

Il nous faut tout d’abord un domaine valide, comme par exemple xmpp.microlinux.fr, ainsi qu’un certificat SSL/TLS pour ce domaine.

Prosody utilise le port 5222 en TCP dans la configuration par défaut. Il faut donc songer à ouvrir ce port dans le pare-feu.

En ce qui concerne SELinux, il n’y a rien de particulier à signaler, et nous pouvons allègrement rester en mode renforcé sans avoir à redouter des blocages mystérieux.

Installation de Prosody

Prosody ne fait pas partie des paquets officiels des distributions Red Hat Enterprise Linux et CentOS. En revanche, il est fourni par le dépôt EPEL.

# yum install prosody

L’installation du paquet a créé un utilisateur système prosody et un groupe système prosody correspondant.

# grep prosody /etc/passwd
prosody:x:995:992:Prosody XMPP Server:/var/lib/prosody:/sbin/nologin
# grep prosody /etc/group
prosody:x:992:

Configuration de Prosody

Les certificats installés sur la machine appartiennent à l’utilisateur root et au groupe certs. Pour plus de détails sur les certificats et les permissions, on pourra lire cet article.

# ls -l /etc/letsencrypt/live/
total 4
drwxr-xr-x. 2 root certs 4096 Jul 12 13:16 microlinux.fr

Nous allons permettre à l’utilisateur système prosody d’accéder aux certificats en l’ajoutant au groupe certs.

# usermod -a -G certs prosody

Prosody se configure par le biais du fichier de configuration /etc/prosody/prosody.cfg.lua et des fichiers *.cfg.lua rangés dans /etc/prosody/conf.d. Avant toute chose, on va effectuer une copie de sauvegarde de prosody.cfg.lua.

# cd /etc/prosody
# cp prosody.cfg.lua prosody.cfg.lua.orig

Le fichier fourni par défaut est quasiment prêt à l’emploi. Dans les directives globales, je vais spécifier l’utilisation de l’IPv4 tout en désactivant l’IPv6 grâce à la directive interfaces.

-- This is a (by default, empty) list of accounts that are admins
-- for the server.
admins = { }

-- Activer l'IPv4 et désactiver l'IPv6
interfaces = { "*" }

Les hôtes virtuels de Prosody fonctionnent en principe comme ceux du serveur Web Apache. Théoriquement, rien ne nous empêcherait de les définir dans le fichier de configuration principal. Pour plus de clarté, il vaut mieux les ranger individuellement dans le répertoire /etc/prosody/conf.d. Dans la configuration par défaut, deux hôtes virtuels sont configurés pour l’exemple, et nous allons les supprimer.

# cd /etc/prosody/conf.d/
# ls
example.com.cfg.lua localhost.cfg.lua
# rm example.com.cfg.lua localhost.cfg.lua

Ensuite, je crée un fichier /etc/prosody/conf.d/xmpp.microlinux.fr.cfg.lua que j’édite comme ceci.

-- /etc/prosody/conf.d/xmpp.microlinux.fr.cfg.lua

VirtualHost "xmpp.microlinux.fr"
enabled = true
ssl = {
  key = "/etc/letsencrypt/live/microlinux.fr/privkey.pem";
  certificate = "/etc/letsencrypt/live/microlinux.fr/fullchain.pem";
}

Mise en service de Prosody

Maintenant que Prosody est configuré, je peux démarrer le service correspondant.

# systemctl enable prosody
# systemctl start prosody

Apparemment, tout semble bien se passer.

# cat /var/log/prosody/prosody.log 
... Hello and welcome to Prosody version 0.10.2
... Prosody is using the select backend for connection handling
... Activated service 'c2s' on [*]:5222
... Activated service 'legacy_ssl' on no ports
... Activated service 's2s' on [*]:5269
... Prosody is about to detach from the console, disabling 
    further console output
... Successfully daemonized to PID 23024

Gérer les utilisateurs

La commande prosodyctl gère la création et la suppression des utilisateurs.

L’option adduser permet d’ajouter un utilisateur.

# prosodyctl adduser kikinovak@xmpp.microlinux.fr
Enter new password: **********
Retype new password: **********

La suppression d’un utilisateur s’effectue avec l’option deluser.

# prosodyctl deluser troll@xmpp.microlinux.fr

Les utilisateurs sont stockés dans l’arborescence /var/lib/prosody, dans un répertoire correspondant au domaine.

# ls -1 /var/lib/prosody/xmpp%2emicrolinux%2efr/accounts/
adebuf.dat
fbanester.dat
fteyssier.dat
jmortreux.dat
kikinovak.dat

Enfin, l’option passwd permet de modifier le mot de passe d’un utilisateur.

# prosodyctl passwd jmortreux@xmpp.slackbox.fr

Configurer le client de messagerie Pidgin

Il existe une quantité impressionnante de clients de messagerie instantanée capables de gérer le protocole XMPP. Pour ma part, j’utilise Pidgin depuis sa sortie en 2007. Voici ce qu’il faut faire pour configurer un compte sur ce client.

Une fois qu’on a lancé l’assistant de création de compte, on commence par l’onglet Essentiel.

  • Choisir le protocole XMPP dans le menu déroulant Protocole.
  • Renseigner l’utilisateur (par exemple kikinovak ou jmortreux).
  • Renseigner le domaine (par exemple xmpp.microlinux.fr).
  • Laisser vide le champ Ressource.
  • Fournir le mot de passe et cocher la case Mémoriser le mot de passe.
  • Définir un Alias local (facultatif).
  • Ajouter une icône pour le compte (facultatif).

Configuration Pidgin

Ensuite, on passe à l’onglet Avancé.

  • Vérifier si la Sécurité de la connexion nécessite le chiffrement.
  • Vérifier le Port de connexion 5222.
  • Définir le Serveur de connexion, par exemple xmpp.microlinux.fr.
  • Garder le Proxy de transfert de fichiers proxy.eu.jabber.org.
  • Laisser vide le champ URL BOSH.
  • Laisser cochée la case Afficher les frimousses personnalisées.

Configuration Pidgin

Ce contenu a été publié dans CentOS, Documentation Microlinux, avec comme mot(s)-clé(s) , , , . Vous pouvez le mettre en favoris avec ce permalien.

5 réponses à Serveur de messagerie XMPP avec Prosody sous CentOS 7

  1. r00tBSD dit :

    Très bon article même si je n’ai jamais été fan de xmpp. Je croyais même que cette techno allait mourir vu le peu de personne qui l’utilise.

    Bonne continutation à vous.

  2. nimp dit :

    Coucou, il te reste encore plein de trucs à configurer pour pouvoir profiter des fonctionnalités modernes de XMPP avec un client comme conversations.im (Android) ou gajim.org (multi-plateformes) comme par exemple les conversations chiffrées de groupe (omemo muc)

    Y’a des info sur ça mais pas trop des tutos tu peux aller jeter un coup d’oeil sur un config presque 100% fonctionnelle sur https://wiki.hackab.org/infra-jabber y’a quelques liens vers d’autres ressources pour pousser le truc 🙂

    • kikinovak dit :

      Merci pour le tuyau, mais je n’ai pas besoin de toutes ces fonctionnalités, du moins pour l’instant. Mes clients l’utilisent sur leurs PC au boulot pour échanger des messages avec Pidgin, et c’est tout.

      • nimp dit :

        OK c’est cool. Après en vrai quand je parle de fonctionnalités “modernes” je parle de trucs vraiment fondamentaux comme l’archivage des messages pour pouvoir communiquer avec une personne hors-ligne, le chiffrement dans les discussions de groupe, le transfert de fichiers, le support des clients web (avec BOSH). Bref, je comprends si ça correspond pas à ton usage de messagerie, mais je te conseille tout de même d’activer deux-trois trucs comme le MAM et les carbons qui sont quasi-indispensables pour ne pas perdre des messages bêtement 😛

        Disons que si t’as le temps et l’envie de le configurer, ton prosody peut très bien remplacer tous tes besoins en messagerie instantanée chiffrée, y compris en faisant de la fédération en onions (communication fédérées sur Tor). Et ça c’est plutôt cool 🙂

  3. Nicolas dit :

    Super. Je cherchais à remplacer mon irc par un xmpp, mais ejabberd me donnait des boutons, trop lourd en comparaison au très bon ngircd.

    Du coup je viens de tester prosody, il fonctionne au poil !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.