Einrichten von Jitsi Meet – kostenlose Konferenzen für alle

[Letzte Aktualisierung: 06.06.2020 17:39] Aus aktuellen Anlass habe ich mich wie viele andere mit der Open Source Videokonferenz Software Jitsi Meet beschäftigt. Nachstehend eine kurze Beschreibung meiner durchgeführten Schritte bzw. Konfigurationen.

Basis ist in meinem Fall eine virtuelle Maschine mit 4 vCPU, 4GB RAM und 20GB Festplattenspeicherplatz. Die Netzwerkanbindung ist 1000Mbit/s und der Server hat eine IPv4 und IPv6 Adresse. Es kann natürlich bei vielen parallelen Räumen und Teilnehmer durch aus Sinn machen, einen dedizierten Server zu nutzen. Ich habe mich für das Betriebssystem Ubuntu Server 18.04.4 LTS entschieden.

Es empfiehlt sich auf Grund der Architektur einen Webserver als Reverse Proxy einzusetzen. Ich habe mich für den schlanken Nginx entschieden. Selbstverständlich wird auch Apache unterstützt.  Bitte unbedingt  das Ubuntu Package Repository benutzen. Bei Verwendung der Nginx Repository (Stable als auch Mainline) schlug die Installation von Jitsi Meet fehl.

IPv6 Problematik

Auf Grund verschiedener Rückmeldungen (z.B. hier  oder hier) im Communtiyforum von Jitsi gibt es Probleme in Verbindung mit IPv6.

tcp6       0      0 2a01:4f8:c17:x::4443 :::*                    LISTEN      999        21598      1057/java
tcp6       0      0 78.46.136.x:4443     :::*                    LISTEN      999        21593      1057/java
udp6       0      0 78.46.136.x:10000    :::*                                999        21577      1057/java
udp6       0      0 2a01:4f8:c17:x:10000 :::*                                999        21576      1057/java

Aus meiner Sicht gerade wichtig bei Verwendung vom Jigasi als DialIn in eine bestehende Konferenz. Denn bei Aufbau eines Telefonats können die Listner bzw. Ports nicht erreicht werden.

Für die Deaktivierung von IPv6 muss man den Namen der Netzwerkkarte(n) wissen.

ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 96:00:00:48:3b:ec brd ff:ff:ff:ff:ff:ff

Den Namen der Netzwerkkarte in Zeile x ändern und anschließend via Copy & Paste ausführen:

cp /etc/sysctl.conf /etc/sysctl.conf.$(date '+%Y-%m-%d_%H-%M-%S')
cat << EOF >> /etc/sysctl.conf
 
 
# Jitsi Meet - Bug - IPv4 Address on udp6 protocol
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1 
EOF

Abschließend die Änderungen neu laden:

sysctl -p

Definition des DNS-Namen, unter dem die Jitsi Installation erreichbar ist. Somit sind in der Regel keine Anpassungen an den weiteren Befehlen notwendig.

export FqdnJitsiServer=meet.wydler.eu

Installation von Nginx

apt update && apt upgrade -y && apt autoremove -y && apt autoclean
apt install -y nginx

systemctl start nginx
systemctl enable nginx

Wird keiner von beiden Webservern vorinstalliert, wird im Rahmen der Installation Jitsi automatisch der Webserver Jetty installiert.

Installation Jitsi Meet

Nun geht’s an die eigentliche Installation Jitsi Meet.  Zuerst muss das entsprechend Package Repository eingebunden werden. Denn die Anwendung ist nämlich nicht im Standard Package Repository vorhanden. Unabhängig davon stellen die Repositories des Softwareherstellers fast immer aktuellere Versionen zur Installation bereit.

wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | apt-key add - 
echo 'deb https://download.jitsi.org stable/' >> /etc/apt/sources.list.d/jitsi-stable.list
apt update

Start der Installation der Software und dessen abhängige Pakete.

apt-mark hold jitsi-meet-turnserver
apt install -y jitsi-meet

Im Rahmen der Installation der Software werden zwei wichtige Parameter nacheinander angefragt.

Zuerst muss der FQDN angegeben werden, unter dem die Instanz erreichbar sein wird. Dies setzt natürlich voraus, dass im DNS-Server der A und AAAA-Eintrag korrekt gesetzt sind. Anderenfalls scheitert ein Aufruf im Browser und somit an späterer Stelle auch der Abruf des Zertifikats bei Let’s Encrypt.

Der zweite Parameter ist die Abfrage des SSL Zertifikats. Für die Fertigstellung der Konfiguration reicht erst einmal ein Self-Signed Zertifikat.

