Sécurité¶
Règles de pare-feu, service account dédié, durcissement Tomcat et verifications finales pour une installation Guacamole sécurisée.
Règles de pare-feu¶
Sécurité
Par défaut, GCP bloque tout le trafic entrant. Ajoutez uniquement les règles strictement nécessaires. N'ouvrez jamais le port 8080 a 0.0.0.0/0 (toutes les IPs) en production — limitez l'accès a votre IP ou a un CIDR contrôle. Utilisez un Load Balancer HTTPS en façade pour les déploiements publics.
Autoriser l'accès a Guacamole depuis votre IP¶
MON_IP=$(curl -s https://api.ipify.org)
gcloud compute firewall-rules create allow-guacamole \
--direction=INGRESS \
--action=ALLOW \
--rules=tcp:8080 \
--source-ranges="${MON_IP}/32" \
--target-tags=guacamole-vm \
--description="Acces Guacamole depuis IP admin"
Appliquez le tag à la VM :
Autoriser guacd a accéder aux VDI¶
gcloud compute firewall-rules create guacamole-to-vdi \
--direction=INGRESS \
--action=ALLOW \
--rules=tcp:3389,tcp:22 \
--source-tags=guacamole-vm \
--target-tags=vdi-linux,vdi-windows \
--description="guacd vers VDI (RDP + SSH) reseau interne"
Bloquer l'accès direct aux VDI¶
Les VDI ne doivent pas être accessibles directement depuis l'extérieur. Verifiez l'absence de règles autorisant les ports 3389 et 22 depuis des plages externes :
gcloud compute firewall-rules list \
--filter="allowed.ports:(3389 OR 22)" \
--format="table(name,direction,sourceRanges,targetTags)"
Si une règle existante ouvre ces ports vers 0.0.0.0/0, supprimez-là où remplacez-la par une règle source-tags.
Recapitulatif des règles¶
| Règle | Direction | Ports | Source | Cible | Usage |
|---|---|---|---|---|---|
allow-guacamole | INGRESS | TCP 8080 | Votre IP /32 | guacamole-vm | Interface web |
guacamole-to-vdi | INGRESS | TCP 3389, 22 | guacamole-vm | vdi-linux, vdi-windows | RDP + SSH internes |
| (GCP défaut) | EGRESS | Tout | — | Tout | Sorties autorisees |
Service account dédié¶
La VM Guacamole ne doit avoir que le minimum de permissions nécessaires pour accéder à Cloud SQL.
Créer le service account¶
gcloud iam service-accounts create guacamole-vm \
--display-name="Guacamole VM" \
--description="Service account pour la VM Apache Guacamole"
Attribuer le rôle Cloud SQL Client¶
gcloud projects add-iam-policy-binding MON-PROJET-GCP \
--member="serviceAccount:guacamole-vm@MON-PROJET-GCP.iam.gserviceaccount.com" \
--role="roles/cloudsql.client"
Le rôle cloudsql.client permet la connexion a Cloud SQL via Private IP sans exposer les credentials de l'instance.
Attacher le service account à la VM¶
Si la VM est déjà déployée :
gcloud compute instances set-service-account guacamole-vm \
--zone=europe-west1-b \
--service-account=guacamole-vm@MON-PROJET-GCP.iam.gserviceaccount.com \
--scopes=cloud-platform
Pour les prochains builds Packer, passez --service-account lors du déploiement de la VM (voir chapitre 03).
Durcissement Tomcat¶
Le rôle Ansible tomcat supprimé les webapps par défaut lors du build. Verifiez que ces suppressions sont effectives :
Vérifier l'absence des webapps par défaut¶
gcloud compute ssh guacamole-vm \
--zone=europe-west1-b \
--tunnel-through-iap \
--command="ls /var/lib/tomcat9/webapps/"
Seul guacamole.war (et son répertoire déployé guacamole/) doit être present. Les webapps ROOT, docs, examples, host-manager et manager doivent être absentes.
Désactiver le directory listing¶
Dans /etc/tomcat9/web.xml, verifiez que le parametre listings est a false :
gcloud compute ssh guacamole-vm \
--zone=europe-west1-b \
--tunnel-through-iap \
--command="grep -A2 'listings' /etc/tomcat9/web.xml"
Masquer la version Tomcat¶
Ajoutez dans /etc/tomcat9/server.xml au niveau du connecteur :
Le parametre server=" " remplacé la banniere Apache-Coyote/1.1 par un espace, evitant la divulgation de version dans les en-têtes HTTP.
Vérification Cloud SQL : Private IP uniquement¶
L'instance Cloud SQL ne doit pas avoir d'IP publique assignee :
Toutes les entrees doivent avoir "type": "PRIVATE". Si une entree "type": "PRIMARY" (IP publique) existe, supprimez-la :
Assertions de validation¶
Connectez-vous à la VM et executez les verifications suivantes :
guacd écoute uniquement sur localhost¶
Résultat attendu : 127.0.0.1:4822 — guacd ne doit pas être accessible depuis le réseau externe.
Tomcat écoute sur 8080¶
Résultat attendu : 0.0.0.0:8080 (ou :::8080) — accessible uniquement via la règle de pare-feu.
VNC non compile dans guacd¶
Résultat attendu : aucune sortie — libvnc ne doit pas être linkee.
Extension JDBC fonctionnelle¶
curl -s http://localhost:8080/guacamole/api/tokens \
-d "username=guacadmin&password=VOTRE_MOT_DE_PASSE" \
-H "Content-Type: application/x-www-form-urlencoded" \
| python3 -m json.tool | grep authToken
Un token doit être retourné, confirmant que la connexion JDBC vers Cloud SQL est opérationnelle.