From e11dd6fdbf14e88bbb4d5b0fb08a9c807170a9ca Mon Sep 17 00:00:00 2001 From: BeauTroll <-> Date: Mon, 22 Dec 2025 19:12:43 +0100 Subject: [PATCH] =?UTF-8?q?Ajouter=20documentation=20compl=C3=A8te=20dans?= =?UTF-8?q?=20le=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Guide d'installation détaillé étape par étape - Instructions de génération et hashage du token admin avec Argon2 - Configuration de sécurité (capabilities, rate limiting, limites ressources) - Procédures de backup/restore manuelles et automatiques - Guide de maintenance (mises à jour, logs, healthcheck) - Section dépannage avec solutions aux problèmes courants - Recommandations de sécurité additionnelle (Fail2Ban, 2FA) - Diagramme d'architecture et liens ressources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- README.md | 335 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 335 insertions(+) diff --git a/README.md b/README.md index e69de29..10da6f4 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,335 @@ +# Vaultwarden Docker Deployment + +Déploiement sécurisé de [Vaultwarden](https://github.com/dani-garcia/vaultwarden) (serveur Bitwarden open-source) avec Docker Compose et Traefik. + +## Caractéristiques + +- **Sécurité renforcée** : Capabilities Linux limitées, rate limiting, inscriptions désactivées +- **HTTPS automatique** : Certificats Let's Encrypt via Traefik +- **Limites de ressources** : Protection contre les fuites mémoire +- **Health checks** : Surveillance automatique de l'état du service +- **Configuration SMTP** : Récupération de mot de passe par email + +## Prérequis + +- Docker et Docker Compose installés +- Traefik configuré avec le réseau `traefik-net` +- Nom de domaine pointant vers votre serveur +- Serveur SMTP (optionnel, pour les emails) + +## Installation + +### 1. Cloner le projet + +```bash +git clone +cd agence66-vaultwarden +``` + +### 2. Configuration + +Copier et éditer le fichier d'environnement : + +```bash +cp .env.example .env +nano .env +``` + +### 3. Variables d'environnement + +Configurer les variables dans `.env` : + +```env +# Domaine public de votre instance +DOMAIN=vault.example.com + +# Token admin (IMPORTANT : générer un token fort) +ADMIN_TOKEN= + +# Configuration SMTP (optionnel) +SMTP_HOST=smtp.example.com +SMTP_PORT=587 +SMTP_FROM=vaultwarden@example.com +SMTP_USER=votre-utilisateur +SMTP_PASSWORD=votre-mot-de-passe +``` + +#### Générer un token admin sécurisé + +**Étape 1 : Générer un token aléatoire** + +```bash +openssl rand -base64 48 +``` + +**Étape 2 : Hasher le token (RECOMMANDÉ)** + +Pour une sécurité maximale, il est **fortement recommandé** de hasher le token avec Argon2 avant de le mettre dans `.env`. + +**Option A : Avec Docker (pas besoin d'installer argon2)** + +```bash +# Remplacer YOUR_TOKEN par le token généré à l'étape 1 +echo -n "YOUR_TOKEN" | docker run --rm -i vaultwarden/server:latest \ + /vaultwarden hash --preset owasp +``` + +**Option B : Avec argon2 installé localement** + +```bash +# Installation (Debian/Ubuntu) +sudo apt install argon2 + +# Hasher le token +echo -n "YOUR_TOKEN" | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4 +``` + +**Utilisation du hash** + +1. Copiez le hash généré (commence par `$argon2id$...`) +2. Mettez-le dans `.env` comme ceci : + +```env +ADMIN_TOKEN=$argon2id$v=19$m=65540,t=3,p=4$base64hash... +``` + +3. Pour vous connecter au panel admin, utilisez le **token en clair** (celui de l'étape 1), pas le hash + +**Pourquoi hasher ?** + +- ✅ **Sécurité** : Si quelqu'un accède à votre `.env`, il ne peut pas utiliser le hash directement +- ✅ **Protection** : Le hash ne peut pas être inversé pour retrouver le token +- ✅ **Best practice** : Recommandé par la documentation officielle Vaultwarden + +**Documentation officielle** : [Securing the admin token](https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page#secure-the-admin_token) + +### 4. Créer le répertoire de données + +```bash +mkdir -p data +chmod 700 data +``` + +### 5. Démarrer le service + +```bash +docker compose up -d +``` + +### 6. Vérifier le statut + +```bash +docker compose ps +docker compose logs -f vaultwarden +``` + +## Accès + +- **Interface utilisateur** : `https://votre-domaine.com` +- **Panel admin** : `https://votre-domaine.com/admin` + - Token requis (celui dans `.env`) + +## Configuration de sécurité + +### Capabilities Linux + +Le container utilise le principe du moindre privilège : +- Toutes les capabilities sont supprimées (`cap_drop: ALL`) +- Seules les capabilities nécessaires sont ajoutées : + - `CHOWN` : Changer propriétaire des fichiers + - `SETGID` : Changer group ID + - `SETUID` : Changer user ID + +### Rate Limiting + +Protection contre le brute-force : +- **Connexions** : 10 tentatives max par 60 secondes +- **Emails** : 3 tentatives max, expiration 10 minutes + +### Limites de ressources + +- **Mémoire max** : 256 MB +- **CPU max** : 50% d'un core +- **Mémoire réservée** : 128 MB + +## Backup + +### Backup manuel + +```bash +# Arrêter le service +docker compose down + +# Créer une archive datée +tar -czf backup-vaultwarden-$(date +%Y%m%d-%H%M%S).tar.gz data/ + +# Redémarrer le service +docker compose up -d +``` + +### Backup automatique (cron) + +Créer un script `/usr/local/bin/backup-vaultwarden.sh` : + +```bash +#!/bin/bash +BACKUP_DIR="/path/to/backups" +cd /path/to/agence66-vaultwarden + +docker compose exec vaultwarden sqlite3 /data/db.sqlite3 ".backup /data/db-backup.sqlite3" +tar -czf "${BACKUP_DIR}/vaultwarden-$(date +%Y%m%d-%H%M%S).tar.gz" data/ +find "${BACKUP_DIR}" -name "vaultwarden-*.tar.gz" -mtime +30 -delete +``` + +Ajouter au crontab : + +```bash +0 2 * * * /usr/local/bin/backup-vaultwarden.sh +``` + +## Restore + +```bash +# Arrêter le service +docker compose down + +# Supprimer les données actuelles +rm -rf data/* + +# Extraire le backup +tar -xzf backup-vaultwarden-YYYYMMDD-HHMMSS.tar.gz + +# Redémarrer +docker compose up -d +``` + +## Maintenance + +### Mise à jour + +```bash +# 1. Backup (voir section Backup) + +# 2. Mettre à jour l'image dans docker-compose.yml +# Remplacer : image: vaultwarden/server:latest +# Par : image: vaultwarden/server:1.31.0 (version désirée) + +# 3. Télécharger la nouvelle image +docker compose pull + +# 4. Recréer le container +docker compose up -d + +# 5. Vérifier les logs +docker compose logs -f vaultwarden +``` + +### Logs + +```bash +# Temps réel +docker compose logs -f vaultwarden + +# 100 dernières lignes +docker compose logs --tail=100 vaultwarden +``` + +### Healthcheck + +```bash +# Vérifier l'état +docker inspect vaultwarden --format='{{.State.Health.Status}}' + +# Doit retourner : healthy +``` + +## Dépannage + +### Le service ne démarre pas + +```bash +# Vérifier les logs +docker compose logs vaultwarden + +# Vérifier le réseau Traefik +docker network ls | grep traefik-net + +# Créer le réseau si nécessaire +docker network create traefik-net +``` + +### Erreur certificat SSL + +Vérifier que : +- Le domaine pointe bien vers le serveur (DNS) +- Le port 80 est ouvert (Let's Encrypt challenge) +- Traefik est correctement configuré + +### Impossible de se connecter + +```bash +# Vérifier que le service répond +curl -I http://localhost:80/alive + +# Vérifier les labels Traefik +docker inspect vaultwarden | grep traefik +``` + +### Problème de performance + +Ajuster les limites dans `docker-compose.yml` : + +```yaml +deploy: + resources: + limits: + memory: 512M # Augmenter si nécessaire + cpus: '1.0' +``` + +## Sécurité additionnelle (recommandé) + +### Fail2Ban + +Installer Fail2Ban pour bloquer les IPs suspectes : + +```bash +# /etc/fail2ban/filter.d/vaultwarden.conf +[Definition] +failregex = ^.*Username or password is incorrect\. Try again\. IP: \. Username:.*$ +ignoreregex = +``` + +### Authentification 2FA + +Configurer 2FA pour tous les utilisateurs via l'interface web. + +### Audit régulier + +Vérifier régulièrement : +- Panel admin → View logs +- Utilisateurs actifs +- Appareils connectés + +## Architecture + +``` +Internet + ↓ +Traefik (reverse proxy) + ↓ HTTPS +Vaultwarden (Docker) + ↓ +./data (SQLite + attachments) +``` + +## Ressources + +- [Vaultwarden Wiki](https://github.com/dani-garcia/vaultwarden/wiki) +- [Vaultwarden GitHub](https://github.com/dani-garcia/vaultwarden) +- [Configuration SMTP](https://github.com/dani-garcia/vaultwarden/wiki/SMTP-Configuration) +- [Sécurité Admin Panel](https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page#secure-the-admin_token) + +## Licence + +Ce projet de déploiement est libre d'utilisation. Vaultwarden est sous licence GPL-3.0.