So installierst du Apache Guacamole unter Debian 11

Apache Guacamole ist ein kostenloses und quelloffenes Remote-Desktop-Gateway, mit dem du dich aus der Ferne über verschiedene Protokolle wie SSH, RDP und VNC mit deinem Computer/Server verbinden kannst. Apache Guacamole wird von der Apache Software Foundation verwaltet und steht unter der Apache License 2.0.

Apache Guacamole ist ein clientloses Remote-Desktop-Gateway. Du kannst auf Apache Guacamole nur mit einem Webbrowser zugreifen, und zwar von überall und zu jeder Zeit. Der Einsatz von Apache Guacamole empfiehlt sich, wenn du mehrere Remote-Betriebssysteme mit unterschiedlichen Protokollen verwendest, z. B. Windows mit RDP, Linux mit VNC und SSH.

In diesem Lernprogramm installierst und konfigurierst du Apache Guacamole auf einem Debian 11 Bullseye. Dazu gehört die Installation einiger abhängiger Pakete und des Apache Tomcat 9, dann die Erstellung des Guacamole-Servers und die Installation der Java-Anwendung, der Guacamole-Webanwendung. Zum Schluss richtest du Nginx als Reverse Proxy für die Guacamole-Webanwendung ein, mit der du von überall auf deine Server zugreifen kannst, solange du einen Webbrowser hast.

Voraussetzungen

Um dieses Tutorial durchzuführen, brauchst du die folgenden Voraussetzungen

  • Einen Server mit mindestens 2 GB RAM, auf dem Debian 11 Bullseye läuft.
  • Einen Benutzer oder Nicht-Root-Benutzer mit Root-Rechten.
  • Grundkenntnisse im Umgang mit dem nano-Editor. Du kannst auch deinen bevorzugten Editor wie z.B. vim verwenden.

Installation der Build-Abhängigkeiten

Als erstes installierst du einige Build-Abhängigkeiten, um den Apache Guacamole Server zu bauen. Dazu gehören einige grundlegende Pakete wie„libvncserver-dev“ für die Unterstützung des VNC-Protokolls,„libssh2-1“ für das SSH-Protokoll,„freerdp2-dev“ für das RDP-Protokoll und„libwebsockets-dev“ für die Unterstützung von Kubernetes.

Für die Telnet-Unterstützung wirst du „libtelnet-dev“ nicht installieren. Das liegt daran, dass Telnet als altes Protokoll gilt und nicht sicher ist.

1. Aktualisiere jetzt deine Paketliste, indem du den folgenden apt-Befehl ausführst.

sudo apt update

2. Danach installierst du die Abhängigkeiten für die Erstellung des Apache Guacamole Servers, indem du den folgenden Befehl ausführst.

sudo apt install -y freerdp2-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libcairo2-dev libjpeg62-turbo-dev libjpeg-dev libpng-dev libtool-bin libpango1.0-dev libpango1.0-0 libssh2-1 libwebsockets16 libwebsocketpp-dev libossp-uuid-dev libssl-dev libwebp-dev libvorbis-dev libpulse-dev libwebsockets-dev libvncserver-dev libssh2-1-dev openssl

Je nach Internetverbindung deines Servers kann es einige Zeit dauern, bis dieser Befehl ausgeführt wird.

Installation von Apache Tomcat 9

Nach der Installation der Build-Abhängigkeiten installierst du Apache Tomcat 9. Dieses Paket wird für die Guacamole-Webanwendung benötigt, die in Java geschrieben ist.

1. Führe den folgenden Befehl aus, um den Apache Tomcat 9 auf deinem System zu installieren.

sudo apt install -y tomcat9 tomcat9-admin tomcat9-common tomcat9-user

2. Nachdem der Apache Tomcat 9 installiert ist, starte und aktiviere den Apache Tomcat-Dienst, indem du den folgenden Befehl ausführst. Auf Debian-basierten Systemen wird der Apache Tomcat 9 mit dem Dienst„tomcat9“ ausgeliefert.

sudo systemctl enable --now tomcat9

3. Wenn alles in Ordnung zu sein scheint, überprüfe den Status des Dienstes„tomcat9„, indem du den folgenden Befehl ausführst.

sudo systemctl status tomcat9

