Laboratoire & Architecture interne · Architecture active & maintenue
Environnement Cloud privé auto-hébergé (Nextcloud, Vaultwarden, Immich) et défense périmétrique
Services collaboratifs conteneurisés derrière Reverse Proxy TLS, authentification forte et CrowdSec
Contexte
Remplacer la dispersion de données sur des services tiers par des briques open-source auto-hébergées exige une rigueur particulière : exposer un service web mal durci sur Internet l’expose immédiatement aux robots de scan et aux tentatives de force brute.
Besoin
Construire une pile auto-hébergée propre, rapide et maintenable où chaque service est isolé dans son réseau Docker interne, derrière un point d’entrée unique chiffré et surveillé.
Architecture
Seul le reverse proxy écoute en frontal (443/TCP) et gère les certificats TLS. Les conteneurs applicatifs (Nextcloud + PostgreSQL + Redis, Vaultwarden, Immich, Gitea) résident sur des réseaux Docker internes segmentés sans port exposé directement sur l’hôte. Les journaux du reverse proxy sont analysés en temps réel par CrowdSec pour bannir les adresses IP malveillantes, et les interfaces sensibles sont protégées par authentification multifacteur.
Briques mises en œuvre.
| Technologie | Rôle | Statut |
|---|---|---|
| Nextcloud + PostgreSQL + Redis | Synchronisation de fichiers, agendas CalDAV et contacts CardDAV | Déployable sur périmètre client |
| Vaultwarden | Serveur de coffre-fort de mots de passe léger compatible clients Bitwarden | Déployable sur périmètre client |
| Reverse Proxy TLS (Caddy / Traefik) | Terminaison HTTPS automatique et en-têtes de sécurité | Maîtrisé en production/lab |
| CrowdSec & Authelia | Analyse comportementale des logs et portail SSO / 2FA | Maîtrisé en production/lab |
| Immich & Gitea | Sauvegarde photo automatisée et gestion de dépôts de code Git privés | Maîtrisé en production/lab |
Décisions techniques
- Adoption de PostgreSQL et d’un cache mémoire Redis pour Nextcloud afin d’éviter les lenteurs constatées avec les configurations par défaut (SQLite/MySQL non optimisé) lors de la synchronisation de milliers de petits fichiers.
- Verrouillage des inscriptions publiques sur Vaultwarden (`SIGNUPS_ALLOWED=false`) après création des comptes autorisés, et accès à la page `/admin` restreint au réseau local/VPN.
- Épinglage des versions d’images Docker (tags explicites plutôt que `:latest` aveugle) pour contrôler les montées de version après sauvegarde préalable.
Précautions de sécurité
- Aucun port de base de données (5432, 6379) n’est publié sur les interfaces réseau de l’hôte (`expose` interne uniquement).
- Application des en-têtes HTTP de sécurité (HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy).
- Sauvegarde quotidienne cohérente : dump transactionnel PostgreSQL (`pg_dump`) couplé à l’archivage chiffré des volumes de fichiers.
Résultat constaté
Synchronisation fluide sur ordinateurs et smartphones (iOS/Android), gestion centralisée des secrets et visibilité claire sur les tentatives d’intrusion bloquées en amont.
Compromis et limites connues
Pour une entreprise, l’exposition directe sur Internet d’outils internes n’est pas toujours nécessaire : lorsqu’un service n’a pas besoin d’être public, je privilégie un accès exclusivement via VPN WireGuard plutôt qu’une exposition publique.
Prochaine étape
Étudier une architecture proche pour votre structure ?
Décrivez votre cas : je réponds franchement, y compris quand la réparation ne vaut pas le coup.