⚠️ Disclaimer
La méthode que je présente ici correspond à ma propre démarche d’apprentissage. Elle peut contenir des approximations ou des erreurs, car j’apprends et je progresse chaque jour un peu plus. Ne prenez donc pas ce que je fais comme une référence absolue, mais plutôt comme un retour d’expérience personnel.
Dans ce troisième chapitre, on va transformer notre “Passoire-Stack” en un système plus robuste en appliquant le principe de Séparation des Responsabilités.
1. Le “Coffre-Fort” local : Le fichier .env
La première étape du hardening, c’est d’extraire tout ce qui est sensible vers un fichier d’environnement. Sur macOS ou Linux, ce fichier commence par un point (.env), ce qui le rend masqué par défaut.
Création et verrouillage (Le moment “Cyber”)
Ouvrez votre terminal dans votre dossier monitoring-stack :
| |
Décomposition des commandes :
touch .env: Crée un fichier vide nommé.env.chmod 600 .env: C’est la commande vitale.chmod(Change Mode) modifie les permissions.6(Lecture + Écriture pour vous).00(Aucun droit pour le groupe et les autres utilisateurs du système).Pourquoi ? Si un autre utilisateur ou un processus malveillant tente de lire ce fichier, il se fera jeter. C’est le principe du moindre privilège.
Contenu du fichier
Voici à quoi ressemble mon .env (évidemment, les valeurs ci-dessous sont des exemples) :
| |
2. Injection dans Docker Compose : L’Interpolation
Maintenant que nos secrets sont au chaud dans le .env, il faut dire à Docker d’aller les chercher. On utilise pour cela la syntaxe ${VARIABLE}.
Voici l’extrait de mon docker-compose.yml modifié :
| |
L’analyse technique :
${GRAFANA_ADMIN_PASSWORD}: au moment dudocker compose up, Docker va scanner le fichier.env, trouver la valeur correspondante et l’injecter dans le conteneur. Le YAML reste “propre” et peut être partagé sans risque.GF_SMTP_SKIP_VERIFY=false: en cybersécurité, on évite de sauter la vérification des certificats. Si cette valeur était àtrue, un attaquant pourrait intercepter vos mails d’alerte via une attaque Man-in-the-Middle (MitM).
3. Le cas d’école : Alertes SMTP et Identités
Lors de la mise en place de mes alertes mail via Posteo, j’ai rencontré un défi intéressant lié à l’IAM (Identity & Access Management).
Posteo (comme beaucoup de serveurs mail sécurisés) distingue l’utilisateur qui se connecte (SMTP_USER) de l’adresse qui s’affiche sur le mail (FROM_ADDRESS).
Ce que j’ai appris :
On utilise un mot de passe d’application et non le mot de passe maître. C’est une règle d’or : si votre stack de monitoring est compromise, l’attaquant n’aura accès qu’à l’envoi de mails, pas à l’intégralité de votre boîte de réception.
Le
SMTP_USERdoit être votre adresse principale (ex:clément@pgmail.com), mais vous pouvez “signer” vos alertes avec un alias plus pro (ex:soc-alert@homelab.com).
4. La dernière barrière : Le .gitignore
C’est l’erreur classique qui a coûté des millions à certaines entreprises : oublier de dire à Git d’ignorer le fichier .env.
Créez un fichier .gitignore à la racine de votre projet :
| |
Pourquoi c’est important ? Si un jour vous décidez de pousser votre projet sur GitHub pour montrer votre travail, Git ignorera royalement votre fichier .env. Vos secrets resteront sur votre machine, et uniquement là.
5. Vérification post-déploiement
Une fois la stack lancée avec docker compose up -d, comment savoir si nos secrets ont bien été injectés sans les afficher à l’écran ?
| |
Décomposition :
docker exec -it grafana: “Entre” dans le conteneur Grafana en mode interactif.env: Affiche toutes les variables d’environnement internes au conteneur.| grep GF_SECURITY: Filtre le résultat pour ne voir que ce qui nous intéresse.- Vérification : Si vous voyez votre mot de passe s’afficher ici, c’est que l’injection a réussi. Note : Dans un environnement de production ultra-sensible, on utiliserait des “Docker Secrets” pour que même cette commande ne révèle rien.
Conclusion
Le Hardening, ce n’est pas installer un logiciel miracle, c’est une somme de petits réflexes : un chmod bien placé, une variable d’environnement au lieu d’un texte en clair, et une surveillance constante des flux (SMTP).
Ma stack est désormais un peu plus “propre” d’un point de vue architectural.