Danach werden die verbleibenden Schritte der Installation automatisch durchgeführt.

Im Rahmen der Installation wurde automatisch auch die notwendige Konfiguration für Nginx erstellt. Diese ist unter /etc/nginx/sites-enabled/meet.wydler.eu.conf. Der Dateiname variiert natürlich je nach Installation. Nachstehende Schritte sollen die Sicherheit des Reverse Proxy verbessern, damit gleich von Anfang das Thema halbwegs angegangen ist.

cp /etc/nginx/sites-available/$FqdnJitsiServer.conf /etc/nginx/sites-available/$FqdnJitsiServer.conf.$(date '+%Y-%m-%d_%H-%M-%S')

sed -i -e 20c"\    listen 443 ssl http2;" /etc/nginx/sites-available/$FqdnJitsiServer.conf
sed -i -e 21c"\    listen [::]:443 ssl http2;" /etc/nginx/sites-available/$FqdnJitsiServer.conf
sed -i -e 24c"\    ssl_protocols TLSv1.2 TLSv1.3;" /etc/nginx/sites-available/$FqdnJitsiServer.conf
sed -i -e 26c"\    ssl_ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES256-CCM8:DHE-RSA-AES256-CCM:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA";" /etc/nginx/sites-available/$FqdnJitsiServer.conf
sed -i -e 27i"\    ssl_ecdh_curve secp384r1;" /etc/nginx/sites-available/$FqdnJitsiServer.conf
sed -i -e 28i"\    ssl_session_cache shared:ssl_session_cache:10m;" /etc/nginx/sites-available/$FqdnJitsiServer.conf

service nginx configtest
service nginx restart

Bevor wir nun das SSL-Zertifikat von Let’s Encrypt abrufen, ändern wir noch die Schlüssel von 2048 Bit auf 4096 Bit.

cp /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh.$(date '+%Y-%m-%d_%H-%M-%S')

sed -i -e 58c"\        --deploy-hook \$TURN_HOOK --rsa-key-size 4096" /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
sed -i -e 63c"\        --agree-tos --email \$EMAIL --rsa-key-size 4096" /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
sed -i -e 85c"\    --agree-tos --email \$EMAIL --rsa-key-size 4096" /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

Nun das Bash-Skript ausführen, welches die Entwickler von Jitsi mitliefern. Dieses sorgt dafür, dass neben dem Abruf des Zertifikats auch die Konfiguration bzw. der Webserver neu geladen wird.

/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

Gleich nach dem Start kann wird eine E-Mailadresse angegeben. An diese werden wichtige Informationen/Benachrichtigungen für das Zertifikat bzw. Account geschickt.

Es wird bei der Erstnutzung des Skripts das Paket „certbot-auto“ mit seinen Abhängigkeiten installiert. Das kann je nach Systemleistung einen Moment in Anspruch nehmen.

Wichtig ist der Text am Ende der Ausgabe. Nach der Installation wird automatisch versucht das Zertifikat abzurufen.

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for meet.wydler.eu
Using the webroot path /usr/share/jitsi-meet for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/meet.wydler.eu/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/meet.wydler.eu/privkey.pem
   Your cert will expire on 2020-06-20. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Configuring nginx

Somit ist die Grundeinrichtung erfolgreich durchgeführt. Jitsi Meet ist damit über den Browser https://meet.wydler.eu erreichbar.

Anpassung der STUN/TURN-Server

Die Entwickler haben inzwischen in der Konfiguration (/etc/jitsi/meet/meet.wydler.eu-config.js) von Jitsi Videobridge einen eigenen STUN Server hinterlegt. In vorherigen Versionen waren dort Server-Adressen von Google hinterlegt.  Was natürlich gerade unter dem Aspekt der EU-Datenschutzgrundverordnung definitiv in Frage gestellt werden sollte.

Aus technischer Sicht funktioniert der bereitgestellte STUN/TURN von Jitsi auch bei Einsatz von Firewalls. Die Google Server haben auf einem Highport 19xxx gelauscht. Ein STUN/TURN Server hört nach der Installation standardmäßig auf Port 3478. Beide Beispiele sind in geschützten Firmen Netzwerken bzw. der Einsatz von Firewalls mit Outbound Regelwerk oft nicht nutzbar.

Der STUN/TURN Server, welcher in der Konfiguration eingetragen ist, lauscht standardmäßig auf Port 443.  Dieser Port ist zu 98% aller Fälle überall freigeschaltet und damit ohne weitere Anpassungen an der Firewall nutzbar.

Wer natürlich auf deutsche Server bzw. Anbieter setzen möchte, kann die Konfiguration mit folgenden Befehlen überarbeiten.

