---
categories: ['OpenBSD','Réseau','Serveur']
date: 2018-12-24T21:28:03+01:00
description: "Mettre en place un serveur TURN sous OpenBSD"
draft: false
tags: ['OpenBSD','TURN','VoIP']
title: "OpenBSD : Service TURN"
translationKey: 'openbsd-turnserver'
---
## Description
Un serveur TURN est un serveur de {{< abbr VoIP "Voices and videos over IP" >}} - un
serveur de trafic qui passe sur les réseaux NAT et au-travers des
passerelles.
* Site web : https://github.com/coturn/coturn
* Version installée : 4.5.0.7p0
* OS : OpenBSD 6.4
## Installation
{{< inside2 l="sys/openbsd/pkg" t="Installez" a="installer" >}} 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 :
* `fingerprint`
* `lt-cred-mech`
* `use-auth-secret`
* `static-auth-secret` - pour {{< anchor "générer un secret d'authentification" "secret-d-authentification" >}}…
* `realm` - écrire le nom de domaine ou sous-domaine
* `total-quota` - paramétrer la à la valeur de `100`
* `bps-capacity` - valeur de `0`
* `stale-nonce`
* `no-loopback-peers`
* `no-multicast-peers`
### HTTP ou HTTPS
Quelques options à modifier pour avoir une configuration fonctionnelle :
* Si TLS/HTTPS : `tls-listening-port` - la valeur par défaut du port est `5349`
* Autrement : `listening-port` - la valeur par défaut du port est `3478`
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-tlsv1` et `no-tlsv1_1`
* il est possible de {{< anchor "configurer un fichier Diffie-Hellman" "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 est `127.0.0.1`, sauf à raison contraire, laissez-la telle quelle.
* `cli-port` - la valeur par défaut est `5766`.
* `cli-password` - si l'option reste commentée, il n'y aura pas de mot de passe - {{< anchor "générez un nouveau mot de passe" turnadmin >}} avec la commande `turnadmin` et copiez-le…
{{< note warning >}}
Par défaut, l'interface CLI est
accessible sur le réseau en clair. Pour administrer de manière plus
sécurisée, ouvrez une session ssh sur votre machine, puis administrez
votre serveur turn… ;)
{{< /note >}}
### 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](https://github.com/coturn/coturn/blob/master/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. -
{{< note warning >}}
ATTENTION, il est nécessaire que
l'utilisateur lié au service puisse lire le fichier journal. Il semble
qu'il ne peut être écrit que dans `/var/tmp/turn.log`.
{{< /note >}}
### 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/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](https://ybad.name/ah/doku.php/4-httpd/ssl))*
* Une des manières est de copier la clé privée de la mettre dans un répertoire où seul l'utilisateur `_turnserver` aura 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'option `pvkey` le nouveau chemin.
* L'autre serait de créer un groupe sans droits systèmes, d'y ajouter l'utilisateur `_turnserver` et 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* :
{{< file "sys-openbsd-turnserver-pf.conf" sh "/etc/pf.conf" >}}
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
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!***
------------------------------------------------------------------------