Sécurité
Doctrine sécurité : qui on defend contre quoi, jusqu'ou, et comment les credentials sont gerees.
Pour les mesures techniques par couche (sysctl, firewall rules, SSH, containers) : hardening.md. Pour les actions restantes : roadmap.md. Pour la procédure en cas d'incident : break-glass.md.
Modèle de menace
| Acteur | Capacité | Mesures |
|---|---|---|
| Script kiddies internet | Scans automatises, brute-force | Pas de port forward, Tailscale only, fail2ban, SSH clés uniquement |
| FAI / MITM | Interception trafic | TLS partout, WireGuard mesh (Tailscale), DNSSEC |
| Voisin LAN compromis | Acces réseau local | Firewall iptables DROP, services admin limités LAN+TS, Authelia 2FA |
| Vol physique RPi/SSD | Acces direct au disque | Backups off-site OK — chiffrement disque a faire (Phase OPNsense) |
| Invite / famille | WiFi domestique | A couvrir avec OPNsense + VLANs (Phase 2) |
| Supply chain Docker | Image malveillante | Épinglage par digest @sha256 — les 22 images de penny, le LXC vault, le LXC pulse, et 3 des 4 du LXC logs (la 4e, homelab/ntfy-relay, est construite localement). Relevé le 2026-09-24 ; cette ligne annonçait encore « 4 images flottent sur le LXC logs ». Plus d'auto-update depuis le retrait de Watchtower le 2026-07-06 ; digest-drift-check notifie l'écart amont et les images non épinglées — vérification de signature à faire (P2) |
| Compromission clé SSH | sudo NOPASSWD = root immédiat | Passphrase + YubiKey ssh-agent — a déployer côté client (P2) |
| Phishing TOTP (AITM) | Replay credentials | WebAuthn FIDO2 (YubiKey) actif sur Authelia |
Hors perimetre : APT état-nation, compromission providers (Cloudflare / LE / Tailscale), vol master Vaultwarden (SPOF assume).
Politique de credentials
Comptes humains
Un seul compte nominatif partout : gabins.
- Jamais
admin,pi, ougabin: noms previsibles = cibles automatisees. gabins(avecs) : légère variation pour casser les scripts.- Format futur :
<prenom><initiale_nom>(ex:gabins).
Comptes legacy (admin, gabin) : tous supprimés la ou ils existaient (Grafana admin désactivé, Proxmox gabin@authelia retire, etc.).
Comptes de service
Format svc-<fonction> : svc-homepage, svc-backup. Pas de mot de passe utilisateur — tokens API ou clés SSH exclusivement.
Exceptions admises (pas SSO) :
root@pamsur Proxmox : inevitable (compte système). Protection : SSH clé + fail2ban + ACLgabins@autheliaAdministrator prime.gabinsAdGuard (bcrypt local) : AdGuard ne supporte pas OIDC. Mitigation prévue : ForwardAuth Authelia devant.
Mots de passe
| Niveau | Services | Longueur | Rotation |
|---|---|---|---|
| Critique | Authelia, Vaultwarden master, Proxmox root@pam | 32 chars | A la compromission |
| Élevé | AdGuard local | 32 chars | A la compromission |
| OIDC clients | Secrets OIDC (Proxmox, Grafana, PBS, Pulse, Forgejo, Outline) | 256 bits | 12 mois max |
Génération : openssl rand -base64 48 | head -c 32.
Stockage : exclusif Vaultwarden. Jamais dans un script, un .env versionne ou un message.
Authentification forte
| Service | Méthode | Auto-login | Internal login |
|---|---|---|---|
| Authelia | TOTP + WebAuthn FIDO2 YubiKey | — (source de vérité) | — |
| Proxmox galahad/lancelot | OIDC Authelia (two_factor) | Non (realm selector) | root@pam (inevit.) |
| Grafana | OIDC Authelia (two_factor) + PKCE S256 | Oui (auto_login=true) | Admin désactivé en DB |
| Homepage / AdGuard | ForwardAuth Authelia | Oui (transparent) | AdGuard bcrypt seul |
| SSH | Clé Ed25519 uniquement | — | — |
| Vaultwarden | Master password + TOTP | — | — |
| Tailscale | WireGuard + SSO identity | — | — |
Rotation / revocation
| Element | Rotation | Procédure |
|---|---|---|
| Mot de passe gabins (OS) | A la compromission | SSH via Tailscale, passwd |
| Clés SSH | Par appareil | sed -i '/key_pattern/d' ~/.ssh/authorized_keys sur chaque host |
| Tokens API (Cloudflare, Tailscale, B2) | 12 mois max | UI provider -> nouveau token -> .env -> restart service |
| Secrets OIDC | 12 mois max | openssl rand -base64 32 -> hash pbkdf2 -> update Authelia + service |
| Authelia internals (jwt/session/storage) | A la compromission uniquement | Migration DB nécessaire si encryption_key change |
| Master Vaultwarden | Au choix | UI Vaultwarden |
Session Authelia
| Paramètre | Valeur | Note |
|---|---|---|
expiration | 4h | Session activé |
inactivity | 30m | Timeout si idle |
remember_me | 7d | Cookie persistent (compromise browser = max 7j). Non differenciable par groupe en Authelia v4. |
Revocation Tailscale
- login.tailscale.com > Machines
- Sélectionner appareil > Disable (acces immédiat coupe)
- Si perdu definitivement : Remove
- Reauth globale : Settings > Keys > Auth keys > Revoke
Inventaire des secrets a stocker dans Vaultwarden
Authentification primaire
- Master Authelia
gabins— plain password - Backup codes TOTP Authelia (si générés)
- YubiKey backup codes
Internals Authelia
jwt_secret(reset password)session.secretstorage.encryption_keyidentity_providers.oidc.hmac_secret- OIDC JWKS private key (
oidc.pem)
Clients OIDC (secret en clair — les hash pbkdf2 restent dans configuration.yml)
proxmoxclient secretgrafanaclient secretpbsclient secretpulseclient secretforgejoclient secretoutlineclient secret
Les secrets portainer, beszel, homelable et securo sont à purger du coffre : leurs
clients ont été retirés de configuration.yml en novembre 2026.
OS / Infra
root@pamProxmox galahad + lancelot- Passphrases clés SSH (par machine)
- bcrypt AdGuard gabins
Externals
- Cloudflare API token (
CF_DNS_API_TOKEN) - Tailscale auth key (
TS_AUTHKEY) - Cloudflare R2 credentials (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) - ntfy topic URL
Homepage widgets (readonly service accounts)
HOMEPAGE_VAR_PVE_TOKEN_ID+_SECRETHOMEPAGE_VAR_PBS_TOKEN_ID+_SECRETHOMEPAGE_VAR_PULSE_TOKENHOMEPAGE_VAR_ADGUARD_USER+_PASSHOMEPAGE_VAR_CROWDSEC_USER+_PASS
(Relevé dans homepage/services.yaml le 2026-11-04.)
Hors Vault (volontaire — éviter la dépendance circulaire)
- Restic backup password : clé USB physique + copie papier. Si Vault perdu + restic perdu = backups illisibles.
- Master password Vaultwarden : dans la tête + papier en coffre.
Voir aussi
- Hardening — mesures techniques par couche (sysctl, firewall, SSH, containers)
- Authelia (SSO) — configuration SSO et clients OIDC
- Tailscale ACLs — acces distant et politique ACL
- Backups — procédure et architecture de sauvegarde
- Break-glass — procédure de reconstruction en cas d'incident