cp /etc/jitsi/meet/$FqdnJitsiServer-config.js /etc/jitsi/meet/$FqdnJitsiServer-config.js.$(date '+%Y-%m-%d_%H-%M-%S')

sed -i -e 242c"\    useStunTurn: true," /etc/jitsi/meet/$FqdnJitsiServer-config.js
sed -i -e 348c"\        useStunTurn: true," /etc/jitsi/meet/$FqdnJitsiServer-config.js

sed -i -e 354c"\            \/\/ { urls: 'stun:meet-jit-si-turnrelay.jitsi.net:443' }" /etc/jitsi/meet/$FqdnJitsiServer-config.js
sed -i -e 355i"\            { urls: 'stun:stun.hosteurope.de:3478' }," /etc/jitsi/meet/$FqdnJitsiServer-config.js
sed -i -e 356i"\            { urls: 'stun:stun.t-online.de:3478' }," /etc/jitsi/meet/$FqdnJitsiServer-config.js
sed -i -e 357i"\            { urls: 'stun:stun.siplogin.de:3478' }," /etc/jitsi/meet/$FqdnJitsiServer-config.js

service jitsi-videobridge2 restart

Auf GitHub Gist gibt eine Liste von öffentlichen STUN Server. D.h. die Adressen können selbstverständlich beliebig ersetzt werden.

Footer auf der Startseite ergänzen

Gerade in Deutschland ist der Verweis auf die Datenschutzerklärung als auch Impressum eine Pflichtkür. Die verwendete Version der Software bietet leider keine Möglichkeit benutzerdefinierte Text/Links im Footer unterzubringen. Es geht unter der Wendung der DEB Pakete nur über einen Umweg (/usr/share/jitsi-meet/static/welcomePageAdditionalContent.html).

cp /usr/share/jitsi-meet/static/welcomePageAdditionalContent.html /usr/share/jitsi-meet/static/welcomePageAdditionalContent.html.$(date '+%Y-%m-%d_%H-%M-%S')

cat << EOF > /usr/share/jitsi-meet/static/welcomePageAdditionalContent.html
<template id = "welcome-page-additional-content-template">

<!-- 
22.03.2020, 13:17 Uhr / Wydler
https://community.jitsi.org/t/welcome-page-additional-content/17144/5
-->

<!-- CSS Start -->
<style>
    .welcome-page-content {
        display: flex;
        flex-direction: column;
        flex-grow: 1;
        justify-content: space-between;
        position: relative;
        z-index: 1;
        /*margin-top: 35px;*/
        width: 100%
    }
    .welcome-page-content .welcome-footer {
        color: #FFF;
        display: flex;
        padding-bottom: 20px;
        padding-top: 20px;
        width: 100%;
        z-index: 1
    }
    .welcome-page-content .welcome-footer-content a {
        color: #fff !important;
        text-decoration: underline
    }

    .welcome-page-content .welcome-footer-content {
        display: flex;
        justify-content: center;
        width: 100%;
        z-index: 2
    }

    .welcome-page-content .welcome-footer-about {
        display: flex;
        flex-direction: column;
        flex: 1;
        font-size: 14px;
        line-height: 20px;
        text-align: center;
        justify-content: center
    }

    .welcome-page-content .welcome-footer-about:last-child {
        margin-left: 4px
    }
    .welcome-page-content .welcome-footer-about .welcome-footer-main {
        color: #B02323;
        font-weight: bold;
        font-size: 120%;
        animation: blinker 4s step-start infinite;
    }
    @keyframes blinker {
        50% {
            opacity: 0;
        }
    }
</style>
<!-- CSS Ende -->

<!-- HTML Anfang -->
<div class="welcome-page-content">
  <div class="welcome-footer">
    <div class="welcome-footer-content">
      <div class="welcome-footer-about">
        <div class="welcome-footer-main">
          Am 25.04.2020 finden von 12:00 bis 12:30 Uhr Wartungsarbeiten statt.
        </div>
        <div>
          <a href="https://play.google.com/store/apps/details?id=org.jitsi.meet" rel="noopener" target="_blank">Google Play</a> |
          <a href="https://apps.apple.com/de/app/jitsi-meet/id1165103905" rel="noopener" target="_blank">Apple Appstore</a> |
          <a href="https://www.domain.de/datenschutz/" rel="noopener" target="_blank">Datenschutzerklärung</a> |
          <a href="https://www.domain.de/impressum/" rel="noopener" target="_blank">Impressum</a>
        </div>
      </div>
    </div>
  </div>
</div>

<!-- HTML Ende -->
</template>
EOF

Das Ergebnis als Screenshot.

