Zum Inhalt springen

Apache/Guacamole: Unterschied zwischen den Versionen

Aus Foxwiki
DanielZorin (Diskussion | Beiträge)
DanielZorin (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(20 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Apache Guacamole''' - Gateway für den Fernzugriff auf Computersysteme
'''Apache/Guacamole''' - Gateway zum Fernzugriff auf Computersysteme


== Beschreibung ==
== Beschreibung ==
Zeile 12: Zeile 12:


== Komponenten ==
== Komponenten ==
Guacamole setzt sich aus verschiedenen Komponenten zusammen
* Die [[Webanwendung]] bildet die Schnittstelle, über die die Benutzer mit Guacamole interagieren können
* Diese stellt die visuelle Oberfläche bereit, mit der entfernte Computersysteme über den Browser aufgerufen und gesteuert werden können
* Im Hintergrund arbeitet der Dienst "guacd", welcher als [[Backend und Frontend|Backend]]-Dienst fungiert
* Dieser Dienst übersetzt und optimiert dynamisch native Protokolle in das spezifische Guacamole-Protokoll, um eine effiziente Kommunikation und Darstellung im Webbrowser zu ermöglichen


=== Webanwendung ===
Guacamole besteht aus mehreren logisch getrennten Komponenten:
Die Webanwendung dient als Benutzeroberfläche und ist für Authentifizierung sowie Autorisierung zuständig
* Sie implementiert nicht direkt Fernzugriffsprotokolle
* Stattdessen verlässt sie sich auf den Dienst "guacd", der diese Protokolle ins Guacamole-Protokoll übersetzt
* Die Serverseite dieser Anwendung ist in [[Java (Programmiersprache)|Java]] programmiert und wird in einem Servlet-Container, wie [[Apache Tomcat]] oder [[Jetty (Webserver)|Jetty]], ausgeführt
* Auf der Clientseite, die im Webbrowser abläuft, kommt [[JavaScript]] zum Einsatz


=== Dienst "guacd" ===
* Webanwendung (Guacamole-Client)
"guacd" ist ein Backend-Dienst, der Anfragen von der Webanwendung entgegennimmt und Verbindungen zu entfernten Computersystemen herstellt
* guacd (Guacamole Proxy Daemon)
* Dabei lädt "guacd" dynamisch Unterstützung für verschiedene Fernzugriffsprotokolle, was bedeutet, dass weder "guacd" noch die Webanwendung die Einzelheiten der verschiedenen Fernzugriffsprotokolle kennen müssen
* Protokollmodule (RDP, VNC, SSH usw.)
* Sowohl "guacd" als auch die dazugehörigen Client-Plugins greifen auf die Bibliothek "libguac" zurück, die das Guacamole-Protokoll abstrahiert und die Kommunikation mit der Webanwendung erleichtert
* gemeinsame Bibliothek ''libguac''






== Installation ==
* Im Hintergrund arbeitet der Dienst "guacd", welcher als [[Backend und Frontend|Backend]]-Dienst fungiert
* Dieser Dienst übersetzt und optimiert dynamisch native Protokolle in das spezifische Guacamole-Protokoll, um eine effiziente Kommunikation und Darstellung im Webbrowser zu ermöglichen


=== Installation über Docker Compose ===
=== Frontend ===
; Webanwendung
Die Webanwendung dient als Benutzeroberfläche und ist für Authentifizierung sowie Autorisierung zuständig
* Die [[Webanwendung]] ist eine Schnittstelle, über die Benutzer mit Guacamole interagieren, auf entfernte Computersysteme zugreifen und diese über einen Browser verwalten können
* Die Serverseite ist als Java-Webanwendung implementiert und läuft in einem Servlet-Container wie Apache Tomcat oder Jetty
* Im [[Webbrowser]] wird eine [[JavaScript]]-Anwendung ausgeführt, die Ein- und Ausgabedaten (Tastatur, Maus, Bildschirm) über das Guacamole-Protokoll an ''guacd'' überträgt bzw. von dort empfängt


1. Vorbereitung des Arbeitskatalogs


<syntaxhighlight lang="bash" highlight="1" copy line>
mkdir /opt/guacamole-docker && cd /opt/guacamole-docker
</syntaxhighlight>


2. Zunächst muss eine Datei namens ''docker-compose.yml'' mit folgendem Inhalt erstellt werden:
=== Backend ===
; guacd
''guacd'' fungiert als Backend-Dienst und Protokoll-Proxy zwischen der Webanwendung und den Zielsystemen.


<syntaxhighlight lang="yaml" highlight="" copy line>
* nimmt Verbindungsanforderungen der Webanwendung entgegen,
services:
* stellt Sitzungen zu entfernten Systemen über die jeweils konfigurierten Fernzugriffsprotokolle her,
  db:
* übersetzt Datenströme zwischen dem Guacamole-Protokoll und den nativen Protokollen (RDP, VNC, SSH usw.),
    image: mariadb:latest
* kapselt die Protokolldetails und stellt eine einheitliche Schnittstelle für die Webanwendung bereit
    container_name: guac-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: "ROOT_SUPER_SECRET"
      MYSQL_DATABASE: "guacamole_db"
      MYSQL_USER: "guacamole_user"
      MYSQL_PASSWORD: "GUAC_DB_PASSWORD"
    volumes:
      - db-data:/var/lib/mysql
      - ./initdb.sql:/docker-entrypoint-initdb.d/initdb.sql:ro
    networks:
      - guac-net
  guacd:
    image: guacamole/guacd:latest
    container_name: guacd
    restart: unless-stopped
    networks:
      - guac-net
  guacamole:
    image: guacamole/guacamole:latest
    container_name: guacamole
    restart: unless-stopped
    depends_on:
      - guacd
      - db
    environment:
      GUACD_HOSTNAME: guacd
      GUACD_PORT: "4822"


      MYSQL_ENABLED: "true"
; Fernzugriffsprotokolle
      MYSQL_HOSTNAME: db
Die Unterstützung für konkrete Fernzugriffsprotokolle wird durch dynamisch ladbare Client-Plugins bereitgestellt.
      MYSQL_PORT: "3306"
      MYSQL_DATABASE: "guacamole_db"
      MYSQL_USERNAME: "guacamole_user"
      MYSQL_PASSWORD: "GUAC_DB_PASSWORD"


      WEBAPP_CONTEXT: "ROOT"
* Weder ''guacd'' noch die Webanwendung müssen die Details der einzelnen Fernzugriffsprotokolle kennen
    networks:
* Sowohl ''guacd'' als auch die Plugins verwenden die gemeinsame Bibliothek ''libguac'', die das Guacamole-Protokoll implementiert und die Kommunikation mit der Webanwendung abstrahiert
      - guac-net
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.guac.rule=Host(`guacamole.example.com`)"
      - "traefik.http.routers.guac.entrypoints=websecure"
      - "traefik.http.routers.guac.tls.certresolver=letsencrypt"
      - "traefik.http.services.guac.loadbalancer.server.port=8080"


  traefik:
== Anwendungsbereiche ==
    image: traefik:latest
Typische Einsatzgebiete von Guacamole sind Umgebungen, in denen zentraler, browserbasierter Fernzugriff benötigt wird
    container_name: traefik
    restart: unless-stopped
    command:
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"


      # HTTP > HTTPS
* Bereitstellung von administrativem Remotezugriff auf Server und Netzwerkgeräte ohne direkten Zugriff auf deren Management-Schnittstellen
      - "--entrypoints.web.address=:80"
* Zugriff auf Labor-, Schulungs- oder Poolrechner, bei denen Bedienoberflächen über das Web bereitgestellt werden
      - "--entrypoints.websecure.address=:443"
* Betrieb als zentraler Jump-Host, über den Verbindungen in abgeschottete Netzwerksegmente geführt werden
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
* Ersatz oder Ergänzung [[VPN]]-Lösungen, wenn ausschließlich grafischer oder terminalbasierter Zugriff notwendig ist
      - "--entrypoints.web.http.redirections.entryPoint.scheme=https"


      # Let's Encrypt ACME HTTP challenge
== Authentifizierung / Autorisierung ==
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.letsencrypt.acme.email=admin@example.com"
      - "--certificatesresolvers.letsencrypt.acme.storage=/acme.json"


    ports:
;Authentifizierung
      - "80:80"
Die Authentifizierung in Guacamole ist modular aufgebaut und kann über unterschiedliche Backends erfolgen:
      - "443:443"


    volumes:
* Die integrierte Datenbankauthentifizierung ermöglicht die Verwaltung von Benutzern, Gruppen und Berechtigungen innerhalb eines relationalen Datenbanksystems.
      - /var/run/docker.sock:/var/run/docker.sock:ro
:* Zugriffsrechte auf Verbindungen, Ordner und Freigaben werden direkt in der Datenbank definiert.
      - ./acme.json:/acme.json


    networks:
* Eine Authentifizierung über [[OpenID Connect]] oder SAML erlaubt die Integration in bestehende Identity-Provider-Infrastrukturen. 
      - guac-net
:* Single-Sign-On ermöglicht eine zentrale Anmeldung für unterschiedliche Dienste. 
:* Anspruchsbasierte Zuordnung von Rollen und Rechten vereinfacht die zentrale Verwaltung.


volumes:
* Es können auch externe Verzeichnisdienste wie LDAP oder Active Directory für die zentrale Benutzerverwaltung angeschlossen werden
  db-data:


networks:
;Autorisierung
  guac-net:


</syntaxhighlight>
Die Autorisierung erfolgt objektbasiert. 
:* Zugriffe auf Verbindungen, Ordner, Parameter und administrative Funktionen werden durch Berechtigungen gesteuert 
:* Rechte können Benutzern direkt oder über Gruppen zugewiesen werden


{| class="wikitable options big"
! Variable
! Wert
! Beschreibung
|-
| MYSQL_ROOT_PASSWORD
| ''ROOT_SUPER_SECRET''
| Root-Passwort des MariaDB-Servers
|-
| MYSQL_DATABASE
| ''guacamole_db''
| Name der Guacamole-Datenbank, die vom MariaDB-Container erstellt und vom Guacamole-Server verwendet wird
|-
| MYSQL_USER
| ''guacamole_user''
| Datenbankbenutzer für Guacamole (wird im MariaDB-Container angelegt und vom Guacamole-Server genutzt)
|-
| MYSQL_PASSWORD
| ''GUAC_DB_PASSWORD''
| Passwort des Guacamole-Datenbankbenutzers
|-
| GUACD_HOSTNAME
| ''guacd''
| Hostname bzw. Docker-Servicename des guacd-Dienstes
|-
| GUACD_PORT
| ''4822''
| TCP-Port, auf dem guacd Verbindungen annimmt
|-
| MYSQL_ENABLED
| ''true''
| Aktiviert die MySQL-/MariaDB-Authentifizierung im Guacamole-Server
|-
| MYSQL_HOSTNAME
| ''db''
| Hostname bzw. Docker-Servicename des MariaDB-Servers
|-
| MYSQL_PORT
| ''3306''
| TCP-Port des MariaDB-Servers
|-
| MYSQL_USERNAME
| ''guacamole_user''
| Datenbankbenutzername, den der Guacamole-Server für Verbindungen verwendet
|-
| MYSQL_PASSWORD
| ''GUAC_DB_PASSWORD''
| Passwort des von Guacamole verwendeten Datenbankbenutzers
|-
| WEBAPP_CONTEXT
| ''ROOT''
| Kontextpfad der Guacamole-Webanwendung; ''ROOT'' platziert die Anwendung direkt unter ''/'' anstatt unter ''/guacamole''
|}


3. Jetzt muss die Struktur der Guacamole-Datenbank vorbereitet werden.
== Sicherheit ==
Beim Betrieb von Guacamole sind insbesondere folgende Punkte relevant:


<syntaxhighlight lang="bash" highlight="1" copy line>
* Obligatorische durchgängige HTTPS-Verschlüsselung zwischen Browser und Gateway
docker run --rm guacamole/guacamole:latest /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
* Platzierung von Guacamole in einer [[DMZ|demilitarisierten Zone]] mit eingeschränktem Zugriff auf interne Systeme
</syntaxhighlight>
* Härtung des guacd-Dienstes und der Protokollmodule, insbesondere im Hinblick auf exponierte RDP- und VNC-Zugänge
:* Verwenden Sie für RDP und VNC zuverlässige Authentifizierungsmechanismen und Protokollversionen mit Verschlüsselung
:* Einführung einer Begrenzung der Anfragehäufigkeit und eines Schutzes vor Brute-Force-Angriffen
* Protokollierung von Anmeldevorgängen und Sitzungsaufbauten zu Audit- und Nachvollziehbarkeitszwecken
:* Authentifizierungsprotokolle sicher speichern


* Dieser Befehl generiert das SQL-Schema Guacamole, ohne das die Datenbank die erforderlichen Tabellen und Anfangsdatensätze nicht erstellen kann


4. Start der Container
== Troubleshooting ==
<syntaxhighlight lang="bash" highlight="1" copy line>
docker compose up -d
</syntaxhighlight>


* Die Weboberfläche ist unter folgender Adresse erreichbar: ''http://<IP_or_Domain_Name>:8080/''
=== XRDP Tastatur ===
 
; Lösung des Problems mit der Eingabe von Zeichen in anderen Sprachen als Englisch
<noinclude>
: Um deutsche Zeichen über XRDP in Guacamole korrekt eingeben zu können, musst du in den Verbindungseinstellungen als Tastaturlayout ''German'' auswählen.


== Anhang ==
== Anhang ==
=== Siehe auch ===
=== Siehe auch ===
<div style="column-count:2">
<categorytree hideroot=on mode="pages">Apache/Guacamole</categorytree>
</div>
----
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}
=== Dokumentation ===
<!--
; Man-Page
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)]
; Info-Pages
-->
=== Links ===
=== Links ===
==== Projekt ====
==== Weblinks ====
==== Weblinks ====
# https://de.wikipedia.org/wiki/Apache_Guacamole
# https://de.wikipedia.org/wiki/Apache_Guacamole
# https://guacamole.apache.org
# https://guacamole.apache.org
# https://www.howtoforge.de/anleitung/so-installierst-du-apache-guacamole-unter-debian-11/
# https://computingforgeeks.com/install-and-use-guacamole-remote-desktop-on-debian/
# https://guacamole.apache.org/doc/1.4.0/gug/guacamole-docker.html
# https://guacamole.apache.org/doc/1.4.0/gug/guacamole-docker.html


[[Kategorie:Remote Access]]
[[Kategorie:Apache/Guacamole]]
[[Kategorie:Apache/Projekt]]


</noinclude>
</noinclude>

Aktuelle Version vom 2. Dezember 2025, 16:10 Uhr

Apache/Guacamole - Gateway zum Fernzugriff auf Computersysteme

Beschreibung

Apache Guacamole ist ein freies und quelloffenes Gateway für den Fernzugriff auf Computersysteme, welches von der Apache Software Foundation betreut wird

Plattformunabhängig ermöglicht es Benutzern, ohne einen dedizierten Client über Webbrowser auf entfernte Computer oder virtuelle Maschinen zuzugreifen

  • Administratoren können den Zugriff durch ein erweiterbares System für Authentifizierung und Autorisierung regeln, sodass Zielcomputer sicher hinter Guacamole isoliert werden können, ohne direkt im Internet erreichbar zu sein

Für den Fernzugriff nutzt Guacamole die Komponente guacd, die Protokolle wie RDP, VNC oder SSH für den Zugriff auf die jeweiligen Ressourcen verwendet

  • Da Guacamole keinen spezifischen Client benötigt, ist keine Agenteninstallation auf den Zielressourcen erforderlich
  • Durch die Integration des Clients in Webbrowser können Benutzer ohne zusätzliche Fernwartungssoftware auf ihre Computersysteme zugreifen

Komponenten

Guacamole besteht aus mehreren logisch getrennten Komponenten:

  • Webanwendung (Guacamole-Client)
  • guacd (Guacamole Proxy Daemon)
  • Protokollmodule (RDP, VNC, SSH usw.)
  • gemeinsame Bibliothek libguac


  • Im Hintergrund arbeitet der Dienst "guacd", welcher als Backend-Dienst fungiert
  • Dieser Dienst übersetzt und optimiert dynamisch native Protokolle in das spezifische Guacamole-Protokoll, um eine effiziente Kommunikation und Darstellung im Webbrowser zu ermöglichen

Frontend

Webanwendung

Die Webanwendung dient als Benutzeroberfläche und ist für Authentifizierung sowie Autorisierung zuständig

  • Die Webanwendung ist eine Schnittstelle, über die Benutzer mit Guacamole interagieren, auf entfernte Computersysteme zugreifen und diese über einen Browser verwalten können
  • Die Serverseite ist als Java-Webanwendung implementiert und läuft in einem Servlet-Container wie Apache Tomcat oder Jetty
  • Im Webbrowser wird eine JavaScript-Anwendung ausgeführt, die Ein- und Ausgabedaten (Tastatur, Maus, Bildschirm) über das Guacamole-Protokoll an guacd überträgt bzw. von dort empfängt


Backend

guacd

guacd fungiert als Backend-Dienst und Protokoll-Proxy zwischen der Webanwendung und den Zielsystemen.

  • nimmt Verbindungsanforderungen der Webanwendung entgegen,
  • stellt Sitzungen zu entfernten Systemen über die jeweils konfigurierten Fernzugriffsprotokolle her,
  • übersetzt Datenströme zwischen dem Guacamole-Protokoll und den nativen Protokollen (RDP, VNC, SSH usw.),
  • kapselt die Protokolldetails und stellt eine einheitliche Schnittstelle für die Webanwendung bereit
Fernzugriffsprotokolle

Die Unterstützung für konkrete Fernzugriffsprotokolle wird durch dynamisch ladbare Client-Plugins bereitgestellt.

  • Weder guacd noch die Webanwendung müssen die Details der einzelnen Fernzugriffsprotokolle kennen
  • Sowohl guacd als auch die Plugins verwenden die gemeinsame Bibliothek libguac, die das Guacamole-Protokoll implementiert und die Kommunikation mit der Webanwendung abstrahiert

Anwendungsbereiche

Typische Einsatzgebiete von Guacamole sind Umgebungen, in denen zentraler, browserbasierter Fernzugriff benötigt wird

  • Bereitstellung von administrativem Remotezugriff auf Server und Netzwerkgeräte ohne direkten Zugriff auf deren Management-Schnittstellen
  • Zugriff auf Labor-, Schulungs- oder Poolrechner, bei denen Bedienoberflächen über das Web bereitgestellt werden
  • Betrieb als zentraler Jump-Host, über den Verbindungen in abgeschottete Netzwerksegmente geführt werden
  • Ersatz oder Ergänzung VPN-Lösungen, wenn ausschließlich grafischer oder terminalbasierter Zugriff notwendig ist

Authentifizierung / Autorisierung

Authentifizierung

Die Authentifizierung in Guacamole ist modular aufgebaut und kann über unterschiedliche Backends erfolgen:

  • Die integrierte Datenbankauthentifizierung ermöglicht die Verwaltung von Benutzern, Gruppen und Berechtigungen innerhalb eines relationalen Datenbanksystems.
  • Zugriffsrechte auf Verbindungen, Ordner und Freigaben werden direkt in der Datenbank definiert.
  • Eine Authentifizierung über OpenID Connect oder SAML erlaubt die Integration in bestehende Identity-Provider-Infrastrukturen.
  • Single-Sign-On ermöglicht eine zentrale Anmeldung für unterschiedliche Dienste.
  • Anspruchsbasierte Zuordnung von Rollen und Rechten vereinfacht die zentrale Verwaltung.
  • Es können auch externe Verzeichnisdienste wie LDAP oder Active Directory für die zentrale Benutzerverwaltung angeschlossen werden
Autorisierung

Die Autorisierung erfolgt objektbasiert.

  • Zugriffe auf Verbindungen, Ordner, Parameter und administrative Funktionen werden durch Berechtigungen gesteuert
  • Rechte können Benutzern direkt oder über Gruppen zugewiesen werden


Sicherheit

Beim Betrieb von Guacamole sind insbesondere folgende Punkte relevant:

  • Obligatorische durchgängige HTTPS-Verschlüsselung zwischen Browser und Gateway
  • Platzierung von Guacamole in einer demilitarisierten Zone mit eingeschränktem Zugriff auf interne Systeme
  • Härtung des guacd-Dienstes und der Protokollmodule, insbesondere im Hinblick auf exponierte RDP- und VNC-Zugänge
  • Verwenden Sie für RDP und VNC zuverlässige Authentifizierungsmechanismen und Protokollversionen mit Verschlüsselung
  • Einführung einer Begrenzung der Anfragehäufigkeit und eines Schutzes vor Brute-Force-Angriffen
  • Protokollierung von Anmeldevorgängen und Sitzungsaufbauten zu Audit- und Nachvollziehbarkeitszwecken
  • Authentifizierungsprotokolle sicher speichern


Troubleshooting

XRDP Tastatur

Lösung des Problems mit der Eingabe von Zeichen in anderen Sprachen als Englisch
Um deutsche Zeichen über XRDP in Guacamole korrekt eingeben zu können, musst du in den Verbindungseinstellungen als Tastaturlayout German auswählen.

Anhang

Siehe auch


Dokumentation

Links

Projekt

Weblinks

  1. https://de.wikipedia.org/wiki/Apache_Guacamole
  2. https://guacamole.apache.org
  3. https://guacamole.apache.org/doc/1.4.0/gug/guacamole-docker.html