Du wirst die folgende Ausgabe erhalten. Vergewissere dich, dass der Dienst„tomcat9„aktiv (läuft)“ ist.

Aktiviere den Apache Tomcat9 Dienst

Guacamole-server kompilieren

In diesem Abschnitt wirst du den Guacamole-Server herunterladen und kompilieren. Dies ist die Hauptkomponente von Apache Guacamole, die Bibliotheken für die Verbindung zu entfernten Servern und Desktops enthält. Der Guacamole-Server enthält die C-Bibliothek „libguacd“ und alle Bibliotheken für unterstützte Protokolle sowie das Herzstück von Guacamole, guacd.

Der guacd verwaltet alle Client-Verbindungen, die von der Guacamole-Webanwendung getunnelt werden, und stellt dann in ihrem Namen eine Verbindung zu entfernten Servern und Desktops her. Wenn du den Guacamole-Server erstellst und kompilierst, hast du einen neuen Dienst „guacd“ auf deinem System.

1. Beginne damit, das Arbeitsverzeichnis zu„/usr/src“ zu wechseln. Der gesamte Quellcode zum Bauen und Kompilieren wird in diesem Verzeichnis abgelegt.

cd /usr/src

2. Nun lädst du den Quellcode des Guacamole-Servers herunter, indem du den unten stehenden wget-Befehl ausführst. Achte darauf, dass du auf der Guacamole Download-Seite die neueste Version von Guacamole-server kopierst. Zum Zeitpunkt der Erstellung dieses Artikels ist die neueste Version 1.3.0.

wget https://dlcdn.apache.org/guacamole/1.3.0/source/guacamole-server-1.3.0.tar.gz

3. Entpacke dann den Quellcode und du erhältst ein neues Verzeichnis„guacamole-server-VERSION-NUMBER“. Navigiere in dieses Verzeichnis.

tar -xzvf guacamole-server-1.3.0.tar.gz
cd guacamole-server-*/

4. Überprüfe nun alle Systemanforderungen für die Erstellung des Guacamole-Servers und richte deine Umgebung ein, indem du den folgenden Befehl ausführst. Die Option„–with-systemd-dir=/etc/systemd/system/“ wird verwendet, um die systemd-Dienstdatei einzurichten, die im Verzeichnis„/etc/systemd/system/“ verfügbar sein wird.

./configure --with-systemd-dir=/etc/systemd/system/

Du erhältst eine ähnliche Ausgabe wie diese:

------------------------------------------------
guacamole-server version 1.3.0
------------------------------------------------

Library status:

freerdp2 ………… yes
pango …………… yes
libavcodec ………. yes
libavformat………. yes
libavutil ……….. yes
libssh2 …………. yes
libssl ………….. yes
libswscale ………. yes
libtelnet ……….. no
libVNCServer …….. yes
libvorbis ……….. yes
libpulse ………… yes
libwebsockets ……. yes
libwebp …………. yes
wsock32 …………. no

Protocol support:

Kubernetes …. yes
RDP ……….. yes
SSH ……….. yes
Telnet …….. no
VNC ……….. yes

Services / tools:

guacd …… yes
guacenc …. yes
guaclog …. yes

FreeRDP plugins: /usr/lib/x86_64-linux-gnu/freerdp2
Init scripts: no
Systemd units: /etc/systemd/system/

Type „make“ to compile guacamole-server.

Sieh dir die Abschnitte„Bibliotheksstatus“ und„Protokollunterstützung“ an. Du kannst die Protokollunterstützung anpassen, indem du zusätzliche Abhängigkeiten und Bibliotheken installierst.

5. Kompiliere und installiere den Guacamole-Server, indem du den unten stehenden Befehl ausführst.

make
make install

Der Kompilierungs- und Installationsprozess kann einige Zeit in Anspruch nehmen.

6. Nachdem alles abgeschlossen ist, führe den folgenden Befehl aus, um alle neuen Systembibliotheken anzuwenden.

sudo ldconfig

In diesem Abschnitt hast du das Paket Guacamole-server installiert. Als Nächstes wirst du einige notwendige Konfigurationen für den Guacamole-Server erstellen.

Guacamole-Server einrichten

