Tobias Scheible Cyber Security & IT-Forensik Dozent
Server Installation

Jitsi Meet unter Ubuntu 20.04 installieren

In dieser Anleitung zeige ich, wie Jitsi Meet auf einem Root-Server mit Ubuntu 20.04 installiert wird. Die Installationsroutine der Open-Source-Software ist vorbildlich, damit kann sehr einfach ein eigener Server installiert werden. Zusätzlich zeige ich noch, wie Ubuntu abgesichert werden kann.

Mittwoch, 01. Juli 2020
5 Kommentare

24.10.2020 Update: Korrekturen und Abschnitt Jitsi Meet Aktualisierung hinzugefügt.

Jitsi Meet ist ein quelloffenes Videokonferenzsystem, das ohne Anmeldung und Installation in einem Webbrowser genutzt werden kann. Durch die einfache Installation kann sehr einfach ein eigener Jitsi Meet Server installiert werden.

Die Installation auf einem Ubuntu 18.04 habe ich bereits im Artikel „Installation eines eigenen Jitsi Meet Servers“ beschrieben. Im April dieses Jahres wurde die neue LTS-Version von Ubuntu mit Langzeitunterstützung bis April 2025 veröffentlicht. Daher habe ich mich entschlossen, eine neue Anleitung zu schreiben.

Öffentlicher Jitsi Meet Server (meet.scheible.it):

Das Ziel dieser Anleitung ist die Installation von Jitsi Meet auf einem Root-Server. Dabei sind die Erklärungen auch für Anfänger verständlich gehalten. Die Einrichtung des Servers erfolgt dabei Schritt für Schritt inklusive der Absicherung vor der eigentlichen Jitsi Meet Installation.

Als Basis für diese Anleitung habe ich einen dedizierten Root-Server verwendet. Als Option habe ich das Betriebssystem „Ubuntu 20.04 LTS minimal“ ausgewählt. Für die Konfiguration verwende ich meine Domain meet.scheible.it, sie muss immer durch die eigene ersetzt werden.

Jitsi Meet Server
SSH-Login mit Putty auf einem Root-Server
SSH-Login Jitsi Meet Server SSH-Login mit Putty auf einem Root-Server
SSH Verbindung

Wird ein Linux Root-Server neu eingerichtet bzw. initialisiert, ist auf ihm meist nur ein SSH-Server aktiviert. Mittels SSH ist es möglich, über eine verschlüsselte Verbindung mit einer Konsole auf einem entfernten Server zu arbeiten und ihn zu administrieren. Um SSH unter Windows zu nutzen, kann die Software Putty verwendet werden (Anleitung). In den nächsten Schritten werden die Befehle auf der SSH-Konsole eingegeben.

Ubuntu absichern

Nach der Bestellung eines Root-Servers kann mit dem Root-Benutzer per SSH zugegriffen werden. Dies muss geändert werden, um die IT-Sicherheit des Servers zu erhöhen. Zusätzlich zeige ich, wie mit dem Tool Fail2Ban eingesetzt wird, um Angreifer abzuwehren, und die Konfiguration einer Firewall.

Passwort ändern

passwd

Als Erstes ändern wir das Passwort des Root-Benutzers, da dies vom Provider generiert worden ist. Dazu muss der Befehl passwd eingegeben werden. Anschließend erfolgt die Abfrage des Passwortes und die dazugehörige Wiederholung. Hier sollte ein möglichst langes und einmaliges Passwort gewählt werden.

# passwd
New password:
Retype new password:
passwd: password updated successfully

Benutzer anlegen

useradd

Damit der Login nicht mit dem Root-Benutzer erfolgen muss, wird ein neuer Benutzer mit eingeschränkten Rechten angelegt. Dazu wird der Befehl useradd gefolgt von dem Namen des Benutzers eingegeben. Es folgt die Eingabe des Passworts mit der Kontrolle und einige weitere Abfragen, die einfach mit Enter quittiert werden können. Am Ende muss die Korrektheit der Eingaben bestätigt werden.

