Le réglage du noyau Linux via sysctl est l’un des moyens les plus efficaces de renforcer la sécurité d’un système sans compromettre les performances. Cependant, un durcissement trop agressif peut casser la compatibilité avec certains logiciels, notamment les jeux via Steam Proton ou les conteneurs Docker.
Ce guide présente une configuration optimisée pour les distributions basées sur Arch Linux (comme CachyOS), visant un équilibre entre sécurité défensive et compatibilité applicative.
Qu’est-ce que sysctl ?
sysctl est un outil permettant de modifier les paramètres du noyau Linux en temps réel. Ces paramètres contrôlent la gestion de la mémoire, le comportement du réseau et les restrictions de sécurité du système de fichiers.
Analyse de la configuration de durcissement
Voici le détail des optimisations appliquées dans le fichier /etc/sysctl.d/zz-devsec-gaming-hardening.conf.
1. Sécurité du Système de Fichiers et du Noyau
L’objectif ici est de limiter les vecteurs d’attaque classiques comme les liens symboliques malveillants et l’accès aux adresses mémoire du noyau.
- Protection des liens :
fs.protected_hardlinksetfs.protected_symlinksempêchent la création de liens vers des fichiers dont l’utilisateur n’est pas propriétaire. - Protection des FIFOs et fichiers réguliers :
fs.protected_fifos = 1etfs.protected_regular = 1limitent la création et l’écriture de fichiers/FIFOs dans les répertoires collants (sticky) comme/tmp. Nous les limitons à1(voir la mise en garde ci-dessous). - Restriction kptr :
kernel.kptr_restrict = 2masque les adresses des symboles du noyau, rendant les exploits de type “buffer overflow” beaucoup plus difficiles. - Désactivation de kexec :
kernel.kexec_load_disabled = 1empêche le remplacement du noyau en cours d’exécution. - ASLR :
kernel.randomize_va_space = 2active la randomisation complète de l’espace d’adressage virtuel.
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.protected_fifos = 1 # Conservé à 1 pour la compatibilité desktop
fs.protected_regular = 1 # Conservé à 1 (le niveau 2 casse Wine/Proton/Flatpak dans /tmp)
fs.suid_dumpable = 0
kernel.core_uses_pid = 1
kernel.kptr_restrict = 2
kernel.kexec_load_disabled = 1 # Excellent : Désactive le changement de noyau à chaud
kernel.randomize_va_space = 2
kernel.yama.ptrace_scope = 1 # Équilibre parfait pour Proton et les anti-cheats
# Compromis Dev-Sec & Gaming : Active les touches d'urgence de synchronisation/redémarrage
# Évite les arrêts brutaux et la corruption du système de fichiers lors des gels GPU/Wayland.
kernel.sysrq = 244
# Protections Dev-Sec additionnelles
kernel.dmesg_restrict = 1
kernel.unprivileged_bpf_disabled = 1
net.core.bpf_jit_harden = 2
kernel.unprivileged_userns_clone = 1 # Requis pour Docker sans root et Flatpak
[!WARNING] Attention à
fs.protected_regular = 2etfs.protected_fifos = 2: Bien que les guides de sécurité classiques (comme DevSec) recommandent le niveau2pour les serveurs, cette valeur est trop agressive pour un usage desktop/gaming. Elle empêche les utilisateurs non-root d’ouvrir ou de créer des fichiers avecO_CREATdans/tmp(qui appartient àroot). Cela casse immédiatement les sockets de Wine/Proton (qui plante au lancement des jeux), les applications Flatpak/Electron, et certains daemons graphiques comme awww-daemon. Préférer la valeur1.
2. Réseau : Routage et Validation
On désactive ici les fonctionnalités de routage inutiles pour un poste de travail et on active la validation des sources.
- Reverse Path Filter :
net.ipv4.conf.all.rp_filter = 1permet de rejeter les paquets dont l’adresse source ne correspond pas à la route de retour, stoppant ainsi l’usurpation d’adresse IP (IP spoofing). - Désactivation des redirects : On refuse les redirections ICMP (
accept_redirects = 0), souvent utilisées pour détourner le trafic réseau (Man-in-the-Middle). - Log Martians :
log_martians = 1permet d’enregistrer les paquets “impossibles” (provenant de réseaux non routables) dans les logs système.
net.ipv4.ip_forward = 1 # Géré automatiquement par Docker, mais convient ici
net.ipv6.conf.all.forwarding = 0
# Validation de la source (Reverse Path Filter)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Redirections & Routage (Fonctionnalités non sécurisées retirées, comportements de routeur désactivés)
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# Journalise les paquets usurpés ou impossibles
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
3. Atténuation des Attaques TCP/ICMP
On renforce la pile réseau contre les attaques par déni de service (DoS).
- TCP Syncookies :
net.ipv4.tcp_syncookies = 1protège contre les attaques SYN Flood. - RFC 1337 :
net.ipv4.tcp_rfc1337 = 1protège contre les attaques “TIME-WAIT assassination”. - ICMP Rate Limit : On limite la fréquence des réponses ICMP pour éviter d’être utilisé comme relais d’attaque ou de subir un flood.
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.icmp_ratelimit = 100
net.ipv4.icmp_ratemask = 88089
# Durcissement du réseau local (ARP)
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
# Laisser à 0 pour éviter le pistage de l'uptime, passer à 1 en cas de lag TCP sur fibre
net.ipv4.tcp_timestamps = 0
net.ipv4.conf.all.shared_media = 1
net.ipv4.conf.default.shared_media = 1
4. Réseau : Spécificités IPv6 (Usage Domestique & Gaming)
Pour un usage domestique, il est crucial que le système puisse récupérer son adresse IPv6 via le routeur/FAI sans désactiver totalement les protections.
- Configuration IPv6 : On conserve les protections standards tout en permettant la sollicitation des routeurs et la détection d’adresses doublonnées (DAD), assurant une connectivité stable et moderne.
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.all.router_solicitations = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1
5. Mémoire Virtuelle et Allocation des Ressources (Gaming & Docker)
C’est ici que le compromis “Dev-Sec” est le plus visible pour garantir la stabilité des applications gourmandes.
- Rootless Docker & Flatpak :
kernel.unprivileged_userns_clone = 1est indispensable pour faire fonctionner Docker sans root et les applications Flatpak. - Steam Proton & LLMs :
vm.max_map_count = 2147483642. C’est le paramètre critique. De nombreux jeux modernes via Wine/Proton et les modèles de langage (LLM) nécessitent un nombre très élevé de zones de mémoire virtuelle pour éviter les plantages. - Sûreté GPU/Wayland :
kernel.sysrq = 244permet d’utiliser les touches magiques pour redémarrer proprement le système lors d’un freeze complet du pilote graphique, évitant ainsi la corruption du système de fichiers.
vm.mmap_min_addr = 65536
vm.mmap_rnd_bits = 32
vm.mmap_rnd_compat_bits = 16
# CRITIQUE POUR LE JEU : Requis pour les allocations de Steam Proton (Wine) et les grands LLM
vm.max_map_count = 2147483642
fs.file-max = 2097152
Mise en œuvre
Pour appliquer cette configuration sur votre système :
- Créez le fichier de configuration :
sudo nano /etc/sysctl.d/zz-devsec-gaming-hardening.conf - Collez le contenu de la configuration.
- Appliquez les changements immédiatement :
sudo sysctl --system
Résumé des paramètres clés
| Paramètre | Valeur | Impact |
|---|---|---|
vm.max_map_count | 2147483642 | Indispensable pour Steam Proton / LLM |
kernel.kptr_restrict | 2 | Sécurité accrue du noyau |
net.ipv4.tcp_syncookies | 1 | Protection SYN Flood |
kernel.unprivileged_userns_clone | 1 | Support Docker Rootless / Flatpak |
Fichier de configuration complet
Voici le contenu complet du fichier /etc/sysctl.d/zz-devsec-gaming-hardening.conf pour ceux qui souhaitent l’appliquer directement :
# ===================================================================
# HARDENING: DESKTOP, GAMING & DOCKER (ARCH / CACHYOS)
# ===================================================================
# -------------------------------------------------------------------
# 1. Hardening File System & Kernel Security
# -------------------------------------------------------------------
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.protected_fifos = 1 # Conservé à 1 pour la compatibilité desktop
fs.protected_regular = 1 # Conservé à 1 (le niveau 2 casse Wine/Proton/Flatpak dans /tmp)
fs.suid_dumpable = 0
kernel.core_uses_pid = 1
kernel.kptr_restrict = 2
kernel.kexec_load_disabled = 1 # Excellent : Désactive le changement de noyau à chaud
kernel.randomize_va_space = 2
kernel.yama.ptrace_scope = 1 # Équilibre parfait pour Proton et les anti-cheats
# Compromis Dev-Sec & Gaming : Active les touches d'urgence de synchronisation/redémarrage
# Évite les arrêts brutaux et la corruption du système de fichiers lors des gels GPU/Wayland.
kernel.sysrq = 244
# Protections Dev-Sec additionnelles
kernel.dmesg_restrict = 1
kernel.unprivileged_bpf_disabled = 1
net.core.bpf_jit_harden = 2
kernel.unprivileged_userns_clone = 1 # Requis pour Docker sans root et Flatpak
# -------------------------------------------------------------------
# 2. Network - IPv4 & IPv6 Base & Routing
# -------------------------------------------------------------------
net.ipv4.ip_forward = 1 # Géré automatiquement par Docker, mais convient ici
net.ipv6.conf.all.forwarding = 0
# Validation de la source (Reverse Path Filter)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Redirections & Routage (Fonctionnalités non sécurisées retirées, comportements de routeur désactivés)
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# Journalise les paquets usurpés ou impossibles
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# -------------------------------------------------------------------
# 3. Network - TCP / ICMP & Attacks Mitigation
# -------------------------------------------------------------------
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.icmp_ratelimit = 100
net.ipv4.icmp_ratemask = 88089
# Durcissement du réseau local (ARP)
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
# Laisser à 0 pour éviter le pistage de l'uptime, passer à 1 en cas de lag TCP sur fibre
net.ipv4.tcp_timestamps = 0
net.ipv4.conf.all.shared_media = 1
net.ipv4.conf.default.shared_media = 1
# -------------------------------------------------------------------
# 4. Network - IPv6 Specific (FIXED FOR DOMESTIC/GAMING USE)
# -------------------------------------------------------------------
# accept_ra=0 et autoconf=0 retirés pour que le PC puisse récupérer son IPv6
# auprès du routeur/FAI. Les protections standard restent actives.
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.all.router_solicitations = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1
# -------------------------------------------------------------------
# 5. Virtual Memory & Gaming / Docker Resource Allocation
# -------------------------------------------------------------------
vm.mmap_min_addr = 65536
vm.mmap_rnd_bits = 32
vm.mmap_rnd_compat_bits = 16
# CRITIQUE POUR LE JEU : Requis pour les allocations de Steam Proton (Wine) et les grands LLM
vm.max_map_count = 2147483642
fs.file-max = 2097152