Damit der Guacamole-Server funktioniert, legst du das Konfigurationsverzeichnis„/etc/guacamole/“ an und erstellst eine neue Datei„guacamole.properties“ als Standardkonfiguration für den Guacamole-Server, die Datei„logback.xml“ für das Guacamole-Protokollierungssystem und die Datei„user-mapping.xml“, in der die Authentifizierung der Guacamole-Benutzer und die Verbindungen zu entfernten Servern und Desktops festgelegt werden.

1. Um zu beginnen, führe den folgenden Befehl aus, um ein neues Verzeichnis„/etc/guacamole/“ mit den zusätzlichen Verzeichnissen„extensions“ und„lib“ darin zu erstellen. Füge dann die Umgebungsvariable„GUACAMOLE_HOME=/etc/guacamole“ in die Datei „/etc/default/tomcat9“ ein. Dadurch wird der Tomcat 9 Servlet-Container angewiesen, das Verzeichnis„GUACAMOLE_HOME“ in der Datei „/etc/guacamole/“ nachzuschlagen.

mkdir -p /etc/guacamole/{extensions,lib}
echo 'GUACAMOLE_HOME=/etc/guacamole' >> /etc/default/tomcat9

2. Erstelle nun die Hauptkonfiguration„guacamole.properties“ mit nano oder deinem bevorzugten Editor.

sudo nano /etc/guacamole/guacamole.properties

Gib die folgende Konfiguration ein:

# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port:     4822

# user mapping and user connections
user-mapping:    /etc/guacamole/user-mapping.xml

  • Die Option „guacd-hostname“ legt den Hostnamen oder die IP-Adresse fest, unter der der guacd-Dienst ausgeführt wird. In diesem Lernprogramm wird der guacd-Dienst unter localhost ausgeführt.
  • Die Option„guacd-port“ legt den Standardport für den guacd-Dienst fest. In dieser Anleitung wird der Port„4822“ für den guacd-Dienst verwendet.
  • Die Option „user-mapping“ legt die Dateikonfiguration für die Benutzerauthentifizierung und eine Liste der verfügbaren Verbindungen fest. In diesem Lernprogramm wird die Datei „/etc/guacamole/user-mapping.xml“ verwendet, um Benutzer und Verbindungen für den Guacamole-Server zu definieren. Wenn du eine andere Authentifizierungsmethode verwenden möchtest, schau in der Guacamole-Dokumentation nach.

Speichere und schließe die Datei.

3. Als Nächstes erstellst du eine neue Konfiguration„loogback.xml“ für Logging und Debugging. Standardmäßig protokolliert die Guacamole nur auf der Konsole. Mit dieser Konfiguration kann Guacamole über das Logback Logging Framework protokollieren.

sudo nano /etc/guacamole/logback.xml

Füge die folgenden Konfigurationszeilen hinzu.

<configuration>

<!– Appender for debugging –>
<appender name=“GUAC-DEBUG“ class=“ch.qos.logback.core.ConsoleAppender“>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} – %msg%n</pattern>
</encoder>
</appender>

<!– Log at DEBUG level –>
<root level=“debug“>
<appender-ref ref=“GUAC-DEBUG“/>
</root>

</configuration>

Speichere und schließe die Konfigurationsdatei.

4. Jetzt generierst du einen neuen md5-Passwort-Hash und erstellst eine neue Datei für die Benutzerauthentifizierung und die Verbindungen von Guacamole.

Führe den folgenden Befehl aus, um den md5-Passwort-Hash zu erzeugen. Achte darauf, dass du das Passwort mit deinem sicheren Passwort änderst.

echo -n StrongPasswordUserJohnDoe | openssl md5

Du erhältst eine Ausgabe des mod5 gehashten Passworts. Kopiere es auf deinen Zettel.

(stdin)= aca22211ffcfb8aa8ad7627195ad4fce

5. Danach erstellst du mit dem nano-Editor eine neue Datei„user-mapping.xml„.

sudo nano /etc/guacamole/user-mapping.xml

Gib die folgenden Konfigurationen ein. Achte darauf, dass du den „Benutzernamen“ und das„Passwort“ änderst. Sieh dir auch den Abschnitt„<connection>…</connection>“ an und füge deine Verbindungsdaten zu Servern oder Desktops hinzu.

<user-mapping>

<!– Another user, but using md5 to hash the password
(example below uses the md5 hash of „PASSWORD“) –>
<authorize
username=“johndoe“
password=“aca22211ffcfb8aa8ad7627195ad4fce“
encoding=“md5″>

