Aller au contenu principal

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​

ActeurCapacitéMesures
Script kiddies internetScans automatises, brute-forcePas de port forward, Tailscale only, fail2ban, SSH clés uniquement
FAI / MITMInterception traficTLS partout, WireGuard mesh (Tailscale), DNSSEC
Voisin LAN compromisAcces réseau localFirewall iptables DROP, services admin limités LAN+TS, Authelia 2FA
Vol physique RPi/SSDAcces direct au disqueBackups off-site OK — chiffrement disque a faire (Phase OPNsense)
Invite / familleWiFi domestiqueA couvrir avec OPNsense + VLANs (Phase 2)
Supply chain DockerImage 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é SSHsudo NOPASSWD = root immédiatPassphrase + YubiKey ssh-agent — a déployer côté client (P2)
Phishing TOTP (AITM)Replay credentialsWebAuthn 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, ou gabin : noms previsibles = cibles automatisees.
  • gabins (avec s) : 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@pam sur Proxmox : inevitable (compte système). Protection : SSH clé + fail2ban + ACL gabins@authelia Administrator prime.
  • gabins AdGuard (bcrypt local) : AdGuard ne supporte pas OIDC. Mitigation prévue : ForwardAuth Authelia devant.

Mots de passe​

NiveauServicesLongueurRotation
CritiqueAuthelia, Vaultwarden master, Proxmox root@pam32 charsA la compromission
ÉlevéAdGuard local32 charsA la compromission
OIDC clientsSecrets OIDC (Proxmox, Grafana, PBS, Pulse, Forgejo, Outline)256 bits12 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​

ServiceMéthodeAuto-loginInternal login
AutheliaTOTP + WebAuthn FIDO2 YubiKey— (source de vérité)—
Proxmox galahad/lancelotOIDC Authelia (two_factor)Non (realm selector)root@pam (inevit.)
GrafanaOIDC Authelia (two_factor) + PKCE S256Oui (auto_login=true)Admin désactivé en DB
Homepage / AdGuardForwardAuth AutheliaOui (transparent)AdGuard bcrypt seul
SSHClé Ed25519 uniquement——
VaultwardenMaster password + TOTP——
TailscaleWireGuard + SSO identity——

Rotation / revocation​

ElementRotationProcédure
Mot de passe gabins (OS)A la compromissionSSH via Tailscale, passwd
Clés SSHPar appareilsed -i '/key_pattern/d' ~/.ssh/authorized_keys sur chaque host
Tokens API (Cloudflare, Tailscale, B2)12 mois maxUI provider -> nouveau token -> .env -> restart service
Secrets OIDC12 mois maxopenssl rand -base64 32 -> hash pbkdf2 -> update Authelia + service
Authelia internals (jwt/session/storage)A la compromission uniquementMigration DB nécessaire si encryption_key change
Master VaultwardenAu choixUI Vaultwarden

Session Authelia​

ParamètreValeurNote
expiration4hSession activé
inactivity30mTimeout si idle
remember_me7dCookie persistent (compromise browser = max 7j). Non differenciable par groupe en Authelia v4.

Revocation Tailscale​

  1. login.tailscale.com > Machines
  2. Sélectionner appareil > Disable (acces immédiat coupe)
  3. Si perdu definitivement : Remove
  4. 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.secret
  • storage.encryption_key
  • identity_providers.oidc.hmac_secret
  • OIDC JWKS private key (oidc.pem)

Clients OIDC (secret en clair — les hash pbkdf2 restent dans configuration.yml)​

  • proxmox client secret
  • grafana client secret
  • pbs client secret
  • pulse client secret
  • forgejo client secret
  • outline client 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@pam Proxmox 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 + _SECRET
  • HOMEPAGE_VAR_PBS_TOKEN_ID + _SECRET
  • HOMEPAGE_VAR_PULSE_TOKEN
  • HOMEPAGE_VAR_ADGUARD_USER + _PASS
  • HOMEPAGE_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