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.
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 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.
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.
## /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.
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é.
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].
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 :
modules:
...
mod_http_upload:
put_url: https://@HOST@:5443/upload
docroot: "/var/ejabberd/upload"
thumbnail: true
max_size: 100000000
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/
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 !