Guacamole

Guacamole est un proxy pour vos accès distants.

Il permet d’accéder depuis une interface Web à vos machines qu’elles soient en SSH, VNC, RDP.

C’est un projet qui a été repris par la fondation Apache (en incubation pour le moment).

 

Packagé dans les distributions majeures et chez Docker :

 

Guacamole est une application servlet Java, donc qui nécessite un Tomcat ou un autre serveur d’application. J’installe aussi Apache (ou Nginx) pour faire un reverse proxy.

L’avantage c’est qu’il est packagé sous Debian et qu’il suffit d’une commande pour mettre tout le monde d’accord :

apt-get install guacamole apache2

 

 

Reverse proxy Apache :

 

J’utilise Apache comme proxy inverse pour ne pas mettre le Tomcat directement en frontal.

Voici ma configuration dans /etc/apache2/sites-enabled/default-ssl.conf qui inclus reverse proxy et authentification CAS :

<VirtualHost *:80>
    ServerName guacamole.mondomaine.com
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>
    
<IfModule mod_ssl.c>
<VirtualHost _default_:443>

    SSLEngine on
    SSLCertificateFile/etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

    <Location />
        Authtype CAS 
        require user moi 
    </Location>
 
    ProxyPreserveHost On
    ProxyRequests On
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080

</VirtualHost>
</IfModule>

 

 

Authentification

 

Guacamole propose plusieurs backends d’authentification : no-auth (open bar), basic (liste d’utilisateurs et mots de passe dans un fichier plat), ldap, CAS, …

 

Basique :

 

Si vous choisissez l’authentification basique, voici à quoi peut ressembler votre fichier /etc/guacamole/user-mapping.xml :

<user-mapping>

    <!-- Un utilisateur et les connexions qui lui sont associées -->
    <authorize username="bibi" password="boubou">

        <connection name="Mon Serveur">
            <protocol>rdp</protocol>
            <param name="hostname">monserveur.mondomaine.com</param>
            <param name="port">3389</param>
        </connection>

    </authorize>

</user-mapping>

 

No Auth :

 

Pour ma part, j’utilise le backend no-auth donc ce n’est pas Guacamole qui gère l’authentification, par contre mon serveur Apache fait de l’authentification CAS.

 

Il faut configurer le serveur Guacamole en lui précisant dans le fichier /etc/guacamole/guacamole.properties le type de backend :

guacd-hostname: localhost
guacd-port: 4822
available-languages: en

# Authentification basique
#auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
#basic-user-mapping: /etc/guacamole/user-mapping.xml
# Pas d'authentification 
auth-provider: net.sourceforge.guacamole.net.auth.noauth.NoAuthenticationProvider
noauth-config: /etc/guacamole/noauth-config.xml

 

Avec le no-auth, je suis obligé de définir pour tout le monde les mêmes connexions. Voici la tête de mon fichier /etc/guacamole/noauth-config.xml :

<configs>
<config name="Mon Windows" protocol="rdp">
    <param name="username" value="moi" />
    <param name="hostname" value="monpcwindows" />
    <param name="port" value="3389" />
</config>
<config name="Mon Linux" protocol="ssh">
    <param name="hostname" value="monlinux.mondomaine.com" />
    <param name="port" value="22" />
</config>
</configs>

 

Autres systèmes d’authentification :

 

Guacamole peut s’authentifier via d’autres systèmes, voir les chapitres 6 à 10 du guide utilisateur.

 

Et c’est parti !

 

service tomcat8 restart
service apache2 restart

 

Vous pouvez aller sur https://votreserveur.votredomaine.com/

 

 

Sur le même sujet :