Neben den Pflichtangaben habe ich z.B. noch die Links zu dem App bei Apple und Google verlinkt. Es bietet sich natürlich auch an ein FAQ oder eine Kurzanleitung zu verlinken. Damit auch nicht affine Personen nach wenigen Minuten startklar sind.

Diverse Anpassungen

Das Favicon der Webseite ist direkt im Verzeichnis „/usr/share/jitsi-meet/images/“ zu finden. Ich habe das neue Favicon via SCP auf von meinem Rechner auf dem Server kopiert. Danach mit dem „mv“ die Originaldatei umbenannt und mit demselben Befehl die neue Datei in das Zielverzeichnis verschoben.

Das Logo links oben kann über die Konfigurationsdatei ausgeblendet werden. Diese heißt „interface_config.js“ und liegt im Verzeichnis „/usr/share/jitsi-meet“. Dazu folgende Befehle ausführen:

cp /usr/share/jitsi-meet/interface_config.js /usr/share/jitsi-meet/interface_config.js.$(date '+%Y-%m-%d_%H-%M-%S')
sed -i -e 19c"\    SHOW_JITSI_WATERMARK: false," /usr/share/jitsi-meet/interface_config.js
sed -i -e 23c"\    SHOW_WATERMARK_FOR_GUESTS: false," /usr/share/jitsi-meet/interface_config.js

Es ist nicht notwendig ein Dienst o.ä. neu zu starten. Die Änderungen werden sofort wirksam.

Standardmäßig ist die Sprache der Oberfläche immer Englisch. Das ist natürlich gerade im privaten Umfeld etwas schwierig. Auch dieses Verhalten kann über die Konfigurationsdatei „interface_config.js“ angepasst werden.

cp /usr/share/jitsi-meet/interface_config.js /usr/share/jitsi-meet/interface_config.js.$(date '+%Y-%m-%d_%H-%M-%S')
sed -i -e 34c"\    LANG_DETECTION: true, \/\/ Allow i18n to detect the system language" /usr/share/jitsi-meet/interface_config.js

Der Titel im Browserfenster ist standardmäßig Jitsi Meet. Das ist natürlich gerade bei Unternehmen/Behörden ein Wunsch, dem Service einen eigenen Namen zugeben.

cp /usr/share/jitsi-meet/interface_config.js /usr/share/jitsi-meet/interface_config.js.$(date '+%Y-%m-%d_%H-%M-%S')
sed -i -e 31c"\    APP_NAME: 'Webconference Wydler'," /usr/share/jitsi-meet/interface_config.js
sed -i -e 32c"\    NATIVE_APP_NAME: 'Webconference Wydler'," /usr/share/jitsi-meet/interface_config.js

Wer möchte kann erzwingen, dass jeder Teilnehmer beim Betreten eines Raums einen Namen eingeben muss. Somit hat man in der Regel schnell ein Überblick, wer schon da ist und wer wer ist. Standardmäßig heißen die Teilnehmer „Fellow Jitster“.

cp /etc/jitsi/meet/$FqdnJitsiServer-config.js /etc/jitsi/meet/$FqdnJitsiServer-config.js.$(date '+%Y-%m-%d_%H-%M-%S')
sed -i -e 261c"\    requireDisplayName: true," /etc/jitsi/meet/$FqdnJitsiServer-config.js

Firewall

Last but not Least kommen wir nochmals auf den Punkt Sicherheit zurück.  Selbstverständlich darf die Grundkonfiguration einer Firewall grundsätzlich nicht fehlen.  Ich greife ich hier auf UFW zurück. Diese ist inzwischen standardmäßig bei der eingesetzten Distribution und Version standardmäßig dabei.

ufw allow ssh
ufw allow http
ufw allow https
ufw allow in 10000/udp

echo y | ufw enable
ufw status

Damit ist das System für einen produktiven Einsatz gerüstet. 🙂

Apps für Smartphone/Tablet

Selbstverständlich steht eine App sowohl für Apple als auch Google im jeweiligen Store kostenlos zur Verfügung.

TCP/IP-Tuning für Linux

Unter Linux sind die folgenden sysctl-Variablen für die TCP-Puffer zuständig: net.core.rmem_max und net.core.wmem_max geben die maximale Größe für Empfangs- und Sendepuffer von Netzwerkpaketen an.

