stun/coturn-Server (turnserver) auf Ubuntu 22.04

stun/coturn-Server (turnserver) auf Ubuntu 22.04

von Carsten Rieger|Aktualisiert

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.

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

sudo -s
wget http://mirrors.edge.kernel.org/ubuntu/pool/universe/c/coturn/coturn_4.5.2-3.1~ubuntu22.04.1_amd64.deb

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

apt install coturn*.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 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. Ersetzen Sie bitte die rot markierte Domäne:

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

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

mkdir -p /etc/turnserver /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.ihredomain.de/"${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

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:

tls-listening-port=443
#Externe IP = x.x.x.x « bitte ersetzen
listening-ip=x.x.x.x
relay-ip=x.x.x.x
min-port=32769
max-port=65535
verbose
fingerprint
use-auth-secret
# bspw. zu generieren mit: 'openssl rand -hex 32'
static-auth-secret=IhrGeheimerSchlüssel
realm=coturn.ihredomain.de
cert=/Pfad/Zum/Zertifikat.cer
pkey=/Pfad/Zum/ZertifikatSchlüssel.key
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
keep-address-family
no-cli
no-tlsv1
no-tlsv1_1
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

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

Setzen Sie die notwendigen Berechtigungen:

chown turnserver:turnserver /var/log/turnserver

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.ihredomain.de

TCP-Verbindungstest:

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

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다