XMPP - Partager des fichiers efficacement

9 mai 2021

Vous avez maintenant un serveur accessible depuis internet, vous pouvez créer de nouveaux comptes en ligne de commande, mais vous n’avez accès qu’à une fraction des fonctionnalités de XMPP.
Par exemple, le partage de fichiers marche peut-être mais uniquement si vos deux clients sont connectés en même temps !

Ejabber fonctionne avec des modules qui peuvent être activés ou désactivés et qui se configurent. La documentation d’ejabber vous donne la liste des modules et de leurs options [1]. Mais il n’est pas forcément aisé de s’y retrouver.

Nous allons nous intéresser au module mod_http_upload pour activer le transfert de fichiers avec stockage sur le serveur, mais aussi pour découvrir la structure du fichier de configuration ejabberd.yml.

 Explorons le fichier de configuration

La première section remarquable s’appelle hosts et nous savons à quoi elle sert.

La seconde section s’appelle certfiles et nous avons vu qu’elle indique au serveur les certificats à utiliser.

D’autres sections suivent, plus ou moins volumineuses. celles qui nous intéressent sont listen et modules.

 Listen

Listen permet de faire le lien entre une connexion et un service de ejabberd. Les connexions sont regroupées par port. Par exemple, sur le port 5443, vous trouvez le bloc suivant.

/etc/ejabberd/ejabberd.yml - listen listen: ... - port: 5443 ip: "::" module: ejabberd_http tls: true protocol_options: 'TLS_OPTIONS' request_handlers: /api: mod_http_api /bosh: mod_bosh ## /captcha: ejabberd_captcha ## /upload: mod_http_upload /ws: ejabberd_http_ws

 port : 5443 indique le port écouté
 ip : ": :" indique qu’il n’y a pas de tri effectué sur l’origine de la connexion
 module : ejabberd_http indique que les connexions seront gérée par ce module. Il s’agit du serveur web d’ejabberd.
 tls:true indique qu’il s’agit de connexion "sécurisée". Les données transmise sont chiffrées à l’aide du certificat.
 protocol_options : ’TLS_OPTIONS’ indique les options de chiffrement. TLS_OPTION est une macro qui a été définie plus haut
 request_handlers : une option lié au module ejabberd_http. En fonction de l’adresse web utilisée dans la connexion, le serveur dirigera la requête vers un service ou un autre.

Enfin, suivent la liste des services.

/etc/ejabberd/ejabberd.yml - listen ## /upload: mod_http_upload

Cette ligne a été commentée, indiquant que le module mod_http_upload ne recevra pas la connexion. Commençons par dé-commenter la ligne.

/etc/ejabberd/ejabberd.yml - listen listen: ... - port: 5443 ip: "::" module: ejabberd_http tls: true protocol_options: 'TLS_OPTIONS' request_handlers: /api: mod_http_api /bosh: mod_bosh ## /captcha: ejabberd_captcha /upload: mod_http_upload /ws: ejabberd_http_ws

Maintenant, les connexions arrivant sur le port 5443, et demandant "/upload" seront transmises au module mod_http_upload. Mais pour l’instant, ce module n’est pas activé.

 Modules

Dans la section modules, vous trouvez une pré-configuration du module upload. Vous trouverez une liste des options du module dans la documentation officielle [2].

/etc/ejabberd/ejabberd.yml - modules modules: ... ## mod_http_upload: ## put_url: https://@HOST@:5443/upload ## custom_headers: ## "Access-Control-Allow-Origin": "https://@HOST@" ## "Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS" ## "Access-Control-Allow-Headers": "Content-Type"

Nous allons configurer le module ainsi :

 put_url : l’URL que nos clients utilisent pour accéder au service. Nous retrouvons le port 5443. Si vous souhaitez changer de port, vous devez modifier la configuration du module (ici) et le port dans listen.
 docroot : l’endroit où seront stockés les documents envoyés. Dans notre cas : /var/ejabberd/upload
 thumbnail : pour créer des aperçus des images
 max_size : la taille maximale des fichiers acceptés. Commençons avec 100 Mo.

Il faut créer le répertoire pour stocker les documents, et donnez à ejabberd les droits :

mkdir /var/ejabberd mkdir /var/ejabberd/upload chown -R ejabberd:ejabberd /var/ejabberd

Puis modifier le fichier de configuration ainsi :

/etc/ejabberd/ejabberd.yml - module modules: ... mod_http_upload: put_url: https://@HOST@:5443/upload docroot: "/var/ejabberd/upload" thumbnail: true max_size: 100000000

 Routeur

Maintenant, il faut encore que les connexion sur le port 5443 parviennent à votre serveur. Pour cela, reprenez la configuration de votre routeur et transférez le port 5443 du routeur vers le port 5443 de votre Raspberry Pi.

Rechargez la configuration et observez vos logs. Ejabberd a maintenant besoin d’un certificat pour le sous-domaine upload.
Retournez dans l’administration de votre DNS et créé l’enregistrement pour rediriger le domaine upload.xmpp.poivron-robotique.fr vers votre routeur :

upload.xmpp.poivron-robotique.fr 900 A 176.190.83.229

Lancez certbot :

certbot certonly --standalone --expand

Indiquez le domaine concerné : upload.xmpp.poivron-robotique.fr. Et donnez les droits à ejabderd de lire le nouveau certificat :

chmod -R g+xr /etc/letsencrypt/ chgrp -R ejabberd /etc/letsencrypt/live/ chgrp -R ejabberd /etc/letsencrypt/archive/

 Testez !

Rechargez la configuration de votre serveur

ejabberdctl reload_config

Observez bien les logs. Si rien de suspect n’apparait, essayer d’envoyer un fichier d’un client vers un autre !


Commentaires

Il n'y a pas de commentaires

Ajouter un commentaire

Pseudo :
Mail :

Texte :

Copyright "POIVRON" 2011-2023, tous droits réservés
Administration du site