Auto-héberger un serveur de visioconférence Galène

Nicolas Mesnier

Mis à jour le 07/10/2023.

Galène est un logiciel libre distribué sous licence MIT qui a pour objectif de fournir une solution de visioconférence pour l’enseignement et les exposés scientifiques accessible depuis un navigateur web. Il est développé à l’Université de Paris-Diderot par Juliusz Chroboczek. Il permet de :

Galène n’est pas un concurrent de BBB mais se veut avant tout un logiciel simple, robuste et efficace aux fonctionnalités strictement limitées. Voir le serveur de démonstration.

On trouve dans ce document quelques éléments permettant d’auto-héberger un serveur de visioconférence Galène, c’est-à-dire :

Pour la suite, j’utilise les variables :

${VISIO}        # le nom de la VM sur laquelle tourne Galène
${PRIVATE_IP}   # l'IP privée de cette VM, du type 192.168.1.XX
${PUBLIC_IP}    # votre IP publique, celle de votre box
${MONDOMAINE}   # votre nom de domaine

Sur l’hôte de la VM

J’ai pris l’habitude d’administrer mes machines virtuelles avec KVM. Pour faire de même, sur l’hôte installer :

# apt install qemu-system qemu-system-x86 qemu-utils \
    libvirt-clients libvirt-daemon-system \
    virtinst bridge-utils

Connexion de type bridge

Pour que la VM partage la connexion réseau de l’hôte, il est nécessaire de définir une connexion de type bridge par exemple avec network manager) ou plus directement en éditant l’interface réseau :

Pour ajouter cette connexion de type bridge à libvirt, on suit le tuto de Leif Madsen :

Machine virtuelle

Sur la machine virtuelle

Installer Galène

Tester en local

Installer un serveur coTURN

Sur votre box Internet

Désactiver IPv6

Ouvrir les ports

Sur le serveur frontal

Dans le cas où Galène n’est pas le seul service hébergé sur ${MONDOMAINE}, il est nécessaire de définir un reverse proxy pour rediriger les requêtes de votre sous-domaine

visio.${MONDOMAINE}

vers

https://${PRIVATE_IP}:8443

Pour le reverse proxy, on utilise ici NGINX.

Installer et configurer NGINX

Configuration TLS

Afin de sécuriser le protocole HTTP avec une couche de chiffrement SSL/TLS et garder privées les communications entre les utilisateurs et le serveur, on utilisera par défaut le HTTPS, en écoute du port TCP 443.

On se réfère aux recommandations de la fondation mozilla qui ne sont pas en contradiction avec celles de l’ANSSI. On utilise en particulier le générateur sur lequel on renseigne la version de NGINX, obtenue avec :

$ nginx -v

et celle de openssl

$ openssl version

Pour intégrer ces recommandations, il faut :

Durcissement des réponses HTTP

On se base sur les recommandations de l’ANSII et sur l’article pour durcir les réponses HTTP du serveur, notamment :

Pour cela, éditer le fichier de configuration :

# vim /etc/nginx/nginx.conf

en ajoutant les lignes :

 server{
    ...
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Xss-Protection "1; mode=block" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header 'Referrer-Policy' 'origin';
    ...
 }

puis relancer NGINX :

# service nginx restart

Vérifier ensuite votre configuration en faisant analyser votre site.

Configuration pour Galène

Configurer le par-feu

Générer les certificats SSL

Tester

Enfin

Pour définir un service qui permette de lancer Galène avec systemd dès le lancement de la VM :

virsh start ${VISIO}

sur la machine virtuelle

Mise à jour

Pour mettre à jour Galène, par exemple pour galene-0.7.2 du 09/07/2023, on peut procéder de deux façons :

ou alors :

Remerciements

Je tiens à remercier chaleureusement Juliusz Chroboczek pour son aide précieuse et rudement efficace pour la configuration de mon serveur ainsi que Fabrice Rouillier pour son aide pour la mise en place d’un service IPv4 avec le serveur coTURN. Une bonne partie de cette documentation n’est qu’une remise en forme de leurs propos.

Ressources