<!– First authorized connection –>
<connection name=“SSH localhost“>
<protocol>ssh</protocol>
<param name=“hostname“>localhost</param>
<param name=“port“>22</param>
<param name=“username“>johndoe</param>
<param name=“password“>SSHPASSWORD</param>
</connection>

<!– Second authorized connection –>
<connection name=“localhost“>
<protocol>vnc</protocol>
<param name=“hostname“>localhost</param>
<param name=“port“>5901</param>
<param name=“password“>VNCPASS</param>
</connection>

<!– Third authorized connection –>
<connection name=“otherhost“>
<protocol>vnc</protocol>
<param name=“hostname“>otherhost</param>
<param name=“port“>5900</param>
<param name=“password“>VNCPASS</param>
</connection>

</authorize>

</user-mapping>

Speichere und schließe die Datei.

Damit hast du die Konfiguration des Guacamole-Servers abgeschlossen. Als Nächstes installierst und konfigurierst du die Guacamole-Webanwendung, also die Webanwendung, die du in deinem Browser siehst.

Installation der Guacamole-Client-Webanwendung

In diesem Abschnitt installierst du die Guacamole-Webanwendung auf deinem System. Dazu lädst du die kompilierte Binärdatei der Guacamole-Webanwendung herunter und legst sie im Tomcat-Verzeichnis „webaps“ ab.

1. Navigiere in deinem Arbeitsverzeichnis zu„/usr/src“ und lade die kompilierte Guacamole-Webanwendung ‚.war‚ mit dem Befehl wget herunter. Besuche die Guacamole-Downloadseite und kopiere den Link für die neueste Version der Guacamole-Webanwendung.

cd /usr/src
wget https://dlcdn.apache.org/guacamole/1.3.0/binary/guacamole-1.3.0.war

2. Verteile nun die Java-Binäranwendung„guacamole-VERSION.war“ im Tomcat-Verzeichnis„/var/lib/tomcat9/webapps/“, indem du den folgenden Befehl ausführst. Dadurch wird die Guacamole-Webanwendung über den Apache Tomcat Servlet-Container zugänglich.

sudo cp guacamole-1.3.0.war /var/lib/tomcat9/webapps/guacamole.war

3. Starte danach den Tomcat 9-Dienst neu, um eine neue Webanwendung anzuwenden.

sudo systemctl restart tomcat9

4. Starte und aktiviere als Nächstes den Dienst„guacd„, indem du den unten stehenden Befehl ausführst.

sudo systemctl enable --now guacd

Überprüfe ihn dann mit dem folgenden Befehl.

sudo systemctl status guacd

Du erhältst eine Ausgabe wie im Screenshot unten.

Aktiviere den guacd-Dienst Apache Guacamole

Damit hast du die Installation der Guacamole-Serveranwendung (Backend) und der Guacamole-Webanwendung (Frontend) abgeschlossen. Als Nächstes richtest du Nginx als Reverse Proxy für die Guacamole-Webanwendung ein.

Nginx Reverse Proxy für Guacamole einrichten

In diesem Abschnitt installierst du den Nginx-Webserver und konfigurierst ihn als Reverse-Proxy für die Guacamole-Webanwendung. So kannst du den Domainnamen für deine Guacamole-Webanwendung einrichten und sie mit SSL-Zertifikaten sichern.

1. Um loszulegen, führe den folgenden„apt„-Befehl aus, um Nginx-Pakete zu installieren.

sudo apt install nginx -y

2. Nachdem alle Nginx-Pakete installiert sind, erstelle eine neue virtuelle Hostdatei „guacamole“ im Verzeichnis„/etc/nginx/sites-available„. Alle Konfigurationen, die sich auf den Guacamole Reverse Proxy beziehen, werden in dieser Datei gespeichert.

sudo nano /etc/nginx/sites-available/guacamole

Gib die folgende Konfiguration ein. Achte darauf, dass du den Domainnamen und den Pfad der SSL-Zertifikate änderst. In diesem Beispiel wird die Domain„example.io“ mit dem privaten SSL-Schlüssel„privkey.pem“ und dem öffentlichen Schlüssel„fullchain.pem“ verwendet, und die Bot-Zertifikate sind im Verzeichnis „/etc/letsencrypt/live/exmaple.io/“verfügbar.