Die beiden Variablen net.ipv4.tcp_rmem und net.ipv4.tcp_wmem enthalten jeweils drei Werte. Minimum, Default und Maximum. Der erste gibt den Mindestspeicher an, den ein TCP-Socket bekommt, auch wenn das System nur wenig Speicher hat. Ist ausreichend Speicher vorhanden, weist der Kernel einem TCP-Socket den über Default spezifizierten Wert zu. Bei Bedarf kann der Puffer bis hin zum Maximum erhöht werden. Dies erfolgt dynamisch durch den Kernel. Das hier angegebene Maximum darf allerdings nicht höher sein als das unter net.core.rmem_max beziehungsweise unter net.core.wmem_max eingestellte.

Je nach verfügbarem Hauptspeicher und Anbindung des Rechners im LAN oder ans Internet bieten sich andere Werte an. Riesige Puffer sind nur für Gigabit-Netzwerke notwendig. Ein Drehen an dem Default-Wert kann sich allerdings schon positiv auswirken. Beim Minimum sollten Sie keine Experimente machen und den Standardwert von 4096 beibehalten.

cp /etc/sysctl.conf /etc/sysctl.conf.$(date '+%Y-%m-%d_%H-%M-%S')
cat << EOF >> /etc/sysctl.conf
 
 
# increase Linux TCP buffer limits
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
 
# increase Linux autotuning TCP buffer limits
# min, default, and max number of bytes to use
net.ipv4.tcp_rmem = 10240 87380 10485760
net.ipv4.tcp_wmem = 10240 87380 10485760
 
EOF

Abschließend die Änderungen neu laden:

sysctl -p

Quelle: tecchannel.de

Konferenzräume absichern

Standardmäßig kann nach der Installation und Konfiguration von Jitsi Meet jeder Besucher/Gast einen Konferenzraum starten. Das ist gerade auf der Hinsicht der Moderationsrechte mit mehreren Teilnehmer oft problematisch. Denn der erste Teilnehmern im Konferenzraum erhält automatisch nit notwendigen Rechte, wenn weitere Teilnehmer denselben Raum betreten. Des Weiteren ist durch die freie Nutzung auch schnell eine rege Überlastung durch Dritte möglich, die primär nicht für die Nutzung des Systems vorgesehen sind und waren.

Aus diesem Grund gibt es eine Funktion mit den Namen „Secure Domain„, mit der eine freie Nutzung unterbunden wird. Nach Aktivierung können Konferenzräume ausschließlich mit Benutzernamen und Passwort erstellt werden. Folgende Änderungen sind für die Nutzung der Funktion notwendig.

Anpassung von prosody.

cp /etc/prosody/conf.avail/$FqdnJitsiServer.cfg.lua /etc/prosody/conf.avail/$FqdnJitsiServer.cfg.lua.$(date '+%Y-%m-%d_%H-%M-%S')

sed -i -e 20c"\        -- authentication = \"anonymous\"" /etc/prosody/conf.avail/$FqdnJitsiServer.cfg.lua
sed -i -e 21i"\        authentication = \"internal_hashed\"" /etc/prosody/conf.avail/$FqdnJitsiServer.cfg.lua

sed -i -e 73c"\    -- authentication = \"internal_plain\"" /etc/prosody/conf.avail/$FqdnJitsiServer.cfg.lua
sed -i -e 74i"\    authentication = \"internal_hashed\"" /etc/prosody/conf.avail/$FqdnJitsiServer.cfg.lua

cat << EOF >> /etc/prosody/conf.avail/$FqdnJitsiServer.cfg.lua
 
VirtualHost "guest.$FqdnJitsiServer"
    authentication = "anonymous"
    c2s_require_encryption = false
EOF

Anpassung von jicofo.

cp /etc/jitsi/jicofo/sip-communicator.properties /etc/jitsi/jicofo/sip-communicator.properties.$(date '+%Y-%m-%d_%H-%M-%S')

cat << EOF >> /etc/jitsi/jicofo/sip-communicator.properties
org.jitsi.jicofo.auth.URL=XMPP:$FqdnJitsiServer
EOF

Anpassung von Jtisi Meet.

cp /etc/jitsi/meet/$FqdnJitsiServer-config.js /etc/jitsi/meet/$FqdnJitsiServer-config.js.$(date '+%Y-%m-%d_%H-%M-%S')
sed -i -e 12c"\        anonymousdomain: 'guest.$FqdnJitsiServer'," /etc/jitsi/meet/$FqdnJitsiServer-config.js

Abschlißend alle  beteiltigen Dienste neu starten.

service prosody restart
service jicofo restart
service jitsi-videobridge2 restart

Versucht man danach einen Konferenzraum anzulegen, erhält die Person folgenden Hinweis.

Wer  einen Benutzernamen und ein Passwort hat, klickt auf „Ich bin der Organisator“. Es erscheint folgender Dialog:

