--- title: "Config VPS — Snapshot 17 avril 2026" type: log created: 2026-04-17 owner: jerem agent: DAEMON status: active tags: - infra - vps - config - snapshot related: - "[[projects/deamon-backend]]" - "[[_adn/routing-llm]]" --- # Config VPS — 17 avril 2026 > Snapshot de l'état du VPS après Phase 1-6 + audit sécurité/stabilité. --- ## Serveur | Élément | Valeur | |---|---| | Hébergeur | Hostinger — VPS dédié | | OS | Ubuntu 22.04.5 LTS | | Kernel | 5.15.0-176-generic | | CPU | AMD EPYC 9354P — 2 cores | | RAM | 7.8 GB | | Swap | 4 GB | | Disque | 97 GB (15% utilisé) | | IP publique | 76.13.42.203 | | IP VPN | 10.66.66.1 | | SSH | Port 2222, clé uniquement, root désactivé | | Domaine | jeremunlimited.com (DNS OVH) | | Wildcard DNS | *.jeremunlimited.com → 76.13.42.203 | --- ## Accès | Méthode | Commande / URL | |---|---| | SSH | `ssh -p 2222 jerem@10.66.66.1` (VPN requis) | | Coolify | https://coolify.jeremunlimited.com | | Gitea | https://git.jeremunlimited.com | | n8n | https://n8n.jeremunlimited.com | | Uptime Kuma | https://kuma.jeremunlimited.com | | Whisper | https://whisper.jeremunlimited.com | --- ## Services Docker | Container | Image | Port interne | Restart | Réseau | |---|---|---|---|---| | gitea | gitea/gitea:1.22 | 3000 | always | coolify + internal | | gitea-db | postgres:16-alpine | 5432 | always | internal | | n8n | n8nio/n8n:latest | 5678 | always | coolify | | whisper | fedirz/faster-whisper-server:latest-cpu | 8000 | always | coolify | | uptime-kuma | louislam/uptime-kuma:1 | 3001 | always | coolify | | coolify | coolify:4.0.0-beta.473 | 8080 | always | coolify | | coolify-proxy | traefik:v3.6 | 80/443 | unless-stopped | coolify | | coolify-sentinel | sentinel:0.0.21 | — | always | coolify | | coolify-db | postgres:15-alpine | 5432 | always | coolify | | coolify-redis | redis:7-alpine | 6379 | always | coolify | | coolify-realtime | coolify-realtime:1.0.13 | 6001-6002 | always | coolify | --- ## Sécurité | Mesure | Status | |---|---| | SSH port 2222 (port 22 fermé) | ✅ | | Root login désactivé (sauf Docker local) | ✅ | | Password auth désactivé | ✅ | | Fail2ban sur sshd | ✅ | | WireGuard VPN (split tunnel) | ✅ | | UFW firewall (deny par défaut) | ✅ | | HTTPS Let's Encrypt sur tous les services | ✅ | | Unattended security upgrades | ✅ | | Kernel à jour | ✅ | ### Ports ouverts (UFW) | Port | Protocole | Usage | |---|---|---| | 2222/tcp | ALLOW | SSH | | 51820/udp | ALLOW | WireGuard | | 22/tcp | ALLOW 10.0.0.0/24, 10.0.1.0/24, 76.13.42.203 | Coolify interne | | 6001, 6002, 8080 | DENY | Bloqués par UFW (note: Docker bypass UFW) | ### Limitation connue Docker manipule iptables directement et bypass UFW. Les ports 6001/6002/8080/8000 exposés par Coolify restent techniquement accessibles depuis l'extérieur malgré les règles DENY. Risque limité car ces services requièrent une authentification. --- ## Stabilité | Mesure | Status | |---|---| | Swap 4 GB | ✅ | | Restart policy `always` sur tous les containers | ✅ | | Log rotation Docker (10MB × 3 fichiers) | ✅ | | Backup quotidien 3h00 UTC (rétention 7 jours) | ✅ | | Backup path | /home/jerem/backups/ | | Backup script | /home/jerem/daemon-infra/backup.sh | --- ## Fichiers clés sur le VPS ``` /home/jerem/ ├── daemon-infra/ │ ├── docker-compose.yml # Tous les services DAEMON │ ├── .env # GITEA_DB_PASS │ ├── backup.sh # Script backup quotidien │ ├── gitea/ # Data Gitea + PostgreSQL │ ├── n8n/ # Data n8n │ ├── uptime-kuma/ # Data Uptime Kuma │ ├── whisper/ # Modèles Whisper │ └── openclaw/ # OpenClaw (installé, pas configuré) ├── backups/ # Backups quotidiens └── .ssh/ # Clés SSH ``` --- ## WireGuard | Élément | Valeur | |---|---| | VPS (serveur) | 10.66.66.1, port 51820 | | Mac (client) | 10.66.66.2 | | Mode | Split tunnel (seul le trafic 10.66.66.x passe par le VPN) | | Config VPS | /etc/wireguard/wg0.conf | --- ## Traefik (reverse proxy) - Géré par Coolify (container coolify-proxy) - Certificats Let's Encrypt automatiques (HTTP challenge) - Config dynamique : /data/coolify/proxy/dynamic/ - Coolify routé via fichier `coolify-domain.yaml` (nom container, pas IP) - Nos services routés via labels Docker dans docker-compose.yml --- ## Ce qui reste à faire - [ ] Phase 10 — Doppler (gestion des secrets) - [ ] Phase 11 — OpenClaw (configuration agent) - [ ] Phase 12 — Sync Vault Mac ↔ Gitea ↔ VPS - [ ] Déplacer le vault hors d'iCloud (recommandé pour Git sync) - [ ] Configurer les monitors Uptime Kuma - [ ] Tester Whisper (envoi d'un fichier audio) --- *Généré automatiquement par DAEMON — session du 17 avril 2026* --- ## Addendum — Hardening Docker (même session) ### Problème résolu Docker bypass UFW en manipulant iptables directement. Les ports Coolify (8000, 8080, 6001, 6002) et nos services (3000, 3001, 5678) étaient accessibles depuis internet malgré les règles UFW DENY. ### Solution Règles iptables dans la chaîne `DOCKER-USER` (la seule que Docker respecte) : **Autorisé :** - Ports 80/443 depuis partout (Traefik HTTPS + Let's Encrypt) - Tout trafic depuis le VPN (10.66.66.0/24) - Tout trafic Docker interne (10.0.0.0/8, 172.16.0.0/12) - Port 22 (Gitea SSH) depuis le VPN uniquement **Bloqué (DROP) depuis internet :** - Port 8000 (Coolify) - Port 8080 (Traefik dashboard) - Port 6001/6002 (Coolify Realtime) - Port 5678 (n8n) - Port 3000 (Gitea) - Port 3001 (Uptime Kuma) ### Persistance `iptables-persistent` installé, règles sauvegardées → survivent au reboot. ### Résultat - Accès direct IP:port depuis internet → **timeout (DROP)** ✅ - Accès HTTPS via domaines → **fonctionne** ✅ (Traefik route en interne) - Accès VPN → **fonctionne** ✅ **Risque résiduel : 0** — Seuls les ports 80/443 (Traefik) et 2222 (SSH) sont accessibles depuis internet. Tout le reste est DROP.