server {
    listen      80;
    server_name example.io;
    rewrite     ^   https://$server_name$request_uri? permanent;
}

server {
listen      443 ssl http2;
server_name example.io;

root /var/www/html;
index index.html;

location / {
try_files $uri $uri/ =404;
}

ssl_certificate /etc/letsencrypt/live/example.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.io/privkey.pem;

access_log /var/log/nginx/guacamole-access.log;
error_log /var/log/nginx/guacamole-error.log;

location /guacamole/ {
proxy_pass http://127.0.0.1:8080/guacamole/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
access_log off;
}
}

Speichere und schließe die Datei.

3. Aktiviere nun die virtuelle Hostdatei„guacamole„, indem du einen neuen symbolischen Link zum Verzeichnis„/etc/nginx/sites-enabled/“ erstellst. Überprüfe dann alle Nginx-Konfigurationen, um zu sehen, ob es Syntaxfehler gibt.

sudo ln -s /etc/nginx/sites-available/guacamole /etc/nginx/sites-enabled/
sudo nginx -t

Du erhältst die Ausgabe„Syntax OK„, was bedeutet, dass die Konfiguration keinen Fehler aufweist.

Nginx als Reverse Proxy einrichten Apache Guacamole

4. Starte als Nächstes den Nginx-Dienst neu, um eine neue Konfiguration anzuwenden, und überprüfe dann den Status, indem du den folgenden Befehl ausführst.

sudo systemctl restart nginx
sudo systemtl status nginx

Du erhältst eine ähnliche Ausgabe wie im folgenden Screenshot. Der Nginx-Dienst ist„aktiv (läuft)„.

Überprüfe den Status des Nginx-Dienstes

5. Wenn du die Guacamole-Webanwendung in einer anderen Sub-URL bereitstellen willst, änderst du die Option„location /guacamole/ { ...}“ in den neuen Pfad„location /neuer-pfad/ { ...}“ und füge die Option„proxy_cookie_path“ zu deinem neuen Pfad hinzu (siehe unten).

location /new-path/ {
    proxy_pass http://127.0.0.1:8080/guacamole/;
    proxy_buffering off;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_cookie_path /guacamole/ /new-path/;
    access_log off;
}

In diesem Abschnitt hast du die Installation und Konfiguration von Nginx als Reverse-Proxy für die Guacamole-Webanwendung abgeschlossen. Damit ist die Installation von Apache Guacamole abgeschlossen und die Anwendung ist von deiner Domain aus erreichbar.

Überprüfen der Apache Guacamole-Installation

In diesem Abschnitt überprüfst du die Installation von Apache Guacamole.

Öffne zunächst deinen Webbrowser und gib den Domainnamen für deine Guacamole-Installation mit dem Standardpfad„/guacamole“ ein.

https://example.io/guacamole/

Nun siehst du die unten stehende Guacamole-Anmeldeseite. Gib deinen Benutzernamen und dein Passwort ein, die du in der Datei„user-mapping.xml“ festgelegt hast, und klicke dann auf die Schaltfläche Anmelden.

Apache Guacamole Login Seite

Nachdem du dich angemeldet hast, siehst du eine Liste mit den definierten Verbindungen für deine Nutzer.

Apache Guacamole Liste Verbindungen

Klicke auf den Namen der Verbindung, um dich mit dem Zielserver zu verbinden. In diesem Beispiel wird eine Verbindung mit dem lokalen Server über das SSH-Protokoll hergestellt.

Jetzt siehst du eine neue SSH-Terminalsitzung auf deinem Server.

Guacamole SSH zum lokalen Server

Fazit

Herzlichen Glückwunsch! In diesem Lernprogramm hast du gelernt, wie du Apache Guacamole auf Debian 11 Bullseye installierst. Außerdem hast du gelernt, wie du die Benutzerauthentifizierung und die Verbindungen mit Hilfe der Konfigurationsdatei„user-mapping.xml“ einrichtest und Nginx als Reverse Proxy für die Guacamole-Webanwendung einrichtest, so dass du Guacamaloe unter dem Domainnamen ausführen und mit SSL-Zertifikaten sichern kannst.

Das könnte dich auch interessieren …