Einrichten von Jitsi Meet – kostenlose Videokonferenzen für alle

[Letzte Aktualisierung: 27.03.2020, 22:43] Aus aktuellen Anlass habe ich mich wie viele Andere mit der Open Source Videokonferenz Software Jitsi Meet beschäftigt. Nachstehnd 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:

cat << EOF >> /etc/sysctl.conf
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

Installation von Nginx

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

sed -i -e 5i"\    listen [::]:80;" /etc/nginx/sites-available/meet.wydler.eu.conf
sed -i -e 10c"\    listen 443 ssl http2;" /etc/nginx/sites-available/meet.wydler.eu.conf
sed -i -e 11i"\    listen [::]:443 ssl http2;" /etc/nginx/sites-available/meet.wydler.eu.conf
sed -i -e 12c"\    ssl_protocols TLSv1.2 TLSv1.3;" /etc/nginx/sites-available/meet.wydler.eu.conf
sed -i -e 22i"\    ssl_session_cache shared:ssl_session_cache:10m;" /etc/nginx/sites-available/meet.wydler.eu.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.

sed -i -e 43c"\    --agree-tos --email $EMAIL--rsa-key-size 4096" /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
sed -i -e 65c"\    --agree-tos --email $EMAIL--rsa-key-size 4096" /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

Nun das Bashskript ausführen, welches die Entwickler von Jitsi mitliefern. Dieses sorgt dafür, dass neben der 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 seinem 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-Server

Die Entwickler haben standardmäßig in der Konfigurations (/etc/jitsi/meet/meeting.izbw.de-config.js) von Ijtsi Videobridge STUN Server von Google hinterlegt. Das ist grundsätzlich nichts verwerfliches aber unter dem Aspekt der EU-Datenschutzgrundverordnung auf jeden Fall für Installation bei Unternehmen oder sogar Behörden nicht vertretbar.

sed -i -e 327c"\            { urls: 'stun:stun.hosteurope.de:3478' }," /etc/jitsi/meet/meet.wydler.eu-config.js
sed -i -e 328c"\            { urls: 'stun:stun.t-online.de:3478' }," /etc/jitsi/meet/meet.wydler.eu-config.js
sed -i -e 329c"\            { urls: 'stun:stun.siplogin.de:3478' }," /etc/jitsi/meet/meet.wydler.eu-config.js

service jitsi-videobridge 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 unter zubringen. 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.orginal

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
    }
</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>
          <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 Apps bei Apple und Google verlinkt. Es bietet sich natürlich auch an ein FAQ oder eine Kurzanleitung zu verlinken. Damit auch unbedürftige Personen nach wenigen Minuten startklar sind.

Diverse Anpassungen

Das Favicon der Webseite ist direkt im Verzeichnis „/usr/share/jitsi-meet“ zu finden. Ich habe das neue Favicon via SCP auf von meinem Rechner auf dem Server kopiert. Danach mit dem „mv“ die Orginaldatei umbenannt und mit dem selben 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.logo.orginal
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.sprache.orginal
sed -i -e 34c"\    LANG_DETECTION: true," /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.titel.orginal
sed -i -e 31c"\    APP_NAME: 'Webconference Service Wydler'," /usr/share/jitsi-meet/interface_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:20000/udp

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 jeweilgen 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.

cat << EOF >> /etc/sysctl.conf
# increase Linux TCP buffer limits
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152

# increase Linux autotuning TCP buffer limits
# min, default, and max number of bytes to use
net.ipv4.tcp_rmem = 4096 87380 2097152
net.ipv4.tcp_wmem = 4096 65536 2097152
EOF

Abschließend die Änderungen neu laden:

sysctl -p

Quelle: tecchannel.de

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…

Hinterlasse einen Kommentar

avatar
  Abonnieren  
Benachrichtige mich bei
Back to top