Aller au contenu

Sécurité et durcissement

Le module darkone.system.security applique progressivement les recommandations de durcissement ANSSI BP-028 🡕 (GNU/Linux). Chaque hôte choisit un niveau et une catégorie ; les règles adaptées s’activent automatiquement.

darkone.system.security = {
enable = true;
level = "intermediary"; # minimal | intermediary | reinforced | high
category = "server"; # base | client | server
};
NiveauPour quoi
minimalSocle commun, tout système (défaut)
intermediaryRecommandé pour la quasi-totalité des systèmes
reinforcedSystèmes sensibles ou multi-utilisateurs
highCompétences et budget dédiés (recompilation noyau)
CatégoriePour quoi
baseRègles universelles, toujours appliquées (défaut)
clientPoste de travail (bureau, USB, session, verrouillage)
serverServeur (réseau durci, journalisation, services exposés)

Certaines règles cassent un usage légitime. On désactive un groupe par tag :

darkone.system.security.excludes = [ "needs-hibernation" "needs-jit" ];
TagDésactive
kernel-recompileRègles noyau custom (R15–R27)
no-ipv6Désactivation IPv6 (R13, R22)
no-macMAC / AppArmor (R37, R45)
needs-hibernationConserve l’hibernation (portables)
needs-jitAutorise le JIT (Java, .NET, V8, Wasm)
needs-usb-hotplugDésactive USBGuard

Une règle unique se contourne avec une justification obligatoire :

darkone.system.security.exceptions = {
R9.rationale = "Conteneurs rootless requis en développement.";
};
  • MAC / AppArmor (R37, R45) : confinement applicatif ; SELinux est structurellement non supporté sur NixOS (exceptions R46–R49 par défaut).
  • Pare-feu & réseau : durcis par la catégorie server (module network).
  • fail2ban : bannit les IP après tentatives répétées ; service à activer dans le catalogue.

Deux règles demandent une décision explicite de l’administrateur :

  • Bac à sable systemd (R52, R55, R63) : le confinement complet s’applique aux unités déclarées dans darkone.security.services.hardenedUnitsvide par défaut, car un durcissement aveugle casserait des services. On y ajoute les unités au cas par cas après test.
  • Amorçage et chiffrement (R3, R5, C6) : le module avertit si le Secure Boot ou LUKS ne sont pas détectés, mais ne reconfigure pas le démarrage. Ces protections se déclarent dans la configuration disque de l’hôte (disko, lanzaboote).
darkone.security.services.hardenedUnits = [ "nginx" "gitea" ];