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

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!

답글 남기기

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