Description
Un serveur TURN est un serveur de VoIP (Voices and videos over IP) - un serveur de trafic qui passe sur les réseaux NAT (Network Address Translation) et au-travers des passerelles.
- Site web : https://github.com/coturn/coturn
- Version installée : 4.5.0.7p0
- OS : OpenBSD 6.4
Installation
Installez le paquet turnserver !
Un utilisateur _turnserver sans droit système est créé !
Configuration
Fichier de configuration /etc/turnserver.conf
Il faut décommenter ou remplir les options suivantes :
fingerprintlt-cred-mechuse-auth-secretstatic-auth-secret- pour générer un secret d’authentification…realm- écrire le nom de domaine ou sous-domainetotal-quota- paramétrer la à la valeur de100bps-capacity- valeur de0stale-nonceno-loopback-peersno-multicast-peers
HTTP ou HTTPS
Quelques options à modifier pour avoir une configuration fonctionnelle :
-
Si TLS (Transport Layer Secure) / HTTPS (HyperText Transfer Protocol Secure) :
tls-listening-port- la valeur par défaut du port est5349 -
Autrement :
listening-port- la valeur par défaut du port est3478
Si vous utilisez HTTPS , il faut en plus paramétrer ces options :
-
cert- chemin vers le certificat HTTPS du serveur -
pkey- chemin vers la clé privée liée au certificat HTTPS du serveur -
cipherlist- il est fortement recommandé de modifier cette option à l’identique de la configuration de votre serveur web, si vous en avez un actif sur le même serveur.
Voici les valeurs minimales :ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5 -
il est possible d’exclure les versions suivantes des protocoles TLS en utilisant les options suivantes :
no-tlsv1etno-tlsv1_1 -
il est possible de configurer un fichier Diffie-Hellman c’est l’option
dh-file- n’utilisez pas le même que celui de votre serveur web ; générez-en exprès rien que pour ce service !
CLI
Par défaut, l’interface d’administration en ligne de commande est activée !
Pour la désactiver, il faut décommenter l’option no-cli…
Sinon, décommentez les options suivantes pour ajouter un peu de sécurité dessus :
-
cli-ip- la valeur par défaut est127.0.0.1, sauf à raison contraire, laissez-la telle quelle. -
cli-port- la valeur par défaut est5766. -
cli-password- si l’option reste commentée, il n’y aura pas de mot de passe - générez un nouveau mot de passeavec la commandeturnadminet copiez-le…
Pour administrer de manière plus sécurisée, ouvrez une session ssh sur votre machine, puis administrez votre serveur turn… ;)
Bases de données
Par défaut, SQLite est utilisée, et les données sont enregistrées dans
/var/db/turndb - là, encore, sous OpenBSD, il est nécessaire que l’utilisateur
_turnserver ait les droits sur ledit fichier.
Pour les bases de données, MySQL/MariaDB, PostgreSQL, Mongo, Redis, veuillez lire le fichier INSTALL !
Logs
Il est possible de gérer les journaux en modifiant/activant les options suivantes :
-
no-stdout-log- empêcher que les journaux soient publiés sur la sortie standard -
syslog- rediriger les sorties vers le journal syslog -
simple-log -
log-file- donnez-lui le chemin absolu vers le nom de fichier dans lequel vous désirez que les journaux soient écrits.
/var/tmp/turn.log.Secret d’authentification
Pour générer un secret d’authentification, il suffit de se servir de la
commande openssl, tel que :
:$ openssl rand -hex 32
Fichier Diffie-Hellman
Là, aussi, openssl sera notre secours, tel que :
$ openssl dhparam -out dhparam_4096.pem 4096
ce qui nous générera un fichier de 4096 bits.
Turnadmin
Pour générer un mot de passe, il faut utiliser l’option -P
(ou son équivalent : --generate-encrypted-password*)
alliée de l’option -p (ou son équivalent : --password).
- pour l’option
cli-password::$ turnadmin -P -p cli-password
Dépannage
WARNING: cannot find private key file
Les journaux indiquent que le fichier relatif à la clé privée du certificat SSL (Secure Sockets Layer) / HTTPS ne peut être lu, tel que :
Dec 19 09:08:17 srvr turnserver: 0: WARNING: cannot find private key file: /etc/ssl/acme/private/mydomain.net.privkey.pem (1)
Dec 19 09:08:17 srvr turnserver: 0: WARNING: cannot start TLS and DTLS listeners because private key file is not set properly
En effet, lors de la génération par le client acme natif sous OpenBSD, les droits
sur ledit fichier appartiennent en lecture seule à root:wheel - or, le serveur
fonctionne avec les droits de l’utilisateur _turnserver, il ne peut donc pas
y accéder…
(bien sûr, je n’ai pas abordé la génération de certificats
TLS
avec Lets’Encrypt… voici un exemple d’explication pour le client acme sous OpenBSD)
-
Une des manières est de copier la clé privée de la mettre dans un répertoire où seul l’utilisateur
_turnserveraura accès avec des droits en lecture seule, et sur le répertoire et sur le fichier de clé privée copié.
Une fois fait, indiquez à l’optionpvkeyle nouveau chemin. -
L’autre serait de créer un groupe sans droits systèmes, d’y ajouter l’utilisateur
_turnserveret d’attribuer les droits 0440 sur le fichier original de la clé privée.
Personnellement, je n’aime ni l’une, ni l’autre de ces deux solutions…
mais je ne peux proposer mieux !
Démarrer le service
Une fois le fichier configuré, il ne vous reste plus qu’à activer le
service et le démarrer à l’aide de l’outil rcctl :
:# rcctl start turnserver
Règles PF
La configuration des règles du pare-feu PF est un peu plus délicate. Gardez à l’esprit que ce sont des règles à modifier selon vos nécessités :
(…)
host = "ipv4 address server"
host6 = "ipv6 address server"
cli_port = "5766"
turn_port = "3478"
turn_tls_port = "5349"
(…)
# empêcher les connexions sur l'interface CLI
block drop in quick log on egress proto { tcp udp } from any to egress port $cli_port label "turn: unwanted connexion to cli"
block log
pass out
(…)
pass in quick log on egress proto { tcp udp } from any to { $host $host6 } port { $turn_port $turn_tls_port } flags S/SA modulate state
(…)
Il est très intéressant de déclarer une table abuse et de modifier la règle qui
bloque la connexion à l’interface CLI afin que les
IP (Internet Protocol)
correspondantes
soient enregistrées dans la table abuse.
Veillez à créer une tâche cron pour purger régulièrement ladite table ;)
Remerciements
Source : https://help.nextcloud.com/t/howto-setup-nextcloud-talk-with-turn-server/30794
Enjoy-ID!
Enjoy-IT!