class: center, middle ![img33r](telefon-pinguin8.webp) # Gute Verbindung mit NextCloud Talk dank coturn ### Hauke Goos-Habermann #### https://weisheit.goos-habermann.de --- ### Über mich - Entwickler des
Softwareverteilungssystems m23
- Organisator der
Kieler Open Source und Linux Tage
-
Dienstleister zu m23, Linux und Freier Software
- Softwareentwicklung (PHP, BASH, C/C++, JS, Python und was sonst so gebraucht wird...) - Administration - Schulungen - Support - Beratung - quasi **alles**, *was mit Linux zu tun hat* - Wöchentlicher Livestream *"Jean und Hauke Show"* auf https://www.youtube.com/c/LinuxGuides - *"Nicht der Weisheit letzter Schluß"* mit **beruflichen** oder **privaten Projekten** auf
tube.tchncs.de/c/ndwls
und
youtube.com/@nichtderweisheit
- Verwendet NextCloud Talk als Videokonferenzlösung --- ### STUN / TURN? ![img33r](firewall.png) Was tun, wenn eine direkte Verbindung nicht klappt? Z.B. wenn der Provider **
Carrier-grade NAT
** verwendet, da er nicht genügend öffentlichen IPv4-Adressen für alle Kunden hat. **STUN** (**S**ession **T**raversal **U**tilities for **N**AT): Netzwerkprotokoll, um NAT zu erkennen und eine direkte bidirektionale Verbindung zwischen Geräten herzustellen, die sich hinter einer **lockeren NAT-Firewall** befinden. Hierbei werden die öffentliche IP und der dazugehörige Port ausgetauscht. **TURN** (**T**raversal **U**sing **R**elays around **N**AT): Relay-Server, der als Zwischenstation dient, wenn keine direkte Verbindung bei Endgeräten, die sich hinter **restriktiven NAT-Firewalls** befinden, hergestellt werden kann. Mehr dazu: https://de.wikipedia.org/wiki/Session_Traversal_Utilities_for_NAT --- ### coturn ![img33r](telefon-pinguin1.webp) ***coturn*** ist ein OpenSource (wohl
3-Clause-BSD
) STUN- und TURN-Server, der auch per TLS verschlüsseln kann. * Projektseite: https://github.com/coturn/coturn Die Installation geschieht unter Debian und Derivaten als root via: ```bash apt -y install coturn ``` --- ### Konfiguration: Ports ![img33r](telefon-pinguin2.webp) Die Einstellungen werden in der Konfigurationsdatei ***/etc/turnserver.conf*** vorgenommen: ```bash # coturn lauscht auf eingehende Verbindungen auf # 1234 und dem nächsthöheren Port (1235) listening-port=1234 # TLS-verschlüsselte Verbindungen über diesen Port tls-listening-port=1238 # UDP-Portbereich für Weiterleitungen min-port=10000 max-port=11000 ``` Die Ports müssen **von außen erreichbar** sein und ggf. in **
ufw
** freigeschaltet werden: ```bash ufw allow 1234 comment "coturn listening-port" ufw allow 1235 comment "coturn listening-port+1" ufw allow 1238 comment "coturn tls-listening-port" ufw allow 10000:11000/udp comment "coturn relay" ``` --- ### Zugangsschutz, Domain, Protokoll ![img33r](telefon-pinguin6.webp) /etc/turnserver.conf wird um weitere Einstellungen erweitert: ```bash # Zufälligen Sicherungsschlüssel erzeugen secret="$(openssl rand -hex 32)" # Konfiguration erweitern echo " # Festen Sicherungsschlüssel zum Anmelden use-auth-secret static-auth-secret=$secret" >>\ /etc/turnserver.conf # Unter welcher Domain coturn ist erreichbar? echo "realm=example.com" >> /etc/turnserver.conf # Protokolldatei festlegen echo "no-stdout-log log-file=/var/log/coturn/coturn.log"\ >> /etc/turnserver.conf ``` --- ### Sicherheit ![img33r](telefon-pinguin3.webp) Für eine sichere **TLS-Verbindung** wird ein **Zertifikat** und der **dazugehörige private Schlüssel** benötigt. Beides kann z.B. über **
Let's Encrypt
** ausgestellt und in coturn verwendet werden. Dafür kann z.B. der **
Webserver Caddy
** verwendet werden, der sich automatisch um die Zertifikate kümmert. ```bash echo "# Dateien für TLS-Zertifikat und privaten Schlüssel cert=/etc/turnserver/cert.pem pkey=/etc/turnserver/pkey.pem # Nur diese Verschlüsselungsmethoden verwenden 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\" # Alte Protokolle verbieten no-sslv3 no-tlsv1 no-tlsv1_1" >> /etc/turnserver.conf ``` --- ### Grenzen und Begrenzungen ![img33r](telefon-pinguin4.webp) Jetzt legen wir noch Grenzen und Begrenzungen fest: ```bash echo " # Wieviele gleichzeitige Zugriffe? total-quota=100 # Sicherheit durch zusätzlichen Zufallswert in den # Nachrichten erhöhen, der 600s gültig ist. stale-nonce=600 # Keine Weiterleitung an Multicast-Adressen[*] no-multicast-peers # Keine Weiterleitung an loopback-Adressen no-loopback-peers # Keine Fernwartung (per telnet) no-cli" >> /etc/turnserver.conf ``` [*] https://de.wikipedia.org/wiki/Multicast --- ### Zugriffsrechte ![img33r](telefon-pinguin5.webp) Unter Debian/Ubuntu wird coturn unter dem Benutzer und der Gruppe ***turnserver*** ausgeführt. Damit coturn auf die TLS-Dateien zugreifen und Protokolldateien schreiben kann, müssen die Zugriffsrechte entsprechend gesetzt werden: ```bash mkdir /var/log/coturn /etc/turnserver chown turnserver:turnserver /var/log/coturn /etc/turnserver ``` --- ### Zertifikate aktuell halten Mit einem **cronjob** sorgen wir dafür, daß täglich von Caddy ggf. erneuerte Zertifikatsdateien auch in coturn verwendet werden: ```bash # Wird zum Finden der Zertifikatsdateien benötigt domain='example.com' # Skript schreiben, das die Zertifikatsdateien von Caddy kopiert und die # Zugriffsrechte der Kopien anpaßt und coturn neustartet echo "#!/bin/bash cp \"$(find /var/lib/caddy/.local | grep $domain.key)\" /etc/turnserver/pkey.pem cp \"$(find /var/lib/caddy/.local | grep $domain.crt)\" /etc/turnserver/cert.pem chown turnserver:turnserver -R /etc/turnserver systemctl restart coturn" > /etc/cron.daily/coturn-update-cert # Ausführbar machen chmod +x /etc/cron.daily/coturn-update-cert # Nach der ganzen Konfiguration coturn neustarten :-) systemctl restart coturn # Ggf. cron ohne exim installieren apt install -y cron && apt remove -y exim* ``` --- ### NextCloud Talk Nun in NextCloud einstellen und testen: Eigenes Icon (rechts oben) ⇒ Verwaltungseinstellungen ⇒ Talk ⇓ ![img95u](nextcloud.png) --- class: center, middle ### Informationen zu mir und meinen Dienstleistungen, m23, ... ### https://goos-habermann.de