# adduser admin
Adding user `admin' ...
Adding new group `admin' (1000) ...
Adding new user `admin' (1000) with group `admin' ...
Creating home directory `/home/admin' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for admin
Enter the new value, or press ENTER for the default
        Full Name []: Admin
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y

Jetzt muss unbedingt getestet werden, ob dieser neue Benutzer funktioniert, bevor die nächsten Schritten durchgeführt werden. Dazu einfach ein zweites Putty Fenster öffnen, eine Verbindung herstellen und mit dem neuen Benutzer anmelden. Nach dem Login den Befehl su eingeben, um in die Rolle des Root-Benutzers zu wechseln.

SSH absichern

Danach können wir die Konfiguration von SSH anpassen. Dazu muss die Datei /etc/ssh/sshd_config bearbeitet werden. Wir verwenden den Editor Nano (Anleitung).

# nano /etc/ssh/sshd_config

Als Erstes ändern wir den Port für den SSH-Zugriff. Das erhöht die Sicherheit zwar nur ein wenig, da mit einem Port-Scan sehr schnell der geänderte SSH-Port gefunden werden kann, aber einige automatisierte Tools werden ausgebremst. Es sollte ein Port über 1024 und nicht höher als 65535 gewählt werden.

Port 10022

Um den externen SSH-Login des Root-Benutzers nicht mehr zu erlauben, suchen wir den Eintrag PermitRootLogin und ändern den Wert auf no.

PermitRootLogin no

Unter dem Block mit diesem Eintrag fügen wir die folgende Zeile hinzu, damit sich unser neuer Benutzer anmelden kann:

AllowUsers admin

Anschließend können die Änderungen mit der Tastenkombination STRG + O gespeichert werden. Die Nachfrage nach dem Dateinamen kann einfach mit Enter bestätigt werden. Um den Editor zu verlassen, wird die Tastenkombination STRG + X verwendet.

Um die Änderungen zu übernehmen, muss der SSH-Dienst neugestartet werden:

# service ssh restart

Wichtig ist, dass das aktuelle Putty-Fenster nicht geschlossen werden darf. Es muss erst überprüft werden, ob die Einstellungen funktionieren. Dazu wird wieder ein zweites Putty-Fenster geöffnet und ein Login mit dem geänderten Port durchgeführt.

Keyfile Für Fortgeschrittene: Um noch mehr Sicherheit zu erreichen, sollte der SSH-Login per Keyfiel durchgeführt werden (Anleitung).

Fail2Ban installieren

Fail2Ban ist ein Tool, das fehlgeschlagene Login Versuche analysiert. Nach einer fest definierten Anzahl von Fehlschlägen, wird der Verursacher geblockt. Damit können sehr effektiv Brute-Force-Angriffe, die versuchen, das Passwort zu erraten, abgewehrt werden. Als Erstes muss das Tool installiert werden:

# apt install fail2ban

Als Nächstes muss eine lokale Kopie der Konfigurationsdatei erstellt werden:

# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Die neu erstellte Datei wird mit dem nano Editor geöffnet:

# nano /etc/fail2ban/jail.local

Und die folgenden Zeilen ganz am Ende der Datei eingefügt:

#
# SSH servers
#

[sshd]
enabled	= true
port    	= ssh
filter	= sshd
logpath	= /var/log/auth.log
maxretry 	= 3

Zum Abschließen der Konfiguration muss Fail2Ban neugestartet werden:

root@meet ~ # service fail2ban restart

Firewall konfigurieren

Als Software für die Firewall wird ufw (uncomplicated firewall) eingesetzt. Damit lässt sich eine unkomplizierte kommandozeilenbasierte Konfiguration der Firewall vornehmen. Als Erstes muss die Software installiert werden:

# apt install ufw

Nach der Installation von ufw kann ein einzelner Port mit dem Parameter allow freigegeben werden. Als Erstes muss unbedingt der SSH-Port freigegeben werden, damit ein weiterer Zugriff nach der Aktivierung der Firewall noch möglich ist.

# ufw allow 10022

Zum Abschluss kann die Firewall mit dem folgenden Befehl aktiviert werden:

# ufw enable
Jitsi Meet

Für die Funktionen von Jitsi Meet müssen noch weitere Port freigehalten werden.

# ufw allow 80/tcp
# ufw allow 443/tcp
# ufw allow 4443/tcp
# ufw allow 10000/udp
# ufw enable

Anschließend sollte die Konfiguration der Firewall für Jitsi Meet noch einmal überprüft werden:

# ufw status verbose
Jitsi Meet Sicherheit
Ausgabe der Ports für Jitsi Meet in der Firewall Konfiguration
Jitsi Meet Firewall Ausgabe der Ports für Jitsi Meet in der Firewall Konfiguration

Jitsi Meet installieren

Die Installation von Jitsi Meet auf einem eigenen Server ist sehr einfach. Die nachfolgenden Schritte sind beschrieben, um möglichst viele Szenarien abzudecken.

Vorbereitungen

Vor der Installation von Jitsi Meet müssen zur Vorbereitung ein paar Konfigurationen vorgenommen werden.

System Konfiguration

Für einen reibungslosen Betrieb muss in der Datei /etc/systemd/system.conf die Anzahl der zulässigen Prozesse eingetragen werden. Dazu müssen die folgenden Einträge am Ende hinzugefügt werden:

DefaultLimitNOFILE=65000  
DefaultLimitNPROC=65000  
DefaultTasksMax=65000

Damit die Einträge wirksam sind, muss der Dienst Systemd neugestartet werden:

 # systemctl daemon-reload

Als nächster Schritt muss die verwendete Domain konfiguriert werden, damit die verschiedenen Module von Jitsi Meet reibungslos zusammenarbeiten können.

# hostnamectl set-hostname meet.scheible.it 

Zusätzlich muss in der Datei /etc/hosts ebenfalls die Domain als localhost eingetragen werden. Dazu kann die Domain einfach in der ersten Zeile am Ende hinzugefügt werden.

# nano /etc/hosts
01: 127.0.0.1 localhost.localdomain localhost meet.scheible.it
Software-Pakete

Als Erstes wird das System auf den aktuellen Stand gebracht und alle Ubuntu Updates installiert:

# apt update && apt upgrade

Jetzt muss überprüft werden, ob das universe Repositorie eingerichtet ist. Dies kann mit dem folgenden Befehl überprüft werden:

root@meet ~ # grep ^deb /etc/apt/sources.list

In der folgenden Ausgabe muss der folgende Eintrag vorhanden sein:

deb http://de.archive.ubuntu.com/ubuntu/ focal universe

Falls nicht, müssen die folgenden Befehle ausgeführt werden:

# apt install software-properties-common
# apt-add-repository universe

Jetzt muss noch das folgende Paket installiert werden:

# apt install apt-transport-https

Zum Abschluss werden die Software-Quellen von Jitsi Meet mit den nachfolgenden beiden Zeilen hinzugefügt und die Paketquelle aktualisiert.

# curl https://download.jitsi.org/jitsi-key.gpg.key | sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg'
# echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/' | tee /etc/apt/sources.list.d/jitsi-stable.list > /dev/null
# apt update
Jitsi Meet Paketquellen
In der Liste der Ausgabe erscheint nun die Paketquelle download.jitsi.org
Jitsi Meet Instalaltion In der Liste der Ausgabe erscheint nun die Paketquelle download.jitsi.org

Installation

Nun kann die eigentliche Installation von Jitsi Meet beginnen. Der Download und die Installation von jitsi Meet werden dabei mit dem folgenden Befehl initiiert:

# apt -y install jitsi-meet

Nachdem die Jitsi Meet Pakete heruntergeladen und installiert worden sind, erfolgt eine Abfrage der Domain und der SSL-Konfiguration.

TEXT
Eingabe der Domain während der Installation von Jitsi Meet
TEXT Eingabe der Domain während der Installation von Jitsi Meet
TEXT
An dieser Stelle können vorhandene SSL-Zertifikate angegeben werden oder später ein Let’s Encrypt Zertifikat generiert werden
TEXT An dieser Stelle können vorhandene SSL-Zertifikate angegeben werden oder später ein Let’s Encrypt Zertifikat generiert werden

Danach ist die Installation von Jitsi Meet abgeschlossen.

SSL-Zertifikat

Als Nächstes muss noch das Let’s Encrypt Zertifikat für die sichere HTTPS-Verbindung eingerichtet werden. An dieser Stelle gibt es einen Unterschied zu der Installation unter Ubuntu 18.04. Da das Softwarepaket certbot-auto nicht vorhanden ist, schlägt die Einreichung mit der Fehlermeldung „E: Package ‚python-virtualenv‘ has no installation candidate“ fehl. Dies kann aber einfach behoben werden. Dazu muss das Softwarepaket certbot installiert werden:

# apt install certbot

Das Paket hat einen anderen Namen, daher muss das Let’s Encrypt Script von Jitsi Meet noch angepasst werden:

# sudo sed -i 's/\.\/certbot-auto/certbot/g' /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

Danach kann die Einrichtung des Let’s Encrypt Zertifikat gestartet werden:

/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
TEXT
Erfolgreiche Installation des Let’s Encrypt Zertifikats von Jitsi Meet unter Ubuntu 20.04
TEXT Erfolgreiche Installation des Let’s Encrypt Zertifikats von Jitsi Meet unter Ubuntu 20.04

Jetzt kann die Domain aufgerufen werden und das Web-Interface von Jitsi Meet wird angezeigt:

TEXT
Startseite von Jitsi Meet auf einem Root-Server mit Ubuntu 20.04
TEXT Startseite von Jitsi Meet auf einem Root-Server mit Ubuntu 20.04

Konfiguration

Geschwindigkeits-optimierung

Informationen zur Geschwindigkeitsoptimierung von Jitsi Meet habe ich im Blog-Artikel „Installation eines eigenen Jitsi Meet Servers“ bereits beschrieben.

Datenschutz

Zusätzliche Einstellungen, um den Datenschutz von Jitsi Meet zu verbessern, habe ich im Blog-Artikel „Datenschutzfreundliche Konfiguration von Jitsi Meet“ beschrieben.

STUN/TURN-Server

Die Technologie der STUN-Server kommt aus dem VoIP-Bereich und ermöglicht einem Rechner hinter einer restriktiven Firewall trotzdem eine Verbindung aufzubauen. Mit dem TURN-Protokoll können Teilnehmer Daten austauschen, auch wenn keine direkte Verbindung besteht. Der Server dient dabei als Relay (Zwischenstation). In früheren Versionen nutzte Jitsi Meet hierfür STUN/TURN-Server von Google und wurde dafür kritisiert. Mit den Updates im April 2020 wurden diese Einträge entfernt und durch den eigenen Server von Jitsi meet-jit-si-turnrelay.jitsi.net ersetzt.

Inzwischen wurde eine einfache Methode realisiert, um einen eigenen coturn STUN/TURN-Server einzurichten. Dazu wird das folgende Softwarepaket installiert:

# apt install jitsi-meet-turnserver

Anschließend muss in der Konfigurationsdatei turnserver.conf die IP-Adresse des Servers eingetragen werden.

/etc/turnserver.conf
12: external-ip=1.2.3.4

Nun muss nur coturn neugestartet werden und der eigene STUN/TURN-Server ist aktiv.

# /etc/init.d/coturn restart
Konfiguration

Als Nächstes muss noch die Konfiguration an zwei Stellen überprüft werden.

/etc/prosody/conf.avail/meet.scheible.it.cfg.lua
08: turncredentials = {
09:   { type = "stun", host = "meet.scheible.it", port = "4446" },
10:   { type = "turn", host = "meet.scheible.it", port = "4446", transport = "udp" },
11:   { type = "turns", host = "meet.scheible.it", port = "443", transport = "tcp" }
12: };
/etc/jitsi/meet/meet.scheible.it-config.js
347: // Use XEP-0215 to fetch STUN and TURN servers.
348: useStunTurn: true,
349:
350: // The STUN servers that will be used in the peer to peer connections
351: stunServers: [
352:     { urls: 'stun:meet.scheible.it:4446' }
353: ],
Firewall

Als letzter Schritt muss noch der Port 4446 für UDP-Datenverkehr freigegeben werden:

# ufw allow 4446/udp

Jitsi Meet Aktualisierung

Update

Die Macher und die Community hinter Jitsi Meet sind sehr fleißig und veröffentlichen regelmäßig Updates. Auf der Github Seite des Projektes werden die Änderungen in einer Changelog zusammengefasst. Hier lohnt sich regelmäßig ein Blick, welche neuen Funktionalitäten Jitsi Meet inzwischen bietet. Die Aktualisierung von Jitsi Meet erfolgt gleich wie das Update des Ubuntu Systems, da die Softwarequellen fest eingebunden sind.

# sudo apt-get update && sudo apt-get upgrad

Hinweis: Bei der Aktualisierung werden zum Teil die Konfigurationsdateien überschrieben. Daher bietet es sich an ein spezielles Update Script zu verwenden.

Welche Version von Jitsi Meet derzeit installiert ist, kann übrigens mit dem folgenden Befehl abgefragt werden:

dpkg -l | grep jitsi

Jitsi Meet Artikelserie

Dieser Blogbeitrag ist Teil der Artikelserie „Videokonferenzen mit Jitsi Meet“, die sich mit dem Webkonferenzsystem Open-Source-System Jitsi für Video-, Web- und Telefonkonferenzen beschäftigt. Die Artikelserie zu Jitsi umfasst die folgenden Themen:

Changelog

24.10.2020Korrekturen und Abschnitt Jitsi Meet Aktualisierung hinzugefügt.

15.07.2020Abschnitt über die Installation des STUN/TURN-Server hinzugefügt.

Über Tobias Scheible

Tobias Scheible

Hallo, mein Name ist Tobias Scheible. Ich bin begeisterter Informatiker und Sicherheitsforscher mit den Schwerpunkten Cyber Security und IT-Forensik. Mein Wissen teile ich gerne anhand von Fachartikeln hier in meinem Blog. Als Referent halte ich Vorträge und Workshops für Verbände und Unternehmen u. a. auch offene Veranstaltungen für den VDI und die IHK.

Kommentare

Christian am 14. August 2020 um 16:25 Uhr

Eine tolle Anleitung! Vielen Dank für die ganze Arbeit die dahinter steckt und geteilt wird!

Ich habe einen Server mit ubuntu 20.04 und Apache2 auf dem auch andere Server wie Moodle laufen. Moodle erreiche ich unter https://meineseite.ddns.net/moodle. Das ganze zielt auf das Verzichenis /var/www/html.

Mein Frage: Kann man Jitsi Meet so installieren, dass meine bisher vorhandenes Setup möglichst beibehalten kann und Jitsi dann über https://meineseite.ddns.net/jitsi erreichbar ist?

Ehrlich gesagt, bislang bin ich damit gescheitert. Aber vielleicht ist jemand so nett und veröffentlicht ein gutes Step-by-Step-Tutorial, damit auch Anfänger dies hinbekommen – ähnlich der obigen Anleitung.

Eine Installation nach obiger Anleitung klappte einwandfrei. Allerdings konnte ich mit allen anderen vorhandenen Servern wie Moodle, Nextcloud, etc nichts mehr anfangen – weil nicht mehr erreichbar. Ergo habe ich seither das Projekt Jitsi Meet über Apache2 leider auf Eis legen müssen. Die Recherche im Internet ergab für mich ebenfalls kein klares Bild, ausser viele gutgemeinte Ratschläge, die allesamt nicht funktionierten.

Schon jetzt vielen Dank!

Tobias am 23. August 2020 um 13:28 Uhr

Hallo Christian,
diese Art von Konfiguration habe bisher nicht aufgesetzt. Vielleicht hilft dir der Link aus dem offiziellen Support Forum: Apache as proxy.
Viele Grüße Tobias

MacFori am 15. August 2020 um 08:53 Uhr

Wenn ich nach der Installation vorgehe habe ich in der Datai
/etc/turnserver.conf
die Default Einträge:
listening-port=3478
tls-listening-port=5349

Müsste ich da nicht noch etwas anpassen.
Da Jitsi den Turnserver nicht automatisch installiert hat, fehlen m.E. die Proxyweiterleitungen in dern NGINX Config.

Leider bin ich da nicht so versiert, dass ich weiß, wo ich jetzt am besten selbst ansetzen muss.
Vielen Dank schon für einen weiteren Tipp zur super Anleitung.

Tobias am 23. August 2020 um 13:26 Uhr

Hallo,
Jitsi Meet nutzt Coturn. Dies ist ein eigener Services der eigene Ports nutzt.
Grüße Tobias

Michael am 12. Oktober 2020 um 13:18 Uhr

Hallo Tobias,

klasse Anleitung. Konnte dank der Anleitung in kurzer Zeit zwei Server für unsere Studierenden aufsetzen. Wir machen jetzt einen großen Teil der Seminare online. Das läuft, dank leistungsfähiger Root-Server, wie geschnitten Brot.

Auch das: https://scheible.it/datenschutzfreundliche-konfiguration-jitsi-meet/
war sehr hilfreich. Habe zusätzlich noch die prosody Benutzerverwaltung konfiguriert und ein Python-Skript, welches mir 178 Benutzer mit Passwort anlegt, geschrieben. Dann noch ein paar Tweaks (eigens Logo, keine Konferenzliste, usw.).

Deine Anleitungen waren dabei sehr hilfreich! Danke dafür.

Da ich zwei Server brauchte, habe ich versucht, den zweiten aus einem Snapshot des ersten zum Laufen zu bekommen.
Das hat aber nicht geklappt.

Ich werde jetzt mal meine Python Kenntnisse nutzen, um entweder die Installation weiter zu automatisieren, oder, um den Snapshot so zu bearbeiten, dass der Server mit anderem Zertifikat unter einer anderen Domain läuft, ohne alle Schritte neu zu durchlaufen.

Grüße aus Wilhelmshaven
Michael

Schreibe einen Kommentar!

Hilfe zum Kommentieren

Um kommentieren zu können, geben sie bitte mindestens ihren Namen und ihre E-Mail-Adresse an. Bitte nutzen Sie die Kommentarfunktion nicht dazu, andere zu beleidigen oder Spam zu verbreiten. Trolle und Spammer sind hier unerwünscht! Unangemessene Kommentare, die zum Beispiel gegen geltendes Recht verstoßen oder eine Gefährdung anderer Besucher darstellen, werden gelöscht oder angepasst.

Name: Ihr Name, der oberhalb des Kommentars steht, gerne auch Ihren echten Namen, das erleichtert die Kommunikation für alle. Sollte ein Spam-Keyword als Name verwendet werden, kann dieses entfernt oder korrigiert werden.

E-Mail: Ihre E-Mail Adresse dient zur Identifizierung weiterer Kommentare und sie haben die Möglichkeit, ein Avatar-Bild zu verwenden. Dazu müssen Sie mit Ihrer E-Mail Adresse bei Gravatar angemeldet sein. Die E-Mail Adresse wird natürlich nicht veröffentlicht und nicht weitergegeben.

Website: Hier können Sie ihren eigenen Blog bzw. ihre eigene Website eintragen, dadurch wird Ihr Name und Ihr Avatar-Bild verlinkt. Werden rein kommerzielle Angebote offensichtlich beworben, setze ich den Link auf nofollow und unangemessene werden einfach entfernt.

Erlaubte HTML-Tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <hr> <big> <small> <sub> <sup> <u>

Ihre E-Mailadresse wird nicht veröffentlicht. Mit dem Absenden anerkennen Sie die Datenschutzhinweis des Blogs.