Securite¶
Doctrine securite : 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 procedure en cas d'incident : break-glass.md.
Modele de menace¶
| Acteur | Capacite | Mesures |
|---|---|---|
| Script kiddies internet | Scans automatises, brute-force | Pas de port forward, Tailscale only, fail2ban, SSH cles uniquement |
| FAI / MITM | Interception trafic | TLS partout, WireGuard mesh (Tailscale), DNSSEC |
| Voisin LAN compromis | Acces reseau local | Firewall iptables DROP, services admin limites 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 | Watchtower surveille versions — signature verification a faire (P2) |
| Compromission cle SSH | sudo NOPASSWD = root immediat | Passphrase + YubiKey ssh-agent — a deployer cote client (P2) |
| Phishing TOTP (AITM) | Replay credentials | WebAuthn FIDO2 (YubiKey) actif sur Authelia |
Hors perimetre : APT etat-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) : legere variation pour casser les scripts.- Format futur :
<prenom><initiale_nom>(ex:gabins).
Comptes legacy (admin, gabin) : tous supprimes la ou ils existaient (Grafana admin desactive, Proxmox gabin@authelia retire, etc.).
Comptes de service¶
Format svc-<fonction> : svc-homepage, svc-backup. Pas de mot de passe utilisateur — tokens API ou cles SSH exclusivement.
Exceptions admises (pas SSO) :
- root@pam sur Proxmox : inevitable (compte systeme). Protection : SSH cle + fail2ban + ACL gabins@authelia Administrator prime.
- gabins AdGuard (bcrypt local) : AdGuard ne supporte pas OIDC. Mitigation prevue : ForwardAuth Authelia devant.
Mots de passe¶
| Niveau | Services | Longueur | Rotation |
|---|---|---|---|
| Critique | Authelia, Vaultwarden master, Proxmox root@pam | 32 chars | A la compromission |
| Eleve | AdGuard local, Portainer fallback | 32 chars | A la compromission |
| OIDC clients | Secrets OIDC (Proxmox, Portainer, Beszel, Grafana) | 256 bits | 12 mois max |
Generation : openssl rand -base64 48 | head -c 32.
Stockage : exclusif Vaultwarden. Jamais dans un script, un .env versionne ou un message.
Authentification forte¶
| Service | Methode | Auto-login | Internal login |
|---|---|---|---|
| Authelia | TOTP + WebAuthn FIDO2 YubiKey | — (source de verite) | — |
| Proxmox galahad/lancelot | OIDC Authelia (two_factor) | Non (realm selector) | root@pam (inevit.) |
| Portainer | OIDC Authelia (two_factor) | Oui (SSO + hide internal) | gabins local (break-glass) |
| Grafana | OIDC Authelia (two_factor) + PKCE S256 | Oui (auto_login=true) |
Admin desactive en DB |
| Beszel | OIDC Authelia (one_factor) | Non (PocketBase) | Superuser /_/ separe |
| Homepage / AdGuard | ForwardAuth Authelia | Oui (transparent) | AdGuard bcrypt seul |
| SSH | Cle Ed25519 uniquement | — | — |
| Vaultwarden | Master password + TOTP | — | — |
| Tailscale | WireGuard + SSO identity | — | — |
Rotation / revocation¶
| Element | Rotation | Procedure |
|---|---|---|
| Mot de passe gabins (OS) | A la compromission | SSH via Tailscale, passwd |
| Cles 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 necessaire si encryption_key change |
| Master Vaultwarden | Au choix | UI Vaultwarden |
Session Authelia¶
| Parametre | Valeur | Note |
|---|---|---|
expiration |
4h | Session active |
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
- Selectionner appareil > Disable (acces immediat 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 generes)
- 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 secretportainerclient secretgrafanaclient secretbeszelclient secret
OS / Infra¶
root@pamProxmox galahad + lancelot- Passphrases cles SSH (par machine)
- bcrypt AdGuard gabins
- Portainer admin (fallback)
Externals¶
- Cloudflare API token (
CF_DNS_API_TOKEN) - Tailscale auth key (
TS_AUTHKEY) - Backblaze B2 credentials (
B2_ACCOUNT_ID,B2_ACCOUNT_KEY) - ntfy topic URL
Homepage widgets (readonly service accounts)¶
HOMEPAGE_VAR_PVE_TOKEN_ID+_SECRETHOMEPAGE_VAR_PORTAINER_KEYHOMEPAGE_VAR_BESZEL_USER+_PASSHOMEPAGE_VAR_ADGUARD_USER+_PASS
Hors Vault (volontaire — eviter la dependance circulaire)¶
- Restic backup password : cle USB physique + copie papier. Si Vault perdu + restic perdu = backups illisibles.
- Master password Vaultwarden : dans la tete + 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 — procedure et architecture de sauvegarde
- Break-glass — procedure de reconstruction en cas d'incident