Apache Guacamole és un programari desenvolupat per l'organització Apache per a l'ús d'escriptori remot sense client (en diem sense client perquè no calen complements ni programari de client). Admet protocols estàndard com ara VNC, RDP i SSH.
Gràcies a HTML5, un cop Guacamole està instal·lat en un servidor, només necessiteu un navegador web per accedir als vostres escriptoris.
Podeu fer la instal·lació de manera nativa, amb Docker o NGINX Proxy, i les biblioteques requerides són Cairo, libjpeg, libpng i OSSP UUID.
Paquets de les biblioteques requerides per sistema operatiu
Ubuntu: libcairo2-dev libjpeg-turbo8-dev libjpeg62-dev libpng12-dev libtool-bin libossp-uuid-dev
Debian: libcairo2-dev libjpeg62-turbo-dev libjpeg62-dev libpng12-dev libtool-bin libossp-uuid-dev
Fedora/CentOS: cairo-devel libjpeg-devel libpng-devel libtool uuid-devel
Nota:
Si libjpeg-turbo no està disponible a la vostra plataforma i no voleu compilar-lo a partir del codi font, libjpeg també funcionarà, tot i que no serà tan ràpid.
Dependències opcionals:
Les dependències opcionals de Guacamole determinen quines parts de guacamole-server s'utilitzaran. Això inclou la compatibilitat amb diversos protocols d'escriptori remot, així com qualsevol característica addicional d'aquests protocols:
- La compatibilitat amb VNC depèn de la biblioteca libvncclient, que forma part de libVNCServer.
- La compatibilitat amb RDP depèn d'una versió recent de FreeRDP (1.0 o superior, però no d'una versió no publicada de git).
- La compatibilitat amb SSH depèn de libssh2, OpenSSL i Pango (una biblioteca de composició de text i representació de tipus de lletra, utilitzada per l'emulador de terminal integrat de Guacamole).
- Telnet depèn de libtelnet i Pango.
- La compatibilitat amb Kubernetes depèn de libwebsockets, OpenSSL i Pango.
La utilitat guacenc, proporcionada per guacamole-server per convertir enregistraments de pantalla en vídeo, depèn de FFmpeg i només es compilarà si estan instal·lades, com a mínim, les biblioteques libavcodec, libavformat, libavutil i libswscale proporcionades per FFmpeg.
Important
Si no teniu aquestes dependències, no s'habilitaran les funcions o els protocols que en depenen. Llegiu aquesta secció detingudament abans de decidir no instal·lar una dependència opcional.
Debian/Ubuntu: libavcodec-dev libavformat-dev libavutil-dev libswscale-dev freerdp2-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libwebsockets-dev libpulse-dev libssl-dev libvorbis-dev libwebp-dev
Fedora/CentOS: ffmpeg-devel freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel
Instal·lació i configuració pas a pas d'Apache Guacamole:
S'utilitzarà com a exemple una instal·lació en un servidor Ubuntu 20.04 LTS (64 Bit) amb la imatge preinstal·lada, Ubuntu 18.04 Desktop (64 Bit) com a client i també s'afegirà un client RDP Windows 2019 Datacenter (English 64Bit).
Instal·lació dels paquets requerits:
# apt install libcairo2-dev libjpeg-turbo8-dev libjpeg-dev libpng-dev libtool-bin libossp-uuid-dev
Instal·lació dels paquets opcionals:
# apt install libavcodec-dev libavformat-dev libavutil-dev libswscale-dev freerdp2-dev libssh2-1-dev libtelnet-dev libvncserver-dev libpulse-dev libssl-dev libvorbis-dev libwebp-dev
Instal·lació dels paquets requerits:
# apt install libcairo2-dev libjpeg-turbo8-dev libjpeg62-dev libpng12-dev libtool-bin libossp-uuid-dev
Instal·lació dels paquets opcionals:
# apt install libavcodec-dev libavformat-dev libavutil-dev libswscale-dev freerdp2-dev libssh2-1-dev libtelnet-dev libvncserver-dev libpulse-dev libssl-dev libvorbis-dev libwebp-dev
Descarregueu el paquet del servidor de Guacamole (podeu cercar la darrera versió disponible a Descàrregues d'Apache Guacamole):
# wget https://downloads.apache.org/guacamole/1.5.5/source/guacamole-server-1.5.5.tar.gzDescomprimiu el tar.gz del fitxer descarregat:
# tar -xvf guacamole-server-1.5.5.tar.gzAccediu al directori descomprimit:
# cd guacamole-server-1.5.5/Feu la configuració mitjançant l'script incorporat:
# ./configure --with-init-dir=/etc/init.dCompileu:
# makeInstal·leu la compilació:
# make installActualitzeu la configuració de les biblioteques:
# ldconfigRecarregueu els dimonis:
# systemctl daemon-reloadInicieu i activeu:
# systemctl start guacd && systemctl enable guacdComproveu l'estat del servei de Guacamole:
# systemctl status guacdVerifiqueu el funcionament mitjançant el port:
# ss -lnpt | grep guacdInstal·leu tomcat:
# apt install tomcat9 tomcat9-admin tomcat9-common tomcat9-userVerifiqueu el funcionament mitjançant el port:
# ss -lnpt | grep javaDescarregueu el paquet binari webapp per a tomcat:
# wget https://downloads.apache.org/guacamole/1.5.5/binary/guacamole-1.5.5.warMoveu-lo al directori de la versió de tomcat:
# mv guacamole-1.5.5.war /var/lib/tomcat9/webapps/guacamole.warReinicieu el servei:
# systemctl restart tomcat9 guacdCreeu un directori per als fitxers de configuració per a l'ús de guacamole:
# mkdir /etc/guacamole/Creeu un fitxer per a les propietats:
# vi /etc/guacamole/guacamole.propertiesIntroduïu la informació següent (podem especificar el directori d'usuaris o el port desitjat):
# Nom d'amfitrió i port del servidor intermediari de guacamole
guacd-hostname: localhost
guacd-port: 4822
# Classe del proveïdor d'autenticació (autentica la combinació d'usuari/contrasenya, necessària si s'utilitza la pantalla d'inici de sessió proporcionada)
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xmlObteniu una contrasenya per a un usuari de Guacamole:
# echo -n CONTRASEÑA | openssl md5Modifiqueu el fitxer de mapatge d'usuaris:
# vi /etc/guacamole/user-mapping.xmlExemple de configuració del fitxer (no cal introduir el paràmetre de contrasenya):
<user-mapping>
<!-- Per-user authentication and config information -->
<authorize username="admin" password="CONTRASEÑA_EN_MD5" encoding="md5">
<connection name="GuacamoleVNC">
<protocol>vnc</protocol>
<param name="hostname">localhost</param>
<param name="port">5901</param>
<param name="password">XXXX</param>
</connection>
<connection name="GuacamoleSSH">
<protocol>ssh</protocol>
<param name="hostname">localhost</param>
<param name="username">root</param>
<param name="port">22</param>
<param name="password">XXXX</param>
</connection>
<connection name="UbuntuRDP">
<protocol>rdp</protocol>
<param name="hostname">10.20.10.7</param>
<param name="username">xrdpuser</param>
<param name="port">3389</param>
<param name="password">XXXXX</param>
</connection>
<connection name="WindowsRDP">
<protocol>rdp</protocol>
<param name="hostname">10.20.10.5</param>
<param name="port">3389</param>
<param name="username">administrator</param>
<param name="password">XXXX</param>
<param name="ignore-cert">true</param>
</connection>
<connection name="WindowsTELNET">
<protocol>telnet</protocol>
<param name="hostname">10.20.10.5</param>
<param name="port">23</param>
<param name="username">administrator</param>
<param name="password">XXXX</param>
</connection>
</authorize>
</user-mapping>
Modifiqueu els permisos perquè només l'usuari el pugui utilitzar:
# chmod 600 /etc/guacamole/user-mapping.xmlAssigneu els permisos de propietari i grup:
# chown tomcat9:tomcat9 /etc/guacamole/user-mapping.xmlReinicieu o recarregueu els serveis:
# systemctl restart tomcat9 guacdEn aquest punt s'hauria de poder accedir pel port 8080 (Reviseu el tallafoc) a l'aplicació web servida per tomcat des del navegador, que mostrarà la pàgina d'inici de guacamole amb l'usuari i les connexions configurades en iniciar la sessió:
Per a més protecció podem instal·lar fail2ban per bloquejar els intents de connexió:
# apt install fail2banReviseu el fitxer de configuració per comprovar si té la jail activa:
# vi /etc/fail2ban/jail.d/defaults-debian.confHauria d'aparèixer el següent:
[guacamole]
enabled = true
Verifiqueu l'estat mitjançant:
# fail2ban-client statusI, finalment, trieu el vostre servidor web preferit per al servidor intermediari invers:
Configuració ràpida per a Apache Proxy amb HTTPS
Instal·lació del servei:
# apt install apache2
Activació de mòduls:
# a2ensite default-ssl && a2enmod ssl && a2enmod proxy && a2enmod proxy_http && a2enmod proxy_balancer && a2enmod lbmethod_byrequests
Reinicieu o recarregueu el servei:
# systemctl restart apache2
Modifiqueu el lloc per defecte:
# vi /etc/apache2/sites-available/default-ssl.conf
Introduïu/modifiqueu la configuració bàsica requerida:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
<Location /guacamole/>
Order allow,deny
Allow from all
ProxyPass http://IP:8080/guacamole/ flushpackets=on
ProxyPassReverse http://IP:8080/guacamole/
</Location>
SSLCertificateFile /etc/ssl/private/ssl-cert-snakeoil.key
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
Per crear el certificat de Let's Encrypt podeu utilitzar el següent article segons la versió utilitzada o executar la instal·lació dels paquets necessaris per a la certificació de Let's Encrypt:
# apt install certbot python3-certbot-apache
Certifiqueu el domini o subdomini mitjançant Let's Encrypt:
# certbot --apache -d sub.domain.comConfiguració ràpida per a NGINX Proxy amb HTTPS
# apt install nginx# vi /etc/nginx/sites-available/defaultserver {
listen 80 default_server;
listen [::]:80 default_server;
return 301 https://sub.domain.com;
}
server {
listen 443 ssl;
server_name sub.domain.com;
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
location / {
proxy_buffering off;
proxy_pass http://localhost:8080/guacamole/;
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;
}
location /.well-known/ {
allow all;
root /var/www/html;
}
}
Instal·lació dels paquets necessaris per a la certificació de Let's Encrypt:
# apt install certbot python3-certbot-nginx
Certifiqueu el domini o subdomini mitjançant Let's Encrypt:
# certbot --nginx -d sub.domain.com