Outils pour utilisateurs

Outils du site


installer_un_serveur_stun_turn_bigbluebutton

Ceci est une ancienne révision du document !


Installer un serveur TURN/STUN pour BigBlueButton

Un serveur TURN/STUN permet à ceux qui se connectent aux Internets à travers un firewall restrictif (comme dans les entreprises ou les administrations de manière générale) d'accéder à un serveur BigBlueButton (entre autres) en faisant relai.

Normalement, l'accès à un serveur BigBlueButton implique l'accès à des ports rarement ouverts dans les firewall. Le serveur TURN/STUN permet de passer par les ports généralement ouverts 443 et 3478, relayés ensuite vers le serveur BigBlueButton et ses ports.

Dans ce tutoriel, traduit, adapté et augmenté à partir du tutoriel original, on utilisera une Ubuntu 20.04 server permettant d'installer le package coturn dans sa version 4.5.1 minimum.

On considère que le nom de domaine coturn.mondomaine.org pointe sur le serveur.

Installation

Certificat TLS

Certbot permet de générer des certificats SSL/TLS et s'installe de préférence via le gestionnaire de paquets Snap, préinstallé sur Ubuntu.

On installe et met à jour snap :

snap install core; sudo snap refresh core

On installe certbot :

snap install --classic certbot

On fait un lien symbolique vers l’exécutable de certbot pour disposer de la commande dans le PATH :

ln -s /snap/bin/certbot /usr/bin/certbot

On crée le certificat pour le nom de domaine coturn.mondomaine.org :

certbot certonly --standalone --preferred-challenges http -d coturn.mondomaine.org

Coturn

On installe le paquet coturn :

apt install coturn

Le serveur coturn écoutera sur les ports :

  • 443 (TCP/UDP) : accès au certificat TLS
  • 3478 (TCP/UDP) : port d'écoute de coturn

Et communiquera avec les ports du serveur BigBlueButton via l'interval de ports 32768-65535 (UDP).

Le serveur coturn fonctionne en tant que l’utilisateur turnserver et il devra être en mesure d'accéder aux clefs TLS générées par Certbot, notamment lorsque les clefs seront renouvellées.

On crée un dossier /etc/turnserver dans lequel on copiera les clefs automatiquement à chaque renouvellement.

Aller dans le dossier /etc/letsencrypt/renewal-hooks/deploy, et créer un fichier coturn dans lequel on met :

#!/bin/bash -e
for certfile in fullchain.pem privkey.pem ; do
	cp -L /etc/letsencrypt/live/coturn.mondomaine.org/« ${certfile}" /etc/turnserver/"${certfile}".new
	chown turnserver:turnserver /etc/turnserver/"${certfile}".new
	mv /etc/turnserver/"${certfile}".new /etc/turnserver/"${certfile}"
done
systemctl kill -sUSR2 coturn.service

Rendre ce fichier executable :

chmod 0755 coturn

Configuration

Le fichier de configuration de coturn est /etc/turnserver.conf.

Dans ce fichier, on va modifier plusieurs variables et paramètres tel que montré ci-dessous.

  • Remplacer <IP> par l'IP du serveur sur lequel coturn fonctionne, pas celle du serveur BigBlueButton.
  • Remplacer <VALEUR_SECRETE> par une chaine de caractères, par exemple créé via la commande openssl rand -hex 16
listening-port=3478
tls-listening-port=443
 
listening-ip=<IP>
relay-ip=<IP>
 
min-port=32769
max-port=65535
 
static-auth-secret=<VALEUR_SECRETE>
realm=coturn.mondomaine.org
 
cert=/etc/turnserver/fullchain.pem
pkey=/etc/turnserver/privkey.pem
# From https://ssl-config.mozilla.org/ Intermediate, openssl 1.1.0g, 2020-01
cipher-list="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384"
dh-file=/etc/turnserver/dhp.pem
 
# If running coturn version older than 4.5.2, uncomment these rules and ensure
# that you have listening-ip set to ipv4 addresses only.
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=::1
# Private (LAN) addresses
# If you are running BigBlueButton within a LAN, you might need to add an "allow" rule for your address range.
# IPv4 Private-Use
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.168.0.0-192.168.255.255
# Other IPv4 Special-Purpose addresses
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
# IPv6 Unique-Local
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
# IPv6 Link-Local Unicast
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
# Other IPv6 Special-Purpose assignments
denied-peer-ip=::ffff:0:0-::ffff:ffff:ffff
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=64:ff9b:1::-64:ff9b:1:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2001:db8::-2001:db8:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff

Il faut aussi décommenter les paramètres suivants :

verbose
fingerprint
lt-cred-mech
use-auth-secret
keep-address-family
no-cli
no-tlsv1
no-tlsv1_1
# Block connections to IP ranges which shouldn't be reachable
no-multicast-peers

Sauver le fichier.

Fichier dhp.pem

On voit qu'on a besoin de créer le fichier de clef custom DH TLS /etc/turnserver/dhp.pem :

openssl dhparam -dsaparam -out /etc/turnserver/dhp.pem 2048

Configuration du démarrage du service

Quand le service coturn démarrera, il faut qu'il se lie (bind) au port 443. Il faut aussi augmenter le nombre de fichier que le service peut gérer. On crée un dossier /etc/systemd/system/coturn.service.d :

mkdir -p /etc/systemd/system/coturn.service.d

Dedans, on crée un fichier override.conf dans lequel on met :

[Service]
LimitNOFILE=1048576
AmbientCapabilities=CAP_NET_BIND_SERVICE
ExecStart=
ExecStart=/usr/bin/turnserver --daemon -c /etc/turnserver.conf --pidfile /run/turnserver/turnserver.pid --no-stdout-log --simple-log --log-file /var/log/turnserver/turnserver.log
Restart=always

Logs (et rotation)

installer_un_serveur_stun_turn_bigbluebutton.1620597005.txt.gz · Dernière modification : 2021/05/09 21:50 de n1c0