Kontakt

Carsten Rieger IT Services
Am Danglfeld 8 | 83132 Pittenhart
Telefon: 08624.9009794
E-Mail: info@c-rieger.de

stun-/coturn-Server (turnserver) auf Ubuntu 22.04/Debian 12

turnserver

In dieser Schnellanleitung beschreiben wir die Einrichtung eines stun-/coturn-Servers für die Verwendung von BigBlueButton, Jitsi Meet, Nextcloud Talk (Hub) u.v.m.. Um eine maximale Kompatibilität zu erreichen wird dabei der Port 443 eingerichtet und verwendet.

Melden Sie sich als priviligierter Benutzer an und laden das notwendige Paket herunter:

Installieren Sie das Paket und erstellen eine Kopie der initialen Konfigurationsdatei.

sudo -s
wget http://mirrors.edge.kernel.org/ubuntu/pool/universe/c/coturn/coturn_4.6.1-1_amd64.deb
wget http://ftp.de.debian.org/debian/pool/main/c/coturn/coturn_4.6.1-1_amd64.deb
dpkg -i coturn_4.6.1-1_amd64.deb 
rm -f coturn_4.6.1-1_amd64.deb 
mv /etc/turnserver.conf /etc/turnserver.conf.bak
apt install -y certbot

Richten Sie die Firewall ein und passen ggf. den SSH-Port (22) an:

apt install -y ufw
ufw allow 22/tcp comment "SSH"
ufw allow 80/tcp comment "LetsEncrypt"
ufw allow 443/tcp comment "Turnserver"
ufw allow 443/udp comment "Turnserver"
ufw allow 32769:65535/udp comment "Turnserver"
ufw logging medium
ufw default deny incoming
ufw enable
systemctl enable ufw.service
systemctl restart ufw.service

Beantragen Sie Ihre Zertifikate, wichtig dafür ist, dass der Port 80 /TCP offen ist. Alternativ können Sie die Zertifikate auch mittels einer DNS-Challenge beantragen und somit den Port 80 geschlossen halten. Ersetzen Sie bitte die rot markierte Domäne:

sudo certbot certonly --standalone --preferred-challenges http -d coturn.domain.de

Erzeugen Sie die Ordner und einen Diffie-Hellmann-Schlüssel, um einen sicheren Schlüsselaustausch zu ermöglichen.

mkdir -p /etc/turnserver/ssl /etc/letsencrypt/renewal-hooks/deploy
openssl dhparam -dsaparam -out /etc/turnserver/dhp.pem 4096

Erstellen Sie nun zum Erneuern der Zertifikate folgende Datei

nano /etc/letsencrypt/renewal-hooks/deploy/coturn

und ersetzen die rot markierte Domain mit ihrer coturn-Domäne:

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

Machen Sie diese Datei ausführbar:

chmod 0755 /etc/letsencrypt/renewal-hooks/deploy/coturn

Erstellen Sie eine neue Konfigurationsdatei:

nano /etc/turnserver.conf

und fügen den gesamten Inhalt hinzu. Passen Sie die rot markierten Werte an:

tls-listening-port=443
listening-ip=192.168.2.3
# optional, aber ergänzend empfohlen: IPv6
# listening-ip=A:B:C:D:E:F:G:H
relay-ip=192.168.2.3
# optional, aber ergänzend empfohlen: IPv6
# relay-ip=A:B:C:D:E:F:G:H
min-port=32769
max-port=65535
verbose
fingerprint
# lt-cred-mech
use-auth-secret
static-auth-secret=coturn-secret
realm=coturn.domain.de
cert=/etc/turnserver/ssl/fullchain.pem
pkey=/etc/turnserver/ssl/privkey.pem
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
# syslog
log-file=/var/log/turnserver/turnserver.log
no-multicast-peers
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
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
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
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
keep-address-family
no-cli
no-tlsv1
no-tlsv1_1
# no-loopback-peers

Eine Muster-Konfigurationsdatei finden Sie hier. Abschließend richten wir noch die Logrotation ein, dazu erstellen wir diese Datei

nano /etc/logrotate.d/coturn

und fügen den gesamten Inhalt ein.

/var/log/turnserver/*.log
{
rotate 7
daily
missingok
notifempty
compress
postrotate
/bin/systemctl kill -s HUP coturn.service
endscript
}

Legen Sie nun den Ordner für die Logdateien an

mkdir -p /var/log/turnserver

Um den Filehandler (LimitNOFILE=1048576) zu erhöhen und coturn die Möglichkeit zu geben, den Port 443 binden zu können, legen wir einen Ordner und eine Datei an.

mkdir -p /etc/systemd/system/coturn.service.d
nano /etc/systemd/system/coturn.service.d/override.conf

Fügen Sie den gesamten Inhalt ein:

[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
[Service]
LimitNOFILE=1048576
AmbientCapabilities=CAP_NET_BIND_SERVICE
ExecStart=
ExecStart=/usr/bin/turnserver -c /etc/turnserver.conf --pidfile /run/turnserver/turnserver.pid --no-stdout-log --simple-log --log-file /var/log/turnserver/turnserver.log
Restart=always

Setzen Sie die notwendigen Berechtigungen:

chown turnserver:turnserver /var/log/turnserver

Der verwendete turnserver-Benutzer ist im coturn-Dienst hinterlegt:

nano /lib/systemd/system/coturn.service

Führen Sie den Hook (Zertifikatshandling) initial aus, laden dann die Services neu und starten zuletzt den coturn-Dienst neu:

/etc/letsencrypt/renewal-hooks/deploy/coturn
systemctl daemon-reload
systemctl restart coturn.service

Überprüfen Sie, ob der Port 443 durch den (co-)turnserver gebunden wurde:

netstat -antp | grep 443

Zudem können Sie von einem anderen Linux-Client die Funktion per Konsole prüfen.

UDP-Verbindungstest:

turnutils_uclient -p 443 -W IhrGeheimerSchlüssel -v -y coturn.domain.de

TCP-Verbindungstest:

turnutils_uclient -t -p 443 -W IhrGeheimerSchlüssel -v -y coturn.ihredomain.de

Um die TCP- und UDP-Ports von außen zu prüfen, nutzen Sie einfach folgende Kommandos:

nmap -sU -p 443 coturn.ihredomain.de
nmap -sT -p 443 coturn.ihredomain.de

Die Installation des stun/coturn-Servers unter Ubuntu 22.04 wurde erfolgreich abgeschlossen. Über Ihre Unterstützung (diese wird ordnungsgemäß versteuert!) würden sich meine Frau, meine Zwillinge und ich sehr freuen!

Carsten Rieger IT-Services | Slogan