Apache Guacamole installeren op Debian 11
Apache Guacamole is een gratis en open-source remote desktop gateway waarmee je op afstand verbinding kunt maken met je computer/server met verschillende protocollen, zoals SSH, RDP, en VNC. Apache Guacamole wordt onderhouden door de Apache Software Foundation, en gelicentieerd met Apache Licentie 2.0.
Apache Guacamole is een clientloze remote desktop gateway. Je kunt Apache Guacamole altijd en overal benaderen met alleen een web browser. Het gebruik van Apache Guacamole is aan te bevelen als je meerdere besturingssystemen op afstand hebt met verschillende protocollen, zoals Windows met RDP, Linux systemen met VNC en SSH.
In deze handleiding installeer en configureer je Apache Guacamole op een Debian 11 Bullseye. Dit omvat het installeren van enkele pakketten afhankelijkheden en de Apache Tomcat 9, dan bouw je de Guacamole-server en installeer je de Java applicatie, Guacamole web applicatie. Op het eind stel je Nginx in als een reverse proxy voor de Guacamole web toepassing, waarmee je van overal toegang kunt krijgen tot je servers, zolang je maar een web browser hebt.
Vereisten
Om deze tutorial te voltooien heb je de volgende benodigdheden nodig:
- Een server met minstens 2GB RAM waarop Debian 11 Bullseye draait.
- Een gebruik of niet-root gebruiker met root rechten.
- Basiskennis met nano editor. Of je kunt de editor van je voorkeur gebruiken, zoals vim.
Afhankelijkheden voor het bouwen installeren
In het begin installeer je enkele bouw-afhankelijkheden om de Apache Guacamole server te bouwen. Dit omvat enkele basispakketten zoals‘libvncserver-dev‘ die ondersteuning voor het VNC protocol mogelijk maakt,‘libssh2-1‘ voor het SSH protocol,‘freerdp2-dev‘ voor het RDP protocol, en‘libwebsockets-dev‘ voor de Kubernetes ondersteuning.
Ter overweging, je zult niet ‘libtelnet-dev’ installeren voor de telnet ondersteuning. Dit is omdat telnet beschouwd wordt als een oud protocol en niet veilig is.
1. Werk nu je pakketlijst bij door het onderstaande apt commando uit te voeren.
sudo apt update
2. Installeer daarna afhankelijkheden voor het bouwen van de Apache Guacamole server door het volgende commando uit te voeren.
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
Het kan even duren voor dit commando klaar is, afhankelijk van de verbinding van je server-internet.
Installeren van Apache Tomcat 9
Na het installeren van bouw-afhankelijkheden installeer je Apache Tomcat 9. Dit pakket is nodig voor de Guacamole web-applicatie, die in Java geschreven is.
1. Voer het volgende commando uit om de Apache Tomcat 9 op je systeem te installeren.
sudo apt install -y tomcat9 tomcat9-admin tomcat9-common tomcat9-user
2. Nadat de Apache Tomcat 9 geïnstalleerd is, start en activeer je de Apache Tomcat dienst door het onderstaande commando uit te voeren. Op de op Debian gebaseerde systemen wordt Apache Tomcat 9 geleverd met de dienst genaamd’tomcat9‘.
sudo systemctl enable --now tomcat9
3. Controleer nu, als alles er goed uitziet, de status van de’tomcat9‘ dienst door het onderstaande commando uit te voeren.
sudo systemctl status tomcat9
Je krijgt dan de volgende uitvoer. Controleer of de’tomcat9‘ dienst‘active (running)‘ is.
Guacamole-server compileren
In dit onderdeel download en compileer je de Guacamole-server. Dit is het hoofdbestanddeel van Apache Guacamole, dat bibliotheken bevat om verbinding te maken met remote servers en desktops. De Guacamole-server bevat de C bibliotheek ‘libguacd’ en alle bibliotheken voor ondersteunde protocollen, en ook het hart van Guacamole, guacd.
De guacd handelt alle client-verbindingen af die vanuit de guacamole web-applicatie getunneld worden, en maakt dan namens hen verbinding met afgelegen servers en desktops. Door Guacamole-server te bouwen en te compileren, heb je een nieuwe dienst ‘guacd’ op je systeem.
1. Begin met het navigeren van de werkdirectory naar‘/usr/src‘. Alle broncode voor het bouwen en compileren van dingen gaat naar deze directory.
cd /usr/src
2. Nu download je de Guacamole-server broncode door het onderstaande wget commando uit te voeren. Kijk zeker op de Guacamole Download pagina en kopieer de nieuwste versie van Guacamole-server. Op het moment van dit schrijven is de nieuwste versie 1.3.0.
wget https://dlcdn.apache.org/guacamole/1.3.0/source/guacamole-server-1.3.0.tar.gz
3. Pak dan de broncode uit en je krijgt een nieuwe directory‘guacamole-server-VERSIE-NUMMER’. Navigeer naar die map.
tar -xzvf guacamole-server-1.3.0.tar.gz
cd guacamole-server-*/
4. Controleer nu alle systeemeisen voor het bouwen van de Guacamole-server en stel je omgeving in door het volgende commando uit te voeren. De optie‘–met-systemd-dir=/etc/systemd/system/’ wordt gebruikt om het dienstbestand systemd in te stellen, dat beschikbaar zal zijn in de directory‘/etc/systemd/system/‘.
./configure --with-systemd-dir=/etc/systemd/system/
Je krijgt uitvoer die lijkt op deze:
------------------------------------------------
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.
Kijk eens naar de secties‘Libraries status‘ en‘Protocol support‘. Je kunt de protocol-ondersteuning aanpassen door extra afhankelijkheden en bibliotheken te installeren.
5. Compileer en installeer vervolgens de Guacamole-server door het onderstaande commando uit te voeren.
make
make install
Het compileren en installeren kan enige tijd in beslag nemen.
6. Nu, als alles voltooid is, voer je het volgende commando uit om alle nieuwe systeembibliotheken toe te passen.
sudo ldconfig
In dit gedeelte heb je het Guacamole-server pakket geïnstalleerd. Nu zul je enkele noodzakelijke configuraties voor de Guacamole-server maken.
Guacamole-server instellen
Om Guacamole-server te laten werken, maak je de configuratiedirectory‘/etc/guacamole/‘, dan maak je een nieuw bestand‘guacamole.properties‘ als de standaard Guacamole-server configuratie, het bestand‘logback.xml’ voor het Guacamole logsysteem, en het bestand‘user-mapping.xml’ voor het definiëren van Guacamole gebruikers authenticatie en verbindingen met remote servers en desktops.
1. Om te beginnen voer je het volgende commando uit om een nieuwe directory‘/etc/guacamole/‘ aan te maken, met daarbinnen extra directories‘extensions‘ en‘lib’. Voeg dan de omgevingsvariabele‘GUACAMOLE_HOME=/etc/guacamole‘ toe aan het bestand ‘/etc/default/tomcat9’. Dit vertelt de Tomcat 9 servlet container om de‘GUACAMOLE_HOME‘ directory op te zoeken in ‘/etc/guacamole/‘.
mkdir -p /etc/guacamole/{extensions,lib}
echo 'GUACAMOLE_HOME=/etc/guacamole' >> /etc/default/tomcat9
2. Maak nu de hoofdconfiguratie‘guacamole.properties‘ met nano of een editor van je voorkeur.
sudo nano /etc/guacamole/guacamole.properties
Voer de volgende configuratie in:
# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port: 4822
# user mapping and user connections
user-mapping: /etc/guacamole/user-mapping.xml
- De optie ‘guacd-hostname’ bepaalt de hostnaam of het IP adres waarop de guacd dienst zal draaien. Deze handleiding gebruikt de localhost om de guacd dienst te draaien.
- De optie‘guacd-poort‘ bepaalt de standaard poort voor de guacd dienst. Deze handleiding gebruikt de poort‘4822‘ voor guacd service.
- De optie ‘user-mapping’ bepaalt de bestandsconfiguratie voor de authenticatie van gebruikers en een lijst van beschikbare verbindingen. Deze handleiding gebruikt het bestand ‘/etc/guacamole/user-mapping.xml’ om gebruikers en verbindingen voor de Guacamole-server te definiëren. Je kunt eventueel een andere authenticatie methode gebruiken, raadpleeg de Guacamole Documentatie.
Bewaar en sluit het bestand.
3. Maak vervolgens een nieuwe configuratie‘loogback.xml‘ voor logging en debugging. Standaard zal de Guacamole alleen naar de console loggen. Door deze configuratie te gebruiken kan Guacamole loggen via het Logback logging raamwerk.
sudo nano /etc/guacamole/logback.xml
Voeg de volgende configuratieregels toe.
<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>
Sla het configuratiebestand op en sluit het.
4. Nu genereer je een nieuwe md5 wachtwoord hash en maak je een nieuw bestand voor Guacamole gebruikers authenticatie en verbindingen.
Voer het volgende commando uit om de md5 wachtwoord hash te genereren. En zorg ervoor dat je het wachtwoord verandert met je sterke wachtwoord.
echo -n StrongPasswordUserJohnDoe | openssl md5
Je krijgt een uitvoer van het mod5 gehashte wachtwoord. Kopieer het naar je notitie.
(stdin)= aca22211ffcfb8aa8ad7627195ad4fce
5. Maak daarna een nieuw bestand‘user-mapping.xml‘ met nano editor.
sudo nano /etc/guacamole/user-mapping.xml
Voer de volgende configuraties in. En let erop dat je de ‘username’ en‘password‘ verandert. Kijk ook naar de sectie‘<connection>…</connection>‘ en voeg je verbindingsgegevens met servers of desktops toe.
<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>
Bewaar en sluit het bestand.
Nu heb je de configuratie van Guacamole-server voltooid. Nu installeer en configureer je de Guacamole web applicatie, dat is de web applicatie die je in je browser ziet.
Installeren van Guacamole client web applicatie
In dit onderdeel installeer je de Guacamole web applicatie op je systeem. Dit kun je doen door het gecompileerde binaire bestand van de Guacamole webapplicatie te downloaden en het in de Tomcat ‘webaps’ directory te zetten.
1. Navigeer je werkdirectory naar‘/usr/src’ en download de gecompileerde Guacamole webapplicatie ‘.war‘ met het wget commando. Zorg ervoor dat je de Guacamole download pagina bezoekt en kopieer de link voor de nieuwste versie Guacamole webapplicatie.
cd /usr/src
wget https://dlcdn.apache.org/guacamole/1.3.0/binary/guacamole-1.3.0.war
2. Zet nu de binaire Java toepassing‘guacamole-VERSIE.war‘ in de Tomcat directory‘/var/lib/tomcat9/webapps/’ door het volgende commando uit te voeren. Dit maakt de Guacamole webapplicatie toegankelijk via de Apache Tomcat servlet container.
sudo cp guacamole-1.3.0.war /var/lib/tomcat9/webapps/guacamole.war
3. Herstart daarna de Tomcat 9 dienst om een nieuwe webapplicatie toe te passen.
sudo systemctl restart tomcat9
4. Start vervolgens de‘guacd‘ dienst en schakel die in door het onderstaande commando uit te voeren.
sudo systemctl enable --now guacd
Verifieer het daarna met het volgende commando.
sudo systemctl status guacd
Je krijgt de uitvoer zoals de schermafdruk hieronder.
Op dit punt heb je de installatie van de Guacamole-server toepassing (backend) en de Guacamole web toepassing (front-end) voltooid. Nu stel je Nginx in als reverse proxy voor de Guacamole webapplicatie.
Instellen van Nginx Reverse proxy voor Guacamole
In dit onderdeel installeer je de Nginx webserver en stel je die in als reverse proxy voor de Guacamole webapplicatie. Hiermee kun je de domeinnaam voor je Guacamole webapplicatie instellen en die met SSL certificaten beveiligen.
1. Om te beginnen, voer je het volgende‘apt‘ commando uit om Nginx pakketten te installeren.
sudo apt install nginx -y
2. Nadat alle Nginx pakketten geïnstalleerd zijn, maak je een nieuw virtuele host bestand ‘guacamole’ aan in de directory‘/etc/nginx/sites-available‘. Alle configuraties met betrekking tot de Guacamole reverse proxy zullen in dit bestand worden opgeslagen.
sudo nano /etc/nginx/sites-available/guacamole
Voer de volgende configuratie in. En let erop dat je de domeinnaam en het pad van SSL certificaten verandert. Dit voorbeeld gebruikt het domein‘example.io’ met de SSL privésleutel‘privkey.pem‘ en de publieke sleutel‘fullchain.pem‘, en bot certificaten beschikbaar in de directory ‘/etc/letsencrypt/live/exmaple.io/’.
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;
}
}
Bewaar en sluit het bestand.
3. Activeer nu het virtuele host bestand‘guacamole‘ door een nieuwe symbolische link te maken naar de directory‘/etc/nginx/sites-enabled/‘. Controleer dan alle Nginx configuraties om te zien of er syntaxfouten zijn.
sudo ln -s /etc/nginx/sites-available/guacamole /etc/nginx/sites-enabled/
sudo nginx -t
Je krijgt de uitvoer‘Syntax OK‘, wat betekent dat de configuratie geen fout heeft.
4. Start vervolgens de Nginx dienst opnieuw op om een nieuwe configuratie toe te passen, en controleer dan de status door het volgende commando uit te voeren.
sudo systemctl restart nginx
sudo systemtl status nginx
Je krijgt de uitvoer die lijkt op de schermafdruk hieronder. De Nginx dienst is‘active (running)‘.
5. Als je bovendien de Guacamole web-applicatie in verschillende sub-URL’s wilt inzetten, verander dan de optie‘location /guacamole/ { ...}‘ in nieuw pad‘location /new-path/ { ...}‘ en voeg de optie‘proxy_cookie_path‘ toe aan je nieuwe pad zoals hieronder.
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 dit gedeelte heb je de Nginx installatie en configuratie als reverse proxy voor de Guacamole webapplicatie voltooid. Op dit punt is je Apache Guacamole installatie voltooid, en is hij toegankelijk vanaf je domeinnaam.
Verifieer de installatie van Apache Guacamole
In dit gedeelte controleer je de installatie van Apache Guacamole.
Open eerst je web browser en typ de domeinnaam voor je Guacamole installatie met het standaard pad‘/guacamole’.
Nu zie je de onderstaande Guacamole login pagina. Voer je gebruikersnaam en wachtwoord in die je in het bestand‘user-mapping.xml’ hebt ingesteld, en klik dan op de knop Login.
Na het inloggen zie je een lijst met gedefinieerde verbindingen voor je gebruikers.
Klik op de verbindingsnaam om verbinding te maken met de doelserver. Dit voorbeeld maakt verbinding met de lokale server met het SSH protocol.
Nu zie je een nieuwe ssh terminal sessie op je server.
Conclusie
Gefeliciteerd! In deze handleiding heb je geleerd hoe je Apache Guacamole op Debian 11 Bullseye kunt installeren. Ook heb je geleerd hoe je gebruikersauthenticatie en verbindingen instelt met het configuratiebestand‘user-mapping.xml‘ en hoe je Nginx instelt als reverse proxy voor de Guacamole web toepassing, waardoor je Guacamaloe kunt draaien met de domeinnaam en het kunt beveiligen met SSL certificaten.