Table des matières

Serveur Xmpp

Article en brouillon, noté sur le pouce ; transfert de page, rien de neuf.

Se faire héberger par les copains

Il est possible de laisser quelqu'un d'autre gérer le serveur (pour nous, c'est jabberfr.org), tout en ayant des salons dans le genre khaganat@chat.khaganat.net, ce qui est quand même plus classe.

Dans les bonnes pratiques XMPP, il est plus élégant d'héberger les salons avec un sous-domaine, par exemple chat.mondomaine.com, que directement sur le domaine de base ; par contre la création de compte se fait sur le domaine (adresses en pseudo@mondomaine.com).

Pour cela, après un accord passé avec un hébergeur, il faut faire pointer le nom de domaine au bon endroit.

Exemple sur Gandi :

chat 	CNAME 	jabberfr.org.

Voir aussi https://prosody.im/doc/dns#srv_records et https://github.com/letsencrypt/boulder/issues/1309

Installation de base du serveur Prosody

Nous installons un serveur XMPP chez nous, ça va servir en jeu aussi à terme. Nous mettons Prosody, parce que c'est Link Mauve qui l'a dit :D (et que ça a l'air de faire son job, c'est ce qui compte).

Les paquets sous Debian stable sont un peu vieux ; il faut donc aller chercher à la source.

La doc de Prosody est très bien ; je traduis le principal pour Debian. Tout en root .

Ajouter les sources :

  echo deb http://packages.prosody.im/debian $(lsb_release -sc) main | tee -a /etc/apt/sources.list.d/prosody.list

Ajouter la clé :

wget https://prosody.im/files/prosody-debian-packages.key -O- | apt-key add -

apt update

Télécharger la bonne version :

apt install prosody

Ajouter des dépendances optionnelles qui devraient être pratiques :

apt install lua-sec lua-event lua-zlib luarocks

Ensuite on configure Prosody. Comme le dit la doc sur Jabberfr, faut surtout lire tranquillement /etc/prosody/prosody.cfg.lua.

Une fois que le serveur sera lancé et un utilisateur créé, ajouter son nom à la valeur admins = { }.

J'ai décommenté le module “blocklist”; parce que ça me parait essentiel ; je verrais si ça prend des ressources…

Le reste je verrais quand ça tournera.

Je donne le nom du serveur à VirtualHost

Ensuite… la partie amusante : les certificats. J'utilise let's encrypt, il faut donc pointer vers le bon certificat. Sauf que prosody ne peux pas lire les fichiers dans /etc/letsencrypt/live/* donc on utilise leur outil .

prosodyctl --root cert import /etc/letsencrypt/live

Il faudrait refaire ça à chaque renouvellement de let's encrypt ? Oui.

Et voilà à quoi ça ressemble dans /etc/prosody/prosody.cfg.lua (sans les commentaires) :

VirtualHost "khaganat.net"

Ensuite on redémarre prosody pour prendre en compte les modifications et on vérifie que ça marche :

prosodyctl restart
prosodyctl status

On regarde aussi dans /var/log/prosody/prosody.* si tout va bien.

On crée ensuite un utilisateur directement en ligne de commande (vu que je n'ai pas encore ouvert les inscriptions !) :

prosodyctl adduser me@example.com

Ensuite il faut ouvrir les bons ports.

iptables -t filter -A INPUT -p tcp --dport 5222 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 5269 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 5222 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 5269 -j ACCEPT

iptables -t filter -A INPUT -p tcp --dport 5000 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 5000 -j ACCEPT

iptables -t filter -A INPUT -p tcp --dport 5280 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 5281 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 5280 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 5281 -j ACCEPT

<WRAP center round help 60%> Ce n'est pas sensé sauter au redémarrage si je fais juste ça ?

Edit : Oui, il faut faire une sauvegarde des règles iptables avec iptables-save dans /etc/sysconfig/iptables

Pour vérifier que les ports sont bien ouverts :

nmap serveur.com

</WRAP >

Nous utilisons des VM XEN/Proxmox en NAT, donc dans l'hyperviseur :

iptables -t nat -I POSTROUTING -o eno1 -j MASQUERADE
 
iptables -t nat -I PREROUTING -i eno1 -p tcp --destination-port 5222 -j DNAT --to 192.168.*.*:5222
iptables -t nat -I PREROUTING -i eno1 -p tcp --destination-port 5269 -j DNAT --to 192.168.*.*:5269
iptables -t nat -I PREROUTING -i eno1 -p tcp --destination-port 5222 -j DNAT --to 192.168.*.*:5000
iptables -t nat -I PREROUTING -i eno1 -p tcp --destination-port 5269 -j DNAT --to 192.168.*.*:5280
iptables -t nat -I PREROUTING -i eno1 -p tcp --destination-port 5222 -j DNAT --to 192.168.*.*:5281

Ajouter des modules

Voir aussi https://prosody.im/doc/components.

Le serveur de base est très bien, mais la grande force d'XMPP c'est qu'on peut lui ajouter des fonctionnalités via des modules, ou “components”. Les composants sont des services à par entière, qui seront lancés sur un serveur (pas forcément celui où prosody est installé) ; prosody va ensuite aller interroger les services qu'on lui demande, en se connectant à une adresse ip et un port et en échangeant un secret (ou mot de passe) avec le composant. Dans le cas des composants en interne, le mot de passe n'est pas nécessaire.

Si le composant est déjà intégré dans Prosody, il suffit de l'activer dans sa configuration, par exemple en ajoutant ceci dans le fichier de configuration, qui ajoutera la possibilité de créer des salons de discussion :

Component "conference.example.org" "muc"

Si le composant n'existe pas déjà dans Prosody, il faut qu'il utilise le protocole XEP-0114 (classique pour les extensions XMPP). Pour ajouter un composant externe, Prosody doit connaître l'adresse, le port (par défaut 5347, utilisé par la plupart des applications) et le mot de passe (ou “secret”) que le composant utilise.

Si le composant a besoin d'un sous-domaine pour fonctionner, comme conference.example.org, il faut paramétrer ce sous-domaine du côté du DNS et s'assurer qu'il est couvert par un certificat ssl.

proxy

Component “proxy.myserver.org” “proxy65”

upload

Component “dump.myserver.org” “http_upload”

Ajout des sources des modules

apt install mercurial
cd /usr/lib/prosody/
hg clone https://hg.prosody.im/prosody-modules/ prosody-modules
plugin_paths = { "/usr/lib/prosody/prosody-modules" }

Modules utiles

Voici une liste non-exhaustive des modules intéressants, conseillés par Link Mauve sur cette dépêche de Linuxfr :