Guacamole – Installation mit Datenbank Backend (Teil 1)

Apache Guacamole ist ein Clientless Remotedesktop-Gateway. Es unterstützt Standardprotokolle wie VNC, RDP und SSH. Dank HTML5 wird nach der Installation auf einem Server lediglich ein halbwegs aktueller Webbrowser benötigt, um auf Rechner/Server zuzugreifen. Mit erscheinen der Version 1.0.0 am Anfang des Jahres und der damit verbundenen Features (TOTP, Radius Modul oder Integration der Zwischenablage) ist es auch für große Umgebungen interessant.

In der Testumgebung kam Ubuntu 18.04.2 LTS (64 Bit) zum Einsatz. Als Backend kommt MariaDB zum Einsatz. Standardmäßig werden die Verbindungen über eine XML-Datei gepflegt und den Benutzern zugewiesen. Mit einer Datenbank wird die Verwaltung vollständig über die Weboberfläche realsisiert. Somit kann auch die Administration durch nicht technisches Personal erfolgen.

Ich habe mit Hilfe der Docs von Apache Guacamole und vielen Test eine kl. Installationsanleitung zusammengebaut. Es handelt sich dabei um Befehle direkt auf der Shell, um so ohne größeren Aufwand, ein Automatismus schaffen zu können.

apt install -y make libssh2-1-dev libtelnet-dev libpango1.0-dev libossp-uuid-dev libcairo2-dev libpng-dev freerdp-x11 libssh2-1 libvncserver-dev libfreerdp-dev libvorbis-dev libssl1.0.0 gcc libssh-dev libpulse-dev tomcat8 tomcat8-admin tomcat8-docs ghostscript libwebp-dev libavcodec-dev libavutil-dev libswscale-dev mariadb-server