Sind die Zugangsdaten korrekt, wird der Konferenzraum gestartet. Andere Teilnehmer sehen weiterhin den ersten Dialog bis eine Berechtige Person den Raum gestartet hat. Ist da der Fall, werden alle warteten Teilnehmer automatisch in den Raum aufgenommen.

Die Benutzerverwaltung kann bisher ausschließlich über die Konsole bzw. SSH erfolgen. Für die Verwaltung der Benutzerkonten habe ich zwei kl. Skripte geschrieben. Zum Einem um die Tipparbeit zu sparen. Zum anderen sollen Zufallspasswörter erstellt werden.

Benutzer anlegen

cat << EOF > /root/jitsi-meet-benutzer-anlegen.sh
#!/bin/bash
 
# Überprüfe, ob ein Argument übergeben wurde
if [ \$# -eq 0 ]
  then
    echo "Kein Benutzername übergeben!"
    exit 1;
fi
 
username=\$1
password=\$(openssl rand -hex 5)
 
prosodyctl register \$username $FqdnJitsiServer \$password
 
echo "Benutzername: \$username"
echo "Passwort: \$password"
EOF
chmod 700 /root/jitsi-meet-benutzer-anlegen.sh

Als einzigster Übergabeparameter wird ein Benutzernamen erwartet. Der DNS-Namen für Jitsi wird über die Variable $FqdnJitsiServer  automatisch übernommen.

root@meet:~# /root/jitsi-meet-benutzer-anlegen.sh test1
Benutzername: test1
Passwort: 4758388e1e
root@meet:~#

Die Zugangsdaten sind sofort aktiv und könne genutzt werden.

Benutzer löschen

cat << EOF > /root/jitsi-meet-benutzer-loeschen.sh
#!/bin/bash
 
# Überprüfe, ob ein Argument übergeben wurde
if [ \$# -eq 0 ]
  then
    echo "Kein Benutzername übergeben!"
    exit 1;
fi
 
username=\$1
 
prosodyctl unregister \$username $FqdnJitsiServer
EOF
chmod 700 /root/jitsi-meet-benutzer-loeschen.sh

Als einzigster Übergabeparameter wird ein Benutzernamen erwartet. Der DNS-Namen für Jitsi wird über die Variable $FqdnJitsiServer  automatisch übernommen.

root@meet:~# /root/jitsi-meet-benutzer-loeschen.sh test1
root@meet:~#

Wird keine Fehlermeldung ausgegeben, wurde der Benutzer erfolgreich gelöscht.

Teilnehmer sehen sich nicht

Wenn Smartphones/Tablets mit älteren Betriebssystemen (z.B. Android 7) zum Einsatz kommen, haben mich verschiedene Meldungen erreicht, dass die Teilnehmer zwar den selben Raum betreten, aber dort alleine sind. Nach diversen Tests mit Unterstützung von Dritten und betroffenen, meien ich eine Lösung dafür gefunden zu haben. Abhilfe schafft die Aktivierung von TLS 1.0 und TLS 1.1 in der Konfiguration vom Webserver Nginx für Jitsi Meet.

cp /etc/nginx/sites-available/$FqdnJitsiServer.conf /etc/nginx/sites-available/$FqdnJitsiServer.conf.$(date '+%Y-%m-%d_%H-%M-%S')
sed -i -e 24c"\    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;" /etc/nginx/sites-available/$FqdnJitsiServer.conf

service nginx configtest
service nginx reload

Die ein oder andere Anpassung werde ich sicherlich noch nachreichen.Weitere Ideen/Verbesserungsvorschläge sind natürlich gerne gesehen.  Das Ganze soll mit der Zeit wachsen…

Abonnieren
Benachrichtige mich bei
34 Comments
neueste
älteste
Inline Feedbacks
View all comments
Gert
23.06.2020 21:24

TOP
danke für die coole Anleitung .Habe es mit Ubuntu 20.04 installiert – funzt !

xycghyghygh
15.06.2020 04:24

Würde gerne Additional_Content kopieren, es kommt aber nur unformatierter Schraddelkram rüber.
 
Gruß Peter Büttner

Anleitungen um Jitsi-Meet auf eignem Server aufzusetzen – CBM-Blog
09.06.2020 00:48

[…] Anleitung von blog.wydler.eu […]

Thomas
08.06.2020 18:49

Hallo,
vielen Dank für die Anleitung. Wir haben schon einige Konferenzen abgehalten. Alles hat soweit funktioniert.
Ich hatte meine Seite durch einen Login auf dem Webserver geschützt. Jetzt wollte ich das weiter machen und nur das neu erstellen von Meetingräumen mit Usernamen und PW schützen.
 
Leider funktioniert dies nicht. Wenn ich prosody, jitsi-videobridge2 und nginx start ist alles in Ordnung mit dem Start.
 
Sobald ich aber jicofo starte oder neu starte wird die sip-communicator.properties gelöscht.
 
Ich gehe davon aus, das dadurch nicht zu einem Login aufgefordert wird.
 
Hatte jemand schon dieses Problem?
 
Bin für jede Hilfe dankbar.
 
Gruss
 
Thomas
 
 

Frank
06.06.2020 11:34

Hallo, vielen Dank für die super Anleitung. Ich habe dabei aber noch ein Problem, nach dem ergänzen des Footers auf der Startseite zeigt mein Jitsi nur noch eine graue Webseite an. Was habe ich falsch gemacht. Ich muss zugeben, ich bin nicht der größte Ubuntuuser und auch Webadmin. Vielleicht ist es ja nur eine Kleinigkeit, die ich übersehen habe?
 
Vielen Dank für deine/eure Hilfe..
Frank

Frank
Reply to  dw
09.08.2020 16:35

Hallo Daniel,
sorry, dass ich mich so lange nicht gemeldet habe. Ich präzisiere das mal. Der Fehler mit der grauen Webseite taucht erst auf, wenn ich die Änderungen zur Anzeige des Titels im Browserfenster ändere. Sobald ich dort nach deiner Anleitung unter dem Punkt „Diverse Änderungen“ den Titel ändere, sehe ich meine Startseite nur noch grau. Vielleicht hast du ja einen Tipp, was ich falsch gemacht haben könnte. Ich habe lediglich den Titel innerhalb der “ geändert, ansonsten alles übernommen.

Vielen Dank nochmal und dies ist wirklich eine super Anleitung!!
Grüße,
Frank

Frank
Reply to  dw
10.08.2020 21:07

Hallo Daniel,
ich hoffe, ich gehe dir nicht auf die Nerven! Ausschließen kann ich nicht, dass sich irgendwo ein Fehler eingeschlichen hat. Aber, eigentlich habe ich alles aus den Codeboxen kopiert. Mal eine Frage, ist es egal wo die Codezeilen in der interface_config.js stehen? Bei mir stehen sie unter dem Eintrag CONNECTION_INDICATOR_AUTO_HIDE_ENABLED: true,. Liegt da vielleicht ein Fehler?

Ansonsten danke ich dir sehr für deine Hilfe, ohne deine Anleitung hätte ich bisher keine Jitsi-Instanz zum Laufen gebracht.

Grüße,
Frank

Frank
Reply to  Frank
11.08.2020 17:22

Zur Antwort noch kurz, die Caches der Browser habe ich jeweils gelöscht. Getestet habe ich es mit Firefox, Chrome und Edge.

default
01.06.2020 20:43

Ich finde es sehr fragwürdig, wenn hier bei angeblichen Probleme mit IPv6 gleich wieder die „Brechstange“ rausgeholt wird und es vorsorglich systemweit deaktiviert wird.   Erstens gibt es laut den verlinkten Quellen gar kein Problem (nur falsch interpretierte Anzeigen) und zweitens gibt es eigentlich immer Möglichkeiten, zu steuern, auf welchen Adressen die Videobridge oder andere Dienste horchen.   Drittens und vielleicht am wichtigsten: Gerade bei Echtzeitanwendungen wie Videokonferenzen bietet IPv6 schon heute potentiell große Vorteile, denn das muntere herumgeNATte bei IPv4 geht deutlich auf Kosten der Performance. Schon vor Jahren konnte Facebook in Studien zeigen, dass durch den Einsatz von… Weiterlesen »

Klaus
15.05.2020 09:16

Moin, vielen dank für die gute Anleitung. Leider habe ich mit der Absicherung der Konferenzräume mittels Secure Domain keinen Erfolg. Ich habe die Anleitung eins zu eins so übernommen. Nachdem dem Starten der genannten Dienste wird die Jitsi Meet Seite nicht mehr angezeigt. Ich erhalte keine Fehlermeldung, lediglich eine graue Webseite. Irgendwie ist die Seite zwar da (Favicon, Webadresse wird angezeigt), aber ohne Inhalt.
Wo könnte das Problem sein, wo müßte ich nachjustieren? Jitsi Meet läuft ohne diese Anpassungen unter Ubuntu 18.04.4 ansonsten problemlos.

Werner
04.05.2020 16:54

das Benutzer-anlegen-Skript gibt aus:
./benutzer-anlegen.sh: line 3: [: $#: integer expression expected
./benutzer-anlegen.sh: line 9: syntax error near unexpected token ('
./benutzer-anlegen.sh: line 9:
password=\$(openssl rand -hex 5)‘

Habe den Quellcode kopiert und eingefügt. Wo liegt das Problem???

Fred
23.04.2020 20:45

>> Es sei an der Stelle erwähnt, dass die Passwörter leider im Klartext auf dem Server abgespeichert werden. Ich hoffe die Entwickler ändern dies in den kommenden Wochen noch entsprechend ab.

Das geht auch anders. Einfach internal_plain in internal_hashed ändern (2x in der Konfigurationsdatei vorhanden). Wenn es zu Problemen kommt, müssen evtl. die Benutzerpasswörter erneut erstellt werden, damit sie korrekt gehashed werden. Bei mir konnte sich der User focus nach der Änderung (weiter unten in der Konfigurationsdatei) nicht mehr mit der Videobridge verbinden, nachdem ich die Änderung vorgenommen hatte.

Micha
Reply to  Fred
26.04.2020 11:03

Wurde für den User focus das Passwort nach der Änderung gehashed und dann auch hashed hinterlegt?

Micha
23.04.2020 09:17

Hallo,

eine weitere sehr schöne Anleitung. Allerdings habe ich ein Problem mit der Absicherung der Räume. Die Konfiguration ist wie hier angegeben.
Haben Sie danach mal versucht mit der Android-App auf den Server zuzugreifen? Nachdem der Organisator einen Raum erstellt hat, kann ich mit dem Browser ohne Probleme als Gast hinzukommen, Mit der Android-App (von f-droid.org) muss ich mich allerdings mit den Organisator-Credentials anmelden und kann nicht als Gast dazustoßen. Können Sie das nachvollziehen?

Micha
Reply to  dw
26.04.2020 09:44

Hallo Daniel,

da Sie sicherlich nicht ganz ohne mobile Endgeräte leben werden, haben Sie sicherlich die adäquate aus dem Hause Apple. Tritt bei diesen und der Nutzung der iOS-App das von mir beschriebene Verhalten unter b) nicht auf?
Dass ein Raum mit Secure Domain noch nicht abgesichert ist, weiß ich. Dennoch Danke, dass Sie noch einmal explizi drauf hingewiesen haben.

Grüße Micha

Fred
16.04.2020 22:42

Hallo, besten Dank für die sehr schöne Anleitung. Ist bisher der ausführlichste Artikel zum Thema Sicherheit, den ich zu Jitsi-Meet gefunden habe.
Die sysctl-Werte waren für 4GB Ram ausgelegt. Da mein Vserver über 2GB Ram verfügt, nehme ich an, es würde Sinn machen, sämtliche Werte auf die Hälfte zu reduzieren?

P.F
09.04.2020 14:40

Followed your guide. Server on internal network. Alsi accessed from there.
But every (about) 20 seconds i got „You have been disconnected“.

Any hints ?

Eigener TURN Server für Jitsi Meet bereitstellen – Aus der IT – Praxis…
04.04.2020 14:25

[…] Fall soll der TURN-Server in Verbindung mit Jitsi Meet betrieben werden. Dazu habe ich bereits diesen Beitrag geschrieben, welcher als Basis für diesen Aritkel […]

Holger

Gute Anleitung! Vor allem mit den DSGVO Anpassungen an der Startseite. Eine Frage;

In der aktuellen Debian Installation wird ja bereits ein TURN Server mitgeliefert und konfiguriert, aber irgendwie nicht aktiviert, jedenfalls nicht für TCP. Gibt es eine Möglichkeit, diesen TURN Server auch für TCP ans Laufen zu bekommen, oder ist zwingend eine weitere Kiste nötig?

fred
Reply to  Holger
23.04.2020 20:55

Die Konfigurationsdatei für den mitgelieferten Turnserver (Coturn) liegt unter /etc/turnserver.conf Ich habe dort unter anderem die folgende Anpassung vorgenommen 1. die Zeile no-tcp auskommentiert: #no-tcp 2. den listening port geändert, da tatsächlich Jitsi-Meet nach einem Update nicht mehr auf dem Port 443 funktioniert hat und irgendwie mit nginx in die Quere gekommen ist: #listening-port=443 listening-port=4443 ^^Den Port auch in den anderen Config-Dateien verändern, ich meine in der prosody config und in der /jitsi/meet/mein-server-config.js. Ansonsten wird soweit ich weiß ein ganz normaler Coturn mitinstalliert, den man ohne Probleme nach der Anleitung von dw (mit meinen Änderungen) verwenden kann. Bei mir funktioniert… Weiterlesen »

34
0
Would love your thoughts, please comment.x
()
x
Back to top