Files
Nixos_Fleet/hosts/common/base.nix
T
DamienandClaude Sonnet 5 6bcb16b8ab Durcissement ANSSI (module SécurixOS) sur toutes les machines de la flotte
- vendor modules/anssi/ depuis SécurixOS (DINUM), copy-paste explicitement
  supporté par son propre README, licence MIT
- hosts/common/base.nix: security.anssi.enable, level=intermediary,
  category=client -- remplace le bloc sysctl qui n'existait que sur le
  profil oreo (nixos_users), même valeurs, rien de plus fort
- garde systemd.coredump.enable=false + apparmor (pas couvert par le
  module ANSSI, exception R45 explicite côté Sécurix)
- ip_forward=0 (R12) n'affecte pas pxe-server, qui n'importe pas ce fichier

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-09 17:00:17 +02:00

121 lines
4.4 KiB
Nix

# Socle commun à toutes les machines de la flotte (repo public).
{ pkgs, lib, ... }:
{
imports = [ ../../modules/anssi ];
# Toutes les machines de la flotte portent le même nom : pas
# d'identification individuelle pour l'instant (voir README du repo
# racine). À revoir plus tard via le numéro de série DMI si un vrai
# besoin d'identification apparaît.
networking.hostName = "Nixos_Fleet";
networking.networkmanager.enable = true;
# Sans ça, les firmwares non-libres (wifi/Bluetooth Broadcom, Realtek,
# Intel...) ne sont pas inclus dans le système. Sur un parc de PC
# hétérogène et inconnu à l'avance, une partie aura besoin de ces
# firmwares pour que la carte wifi soit seulement détectée (option
# documentée : nixos.wiki/wiki/NixOS_Installation_Guide, section
# firmware). mkDefault : un profil peut désactiver au cas par cas.
hardware.enableRedistributableFirmware = lib.mkDefault true;
# Durcissement : reprend le module ANSSI de SécurixOS (modules/anssi/,
# vendored ci-dessus), qui remplace/couvre déjà tous les sysctls qui
# étaient déclarés à la main sur le profil oreo (dmesg_restrict,
# kptr_restrict, yama.ptrace_scope, rp_filter, tcp_syncookies,
# protected_hardlinks/symlinks -- mêmes valeurs, vérifié règle par
# règle dans modules/anssi/kernel-options.nix : R9, R11, R12, R14).
# level "intermediary" : c'est le niveau que couvraient déjà TOUTES
# les valeurs qu'on avait mises à la main sur oreo -- rien de plus
# fort n'a été inventé ici. category "client" : ce sont des postes de
# travail, pas des serveurs (les règles actuellement implémentées sont
# toutes "category = base" donc ça ne change rien pour l'instant, mais
# c'est le bon réglage si Sécurix ajoute des règles catégorisées).
#
# ATTENTION : R12 force net.ipv4.ip_forward = 0. Sans impact ici (ce
# sont des postes clients), mais à ne SURTOUT PAS importer sur
# pxe-server/configuration.nix, qui a besoin l'inverse (voir son
# networking.nat) -- pxe-server n'importe pas ce fichier, donc ok.
# R8 ajoute des mitigations CPU dont "mds=full,nosmt" (désactive
# l'hyperthreading) : impact perf réel sur du matériel bas de gamme,
# c'est la vraie recommandation ANSSI au niveau "intermediary", pas
# une invention -- à surveiller sur les PC les plus faibles du parc.
security.anssi = {
enable = true;
level = "intermediary";
category = "client";
};
# Pas (encore) couvert par le module ANSSI ci-dessus (R45 y est
# explicitement listé en exception : "AppArmor is partially supported
# on NixOS", modules/anssi/base.nix) -- repris tel quel du profil oreo.
systemd.coredump.enable = false;
security.apparmor.packages = [ pkgs.apparmor-profiles ];
security.apparmor.enableCache = true;
time.timeZone = "Europe/Paris";
i18n.defaultLocale = "fr_FR.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "fr_FR.UTF-8";
LC_IDENTIFICATION = "fr_FR.UTF-8";
LC_MEASUREMENT = "fr_FR.UTF-8";
LC_MONETARY = "fr_FR.UTF-8";
LC_NAME = "fr_FR.UTF-8";
LC_NUMERIC = "fr_FR.UTF-8";
LC_PAPER = "fr_FR.UTF-8";
LC_TELEPHONE = "fr_FR.UTF-8";
LC_TIME = "fr_FR.UTF-8";
};
services.xserver.xkb = {
layout = "fr";
variant = "";
};
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.systemd-boot.configurationLimit = 10;
services.openssh.enable = true;
networking.firewall.enable = true;
# Certains PC du parc n'ont que 4 Go de RAM (Cinnamon + Firefox +
# LibreOffice + VLC peuvent solliciter la mémoire) — swap compressé en
# RAM, marche identiquement quelle que soit la machine.
zramSwap = {
enable = true;
memoryPercent = 50;
};
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
nixpkgs.config.allowUnfree = true;
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 30d";
};
# Convergence : chaque machine de la flotte tire ses mises à jour du
# même repo public, sans intervention humaine (pas de netrc nécessaire
# ici, contrairement au repo nixos_users). Voir README pour adapter
# l'URL réelle du repo.
system.autoUpgrade = {
enable = true;
dates = "daily";
flake = "git+https://gitea.miniclic.net/Damien/Nixos_Fleet.git#usagers";
};
environment.systemPackages = with pkgs; [
git
curl
wget
htop
nixfmt
];
system.stateVersion = "26.05";
}