Nach Abschluss der Installationsarbeiten muss die Startseite des Apache Tomcat Services über die öffentliche IP-Adresse (http://IP-Adresse:8080/) erreichbar sein.

Falls eine Firewall zum Einsatz kommt, dort natürlich temporär den Port 8080/TCP freigeben. 🙂

cd /usr/src
wget --trust-server-names "https://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.0.0/source/guacamole-server-1.0.0.tar.gz"
wget --trust-server-names "https://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.0.0/binary/guacamole-1.0.0.war"

tar xvzf guacamole-server-1.0.0.tar.gz

cd /usr/src/guacamole-server-1.0.0
./configure --with-systemd-dir=/etc/systemd/system

make
make install
ldconfig

systemctl start guacd.service
systemctl status guacd.service
systemctl stop guacd.service
systemctl enable guacd.service

mkdir /etc/guacamole
echo GUACAMOLE_HOME=\"/etc/guacamole\" >> /etc/environment

mkdir /usr/lib/x86_64-linux-gnu/freerdp/
ln -s /usr/local/lib/freerdp/guacdr-client.so /usr/lib/x86_64-linux-gnu/freerdp/
ln -s /usr/local/lib/freerdp/guacsnd-client.so /usr/lib/x86_64-linux-gnu/freerdp/
ln -s /usr/local/lib/freerdp/guacsvc-client.so /usr/lib/x86_64-linux-gnu/freerdp/

cp /usr/src/guacamole-1.0.0.war /var/lib/tomcat8/webapps/guacamole.war

systemctl restart tomcat8.service
systemctl start guacd.service

Nach dem (Neu)start der beiden Services ist Apache Guacamole installiert. Im bereits offen Browserfenster hinter den Port noch den Verzeichnisnamen /guacamole/ schreiben und mit der Taste ENTER die Seite aufrufen. Es erscheint im Normfall die Anmeldeseite von Guacamole.

Nun werden noch die notwendigen Module für die Anbindung an den Datenbank-Server MariaDB heruntergeladen, installiert und konfiguiert.

cd /usr/src/
wget --trust-server-names "https://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.0.0/binary/guacamole-auth-jdbc-1.0.0.tar.gz"
tar xvzf guacamole-auth-jdbc-1.0.0.tar.gz
mkdir /etc/guacamole/extensions
cp /usr/src/guacamole-auth-jdbc-1.0.0/mysql/guacamole-auth-jdbc-mysql-1.0.0.jar /etc/guacamole/extensions/

cd /usr/src/
wget "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.13.tar.gz"
tar xvzf mysql-connector-java-8.0.13.tar.gz
mkdir /etc/guacamole/lib
cp /usr/src/mysql-connector-java-8.0.13/mysql-connector-java-8.0.13.jar /etc/guacamole/lib/

mysql -u root -p -e "CREATE USER 'guacamole'@'localhost' IDENTIFIED BY 'geheimesPasswort';"
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS guacamole DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql -u root -p -e "GRANT SELECT,INSERT,UPDATE,DELETE,CREATE ON guacamole.* TO 'guacamole'@'localhost' IDENTIFIED BY 'geheimesPasswort' WITH GRANT OPTION;"
mysql -u root -p -e "FLUSH PRIVILEGES;"

mysql -uguacamole -pgeheimesPasswort guacamole < /usr/src/guacamole-auth-jdbc-1.0.0/mysql/schema/001-create-schema.sql
mysql -uguacamole -pgeheimesPasswort guacamole < /usr/src/guacamole-auth-jdbc-1.0.0/mysql/schema/002-create-admin-user.sql

cat << EOF > /etc/guacamole/guacamole.properties
#
# MySQL properties
#

mysql-hostname: 127.0.0.1
mysql-port: 3306
mysql-database: guacamole
mysql-username: guacamole
mysql-password: geheimesPasswort

EOF

systemctl restart tomcat8.service

Bitte vor der Ausführung der Befehle nicht vergessen, dass vorgegebene Passwort „geheimesPasswort“ zu ändern. 🙂

Danach zurück in das Browserfenster wechseln, in dem die Anmeldeseite von Goacamole angezeigt wird. Einmal die Taste F5 drücken um den Inhalt zu aktualisieren.

Auf meinen Testsystemen hatte ich nach einem Neustart des Server nur eine weiße Anmeldeseite – ohne Text und Logo. Die Ursache für dieses Problem ist das Datum bzw. die Zeitzone. Die Fehlermeldung dazu steht in der Datei /var/log/tomcat8/catalina.out:

Error querying database. Cause: java.sql.SQLException: The server time zone value 'CEST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

Für die Problematik gibt es bereits im Bugtracker von Apache Guacamole ein entsprechende Issue. Bis dato aber ohne Lösungweg. Die Lösung dafür ist, die selbe Zeitzone des Servers auch für den Datenbank-Server zu konfigurieren.

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

sed -i '27 i\# Timezone' /etc/mysql/mariadb.conf.d/50-server.cnf
sed -i '28 i\default_time_zone=Europe/Berlin' /etc/mysql/mariadb.conf.d/50-server.cnf
sed -i '29 i\ ' /etc/mysql/mariadb.conf.d/50-server.cnf

systemctl restart mariadb.service

Nach den Anpassungen nochmals in den Browser wechseln und noch einmal die Taste F5 drücken. Nun erscheint die Anmeldemaske wieder.

Benutzername und Passwort ist standardmäßig jeweils „guacadmin“. Nach erfolgreich Anmeldung über das Menü rechts oben auf Einstellungen klicken und anschließend in den Reiter Einstellungen wechseln.

Aktuell ist der Apache Tomcat Server über Port 8080/TCP im Internet erreichbar. Das ist natürlich für den vorgesehen Einsatz nicht praktikabel, da dieser Port nur selten freigeschalten ist. Abhilfe schafft ein ReverseProxy auf dem selben Server. Hierfür kommt meist Apache2 oder Nginx in Frage. Nachfolgend die grundlegene Konfiguration für den Apache2-Webserver.

apt install apache2 -y

a2enmod rewrite
a2enmod proxy_http
a2enmod ssl
a2enmod proxy_wstunnel

systemctl restart apache2.service

Wenn es Quick und Dirty sein soll, kann man die bestehende Konfigurationsdatei der Default Webseite anpassen. Dazu editiere ich die Datei im Editor vi (vi /etc/apache2/sites-enabled/000-default.conf) und füge folgende Zeilen ab Zeile 30 hinzu:

ProxyPass / http://127.0.0.1:8080/guacamole/ flushpackets=on
ProxyPassReverse / http://127.0.0.1:8080/guacamole/
ProxyPassReverseCookiePath /guacamole /

<Location /websocket-tunnel>
    Order allow,deny
    Allow from all
    ProxyPass ws://127.0.0.1:8080/guacamole/websocket-tunnel
    ProxyPassReverse ws://127.0.0.1:8080/guacamole/websocket-tunnel
</Location>

SetEnvIf Request_URI "^/tunnel" dontlog
CustomLog  /var/log/apache2/guac.log common env=!dontlog

Nicht vergessen die Änderungen mit „:wq“ zu speichern. Die Datei wird automatisch durch das „q“ geschlossen.

Damit die Änderungen auch wirksam werden, muss der Apache2 neu gestartet werden.

systemctl restart apache2.service

Nun wechseln wir in den Browser zurück und geben in die Adressleiste http://IP-Adresse/ ein. Durch die oben eingefügte Konfigration ist Guacamole direkt ohne Angabe eines Alias aufrufbar. Damit ist die Applikation grundsätzlich einsatzbereit.

Viel Spaß beim Ausprobieren. 🙂

Abonnieren
Benachrichtige mich bei
5 Comments
neueste
älteste
Inline Feedbacks
View all comments
Pascal Günther
03.05.2020 16:34

Hallo, ist erforderlich schon Linux Kenntnisse zu haben oder reicht einfach diese Anleitung und ein paar Hardenings Guides wie „root deaktivieren, SSH Keys Auth“ usw… ?

Ulrich Ivens
12.04.2020 11:43

Exzellent! Besser geht nich. Funktioniert mit leichten Anpassungen auch mit einem Rasperry Pi. Dankeschön!

Ulrich Ivens
Reply to  dw
22.05.2020 14:49

Klar bezieht sich hier auf den Part:

Die Architektur ist natürlich eine andere. Ich halte es mal allgemein: das x86_64-linux-gnu muss natürlich an die arm Architektur angepasst werden. Sonst ist das 1 zu 1 machbar.

mkdir /usr/lib/x86_64-linux-gnu/freerdp/
ln -s /usr/local/lib/freerdp/guacdr-client.so /usr/lib/x86_64-linux-gnu/freerdp/
ln -s /usr/local/lib/freerdp/guacsnd-client.so /usr/lib/x86_64-linux-gnu/freerdp/
ln -s /usr/local/lib/freerdp/guacsvc-client.so /usr/lib/x86_64-linux-gnu/freerdp/

Ich schreibe grade noch an einer Anleitung für Ubuntu 20.04 und Guacamole 1.1.0, das verlinke ich dann auch hier, wenn es funktioniert.

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