Cette page récapitule quelles règles ANSSI s’activent , selon le niveau et
la catégorie d’un hôte. C’est la référence à consulter avant de monter le
durcissement d’une machine.
Comprendre d’abord
Les notions employées ici (niveaux, catégories, étiquettes, MAC, egress…) sont
expliquées dans Notions de
sécurité .
darkone . system . security = {
level = " intermediary " ; # minimal | intermediary | reinforced | high
category = " server " ; # base | client | server
Les niveaux sont cumulatifs : intermediary ajoute ses règles à celles de
minimal, et ainsi de suite. La catégorie ajoute les règles propres au poste
(client) ou au serveur (server).
Profil Catégorie conseillée Pourquoi minimal, portablebaseSocle universel desktop, laptopclientÉcran, USB, session interactive server, gateway, hcs, vmserverServices exposés, réseau
Aujourd’hui : base partout
Le rattachement automatique profil → catégorie n’est pas encore actif. Tous les
hôtes sont en minimal / base par défaut. Pour appliquer une catégorie, posez
category à la main sur l’hôte concerné.
Chaque colonne indique l’état de la règle à ce niveau (les niveaux étant
cumulatifs). Légende :
Icône Signification ✅ Active à ce niveau ⚠️ Partielle (voir la note) ❌ Pas encore active à ce niveau
Code Règle Min Inter Renf Élevé R3Secure Boot UEFI (si supporté) ❌ ⚠️ ⚠️ ⚠️ R5Mot de passe du chargeur d’amorçage ❌ ⚠️ ⚠️ ⚠️ C6Chiffrement disque LUKS2 ❌ ⚠️ ⚠️ ⚠️ R7IOMMU activé ❌ ❌ ✅ ✅ R29/boot restreint❌ ❌ ✅ ✅ R6Protection cmdline et initramfs ❌ ❌ ❌ ✅
R3, R5, C6 : avertissement, pas de reconfiguration de l’amorçage
À partir de intermediary, ces règles émettent un avertissement quand la
protection n’est pas détectée, mais ne reconfigurent pas le démarrage. Le Secure
Boot (lanzaboote, enrôlement de clés) et le chiffrement LUKS se déclarent dans
la configuration disque de l’hôte (disko) ; le module ne fait que signaler
leur absence. Le futur checkScript vérifiera leur état réel.
Code Règle Min Inter Renf Élevé R8Options mémoire sur la ligne de commande ❌ ✅ ✅ ✅ R9sysctls de durcissement ❌ ✅ ✅ ✅ R11Yama : ptrace restreint ❌ ✅ ✅ ✅ R10Chargement de modules désactivé ❌ ❌ ✅ ✅ R60Noyau linux_hardened ❌ ❌ ✅ ✅ C1Patchs linux-hardened ❌ ❌ ❌ ✅ C2LSM Lockdown ❌ ❌ ❌ ✅ R15–R27Durcissement à la compilation ❌ ❌ ❌ ✅
Code Règle Min Inter Renf Élevé R30Comptes inutilisés désactivés ✅ ✅ ✅ ✅ R31Mots de passe robustes ✅ ✅ ✅ ✅ R68Stockage des mots de passe en yescrypt ✅ ✅ ✅ ✅ R32Verrouillage sur inactivité ❌ ✅ ✅ ✅ R33Traçabilité des actions admin ❌ ✅ ✅ ✅ R34Comptes de service sans shell ❌ ✅ ✅ ✅ R35Comptes de service uniques ❌ ✅ ✅ ✅ R67PAM distant sécurisé ❌ ⚠️ ⚠️ ⚠️ R69Bases d’utilisateurs en TLS ❌ ⚠️ ⚠️ ⚠️ R70Comptes système ≠ annuaire ❌ ⚠️ ⚠️ ⚠️ C10Anti force brute, limites de session ❌ ✅ ✅ ✅
R67, R69, R70 : annuaire distant différé
Ces règles ne concernent qu’un annuaire distant (SSSD/nslcd), non utilisé
par DNF aujourd’hui ; leur volet TLS est différé (futur checkScript). Seul
l’anti-force-brute local (pam_faillock, voir C10) est actif dès
intermediary.
Code Règle Min Inter Renf Élevé R39Directives sudo durcies ❌ ✅ ✅ ✅ R40Cibles sudo non-root ❌ ✅ ✅ ✅ R42Interdiction des négations ❌ ✅ ✅ ✅ R44sudoedit pour l’édition❌ ✅ ✅ ✅ R38Groupe sudo dédié ❌ ❌ ✅ ✅ R41Limitation des overrides NOEXEC ❌ ❌ ✅ ✅
Code Règle Min Inter Renf Élevé R53Détection des fichiers sans propriétaire ✅ ✅ ✅ ✅ R54Sticky bit sur /tmp et /var/tmp ✅ ✅ ✅ ✅ R56Détection des setuid hors liste blanche ✅ ✅ ✅ ✅ R14sysctls système de fichiers ❌ ✅ ✅ ✅ R28Partitionnement et options de montage ❌ ✅ ✅ ✅ R50Restriction des fichiers sensibles ❌ ✅ ✅ ✅ R52Permissions des sockets et tubes nommés ❌ ⚠️ ⚠️ ⚠️ R55Répertoires temporaires par utilisateur ❌ ⚠️ ⚠️ ⚠️ R36UMASK 0077❌ ❌ ✅ ✅ R57setuid root minimal (capabilities)❌ ❌ ✅ ✅
R28, R52, R55 : services et partitions désignés
R28 durcit d’office /tmp, /proc et /dev/shm ; les options sur /var/log,
/srv, /opt, /home s’ajoutent via darkone.security.filesystem.extraMountHardening
(partitions séparées requises). R52 (mode 0750 des répertoires d’exécution)
et R55 (/tmp privé par service) s’appliquent aux unités listées dans
darkone.security.services.hardenedUnits — vide par défaut. Voir R63.
Code Règle Min Inter Renf Élevé R62Services obsolètes coupés ✅ ✅ ✅ ✅ R63Capacités des services réduites ❌ ⚠️ ⚠️ ⚠️ R37Contrôle d’accès obligatoire (MAC) ❌ ❌ ✅ ✅ R45Profils AppArmor ❌ ❌ ✅ ✅ R64Privilèges de service restreints ❌ ❌ ✅ ✅ R65Isolation des services (namespaces) ❌ ❌ ✅ ✅ R66Durcissement des conteneurs ❌ ❌ ❌ ✅
R63 : bac à sable opt-in par service
Le confinement systemd complet (ProtectSystem=strict, filtres d’appels
système, MemoryDenyWriteExecute, UMask=0027…) s’applique aux unités déclarées
dans darkone.security.services.hardenedUnits. Vide par défaut : un
durcissement aveugle casserait des services. La liste agit comme un plancher ,
surchargeable par unité, et needs-jit lève MemoryDenyWriteExecute pour les
moteurs JIT.
Code Règle Min Inter Renf Élevé R80Surveillance des ports en écoute ✅ ✅ ✅ ✅ C4Pare-feu en refus par défaut ⚠️ ⚠️ ✅ ✅ R12sysctls réseau IPv4 ❌ ✅ ✅ ✅ R13Désactivation d’IPv6 (sauf no-ipv6) ❌ ✅ ✅ ✅ C5Durcissement OpenSSH ❌ ✅ ✅ ✅ C7Synchronisation horaire NTS ❌ ✅ ✅ ✅ C8Résolveur DNS sécurisé (DNSSEC, DoT) ❌ ✅ ✅ ✅ R79Services exposés durcis (serveur) ❌ ✅ ✅ ✅ R78Isolation des services réseau (serveur) ❌ ❌ ✅ ✅
C4 partielle aux deux premiers niveaux
Au niveau minimal et intermediary, C4 couvre le filtrage entrant
(refus par défaut). Le filtrage sortant (egress) s’ajoute à partir de
reinforced.
Code Règle Min Inter Renf Élevé R71Journalisation persistante scellée ❌ ❌ ✅ ✅ R72Journaux dédiés par service ❌ ❌ ✅ ✅ R73auditd avec règles ANSSI ❌ ❌ ✅ ✅ C9Désactivation des core dumps ❌ ❌ ✅ ✅ R76Scellement et vérification d’intégrité ❌ ❌ ❌ ✅ R77Protection de la base scellée ❌ ❌ ❌ ✅
Code Règle Min Inter Renf Élevé C11Bannières légales d’accès ✅ ✅ ✅ ✅ C12cron / at restreints✅ ✅ ✅ ✅ R61Mises à jour régulières ⚠️ ⚠️ ⚠️ ⚠️ R74Courrier local durci ❌ ✅ ✅ ✅ R75Alias de messagerie (root → admin) ❌ ✅ ✅ ✅ R51Rotation des secrets d’installation ❌ ❌ ✅ ✅ C3USBGuard (poste) ❌ ❌ ✅ ✅
Étiquette kernel-recompile
Le durcissement noyau du niveau high (R15 à R27, C1) implique de
recompiler le noyau. Sur une machine sans ce besoin, ajoutez
kernel-recompile à excludes pour l’ignorer.
Deux soupapes permettent d’écarter une protection précise sans descendre le
niveau global.
Tags (excludes) : couper un groupe de règles incompatibles
(ex. needs-jit, no-ipv6).
Exceptions (exceptions) : contourner une règle, justification
obligatoire.
Le détail de ces soupapes est dans Notions de
sécurité .
Module en cours de stabilisation
Montez le niveau progressivement et testez chaque hôte avant la production.