Sysctl

Documentation des variables sysctl (Linux)

Ce document recense les paramètres sysctl les plus importants et les plus couramment modifiés sur un système Linux, organisés par sous‑système (kernel.*, vm.*, fs.*, net.*, user.*, abi.*). Il s'appuie sur la documentation officielle du noyau Linux (kernel.org — admin-guide/sysctl et networking/ip-sysctl).

Les noms, valeurs par défaut et disponibilité de certains paramètres varient selon la version du noyau et la distribution. Avant de modifier quoi que ce soit en production, vérifie la valeur actuelle avec sysctl <nom> ou cat /proc/sys/<chemin>.

1. Généralités : lire, modifier, persister

Action Commande
Lister toutes les variables courantes sysctl -a
Lire une variable précise sysctl net.ipv4.ip_forward ou cat /proc/sys/net/ipv4/ip_forward
Modifier temporairement (perdu au redémarrage) sysctl -w net.ipv4.ip_forward=1 ou echo 1 > /proc/sys/net/ipv4/ip_forward
Rendre le changement permanent Ajouter la ligne net.ipv4.ip_forward = 1 dans /etc/sysctl.conf ou un fichier dédié sous /etc/sysctl.d/99-perso.conf
Recharger la configuration persistante sysctl -p (fichier unique) ou sysctl --system (tous les fichiers de /etc/sysctl.d/, /run/sysctl.d/, /usr/lib/sysctl.d/, dans l'ordre)

La correspondance est directe entre le nom sysctl et le chemin sous /proc/sys : les points deviennent des slashs, par exemple net.ipv4.tcp_syncookies/proc/sys/net/ipv4/tcp_syncookies.

2. Sommaire

3. kernel.* — noyau

3.1 Sécurité et confinement

Variable Description Valeurs / défaut
kernel.dmesg_restrict Restreint la lecture du buffer dmesg aux utilisateurs privilégiés (CAP_SYSLOG) 0 = non restreint · 1 = restreint (recommandé)
kernel.kptr_restrict Masque les adresses mémoire du noyau exposées via /proc 0 = affichées · 1 = masquées pour non‑privilégiés · 2 = toujours masquées (recommandé)
kernel.randomize_va_space Active l'ASLR (Address Space Layout Randomization) 0 = désactivé · 1 = mmap/stack/VDSO · 2 = + tas (heap), défaut et recommandé
kernel.yama.ptrace_scope Restreint qui peut tracer (ptrace) un autre processus 0 = classique · 1 = enfants uniquement (recommandé) · 2 = admin seulement · 3 = personne (irréversible)
kernel.unprivileged_bpf_disabled Interdit les appels bpf() aux utilisateurs non privilégiés 0 = autorisé · 1 = désactivé de façon permanente · 2 = désactivé mais modifiable (recommandé : 1 ou 2)
kernel.modules_disabled Bloque tout chargement/déchargement de module noyau (irréversible une fois activé) 0 = autorisé · 1 = bloqué
kernel.kexec_load_disabled Désactive les appels système kexec (charge d'un autre noyau en mémoire) 0 = autorisé · 1 = désactivé (irréversible)
kernel.perf_event_paranoid Restreint l'accès aux événements de performance (perf) pouvant fuiter des infos noyau -1 = tout autorisé · 2 = accès le plus restreint (recommandé sur serveur)
kernel.sysrq Active/désactive et filtre les combinaisons Magic SysRq 0 = désactivé · 1 = tout activé · bitmask = activation sélective
kernel.core_pattern / kernel.core_uses_pid Modèle de nom de fichier core dump et ajout du PID défaut : core
kernel.suid_dumpable (alias historique, voir fs.suid_dumpable) Autorise/interdit le core dump des binaires setuid 0 = interdit (recommandé) · 1 = debug · 2 = suidsafe
kernel.io_uring_disabled Restreint la création d'instances io_uring (surface d'attaque récente) 0 = autorisé · 1 = bloqué pour non‑privilégiés · 2 = bloqué pour tous

3.2 Comportement système, panique, watchdogs

Variable Description Valeurs / défaut
kernel.panic Délai (s) avant redémarrage auto après une panique noyau 0 = boucle infinie (défaut) · N = redémarre après N s
kernel.panic_on_oops Force une panique dès qu'un « oops » survient 0 = continue (défaut) · 1 = panique
kernel.panic_on_warn Force une panique sur tout WARN() 0 = défaut · 1 = panique
kernel.watchdog / kernel.nmi_watchdog / kernel.soft_watchdog Active les détecteurs de blocage matériel/logiciel (lockup) 0 = désactivé · 1 = activé
kernel.watchdog_thresh Seuil (s) de détection d'un lockup défaut : 10
kernel.hung_task_timeout_secs Délai avant qu'une tâche bloquée en état D soit signalée 0 = désactivé
kernel.ctrl-alt-del Comportement de Ctrl+Alt+Suppr 0 = envoi SIGINT à init (propre) · >0 = redémarrage immédiat
kernel.printk 4 niveaux de verbosité des logs noyau (console, défaut message, min console, défaut console) ex. 4 4 1 7
kernel.printk_ratelimit / kernel.printk_ratelimit_burst Anti‑flood des messages noyau répétés défaut : 5 s / 10 messages

3.3 Limites processus, PID, threads, IPC

Variable Description Valeurs / défaut
kernel.pid_max PID maximal attribuable avant réutilisation défaut souvent 32768 ou 4194304 selon distro/arch
kernel.threads-max Nombre maximal de threads que le système peut créer calculé selon la RAM disponible
kernel.ngroups_max Nombre maximal de groupes supplémentaires par utilisateur défaut : 65536
kernel.msgmax / kernel.msgmnb / kernel.msgmni Limites des files de messages IPC System V (taille max message, taille max file, nb de files) défauts : 8192 / 16384 / 32000
kernel.shmmax / kernel.shmall / kernel.shmmni Taille max d'un segment de mémoire partagée, total de pages partagées, nombre max de segments shmmni défaut : 4096
kernel.sem Limites des sémaphores System V (4 valeurs : SEMMSL, SEMMNS, SEMOPM, SEMMNI) ex. 250 32000 32 128
kernel.overflowuid / kernel.overflowgid UID/GID de repli pour les appels 16‑bit historiques défaut : 65534

3.4 Entropie / aléatoire

Variable Description Valeurs / défaut
kernel.random.entropy_avail Entropie actuellement disponible (lecture seule, indicatif)
kernel.random.poolsize Taille du pool d'entropie
kernel.random.urandom_min_reseed_secs Intervalle minimal de réamorçage de /dev/urandom

4. vm.* — gestion mémoire

Variable Description Valeurs / défaut
vm.swappiness Tendance du noyau à utiliser le swap plutôt que le cache page/inode 0–200, défaut 60 · serveurs/BDD : souvent abaissé à 1–10
vm.overcommit_memory Politique de sur‑allocation mémoire 0 = heuristique (défaut) · 1 = toujours autoriser · 2 = strict selon overcommit_ratio
vm.overcommit_ratio % de RAM autorisé au‑delà du swap quand overcommit_memory=2 défaut : 50
vm.dirty_ratio % de mémoire « sale » déclenchant une écriture disque bloquante par le process défaut : 20
vm.dirty_background_ratio % de mémoire sale déclenchant une écriture asynchrone en arrière‑plan défaut : 10
vm.dirty_expire_centisecs Âge (centisecondes) au‑delà duquel une donnée sale doit être écrite défaut : 3000 (30 s)
vm.dirty_writeback_centisecs Intervalle de réveil du thread d'écriture différée défaut : 500 (5 s)
vm.vfs_cache_pressure Tendance à récupérer la mémoire des caches dentry/inode défaut : 100 (baisser conserve plus de cache FS)
vm.min_free_kbytes Quantité de RAM libre que le noyau tente toujours de garder disponible calculé automatiquement, ajustable
vm.max_map_count Nombre maximal de zones mémoire (VMA) par processus — critique pour Elasticsearch/JVM défaut : 65530
vm.mmap_min_addr Adresse minimale qu'un utilisateur non privilégié peut mapper (mitigation exploits NULL‑deref) défaut souvent 65536
vm.mmap_rnd_bits / vm.mmap_rnd_compat_bits Nombre de bits de hasard pour l'ASLR des adresses mmap plus élevé = ASLR plus fort
vm.panic_on_oom Déclenche une panique noyau au lieu de tuer un processus lors d'un OOM 0 = défaut · 1/2 = panique
vm.oom_kill_allocating_task Tue directement le processus demandeur plutôt que de choisir la meilleure victime 0 = défaut
vm.zone_reclaim_mode Stratégie de récupération mémoire NUMA locale avant d'aller sur un autre nœud défaut : 0
vm.nr_hugepages Taille du pool de hugepages réservées défaut : 0
vm.drop_caches Vide manuellement les caches (écriture seule, diagnostic) 1 = pagecache · 2 = dentries/inodes · 3 = les deux
vm.user_reserve_kbytes / vm.admin_reserve_kbytes Mémoire réservée pour éviter qu'un process ne bloque tout le système / pour l'admin calculés selon la RAM
vm.watermark_scale_factor Agressivité de kswapd pour libérer de la mémoire en avance défaut : 10 (max 3000)
vm.unprivileged_userfaultfd Autorise userfaultfd() aux utilisateurs non privilégiés (surface d'attaque) 0 = interdit (recommandé) · 1 = autorisé

5. fs.* — fichiers et filesystem

Variable Description Valeurs / défaut
fs.file-max Nombre maximal de descripteurs de fichiers ouverts pour tout le système calculé selon la RAM, souvent augmenté sur serveurs (ex. 2097152)
fs.file-nr Lecture seule : handles alloués / libres / max actuels
fs.nr_open Nombre maximal de descripteurs qu'un seul processus peut ouvrir défaut : 1048576
fs.aio-max-nr Nombre maximal de requêtes d'I/O asynchrone système (utile pour bases de données) défaut : 65536
fs.inotify.max_user_watches Nombre maximal de fichiers surveillés par inotify et par utilisateur (IDE, Docker, etc.) souvent augmenté (ex. 524288)
fs.inotify.max_user_instances Nombre maximal d'instances inotify par utilisateur défaut : 128
fs.epoll.max_user_watches Limite de « watches » epoll par utilisateur calculé selon la mémoire
fs.suid_dumpable Autorise le core dump des binaires setuid/setgid (sensible côté sécurité) 0 = interdit (recommandé) · 1 = debug · 2 = suidsafe
fs.protected_symlinks Empêche de suivre un symlink dans un dossier world‑writable si le propriétaire diffère (anti TOCTOU) 0 = désactivé · 1 = activé (recommandé, souvent défaut)
fs.protected_hardlinks Empêche de créer un hardlink vers un fichier qu'on ne possède pas déjà (anti élévation de privilèges) 0 = désactivé · 1 = activé (recommandé)
fs.protected_fifos Restreint l'écriture dans des FIFOs situées dans des dossiers world‑writable 0 = désactivé · 1/2 = restreint (recommandé ≥1)
fs.protected_regular Même principe pour les fichiers réguliers dans des dossiers « sticky » world‑writable 0 = désactivé · 1/2 = restreint (recommandé ≥1)
fs.mount-max Nombre maximal de montages dans un namespace de montage défaut : 100000
fs.pipe-user-pages-soft / fs.pipe-user-pages-hard Limites de pages allouées aux pipes par utilisateur non privilégié 0 = illimité (hard)
fs.mqueue.msg_max / msgsize_max / queues_max Limites des files de messages POSIX (mqueue) variables selon distro
fs.leases-enable Active les baux de fichiers (file leases) défaut : 1
fs.dentry-state / fs.inode-nr Statistiques lecture seule sur les caches dentry/inode

6. net.core.* — pile réseau générique

Variable Description Valeurs / défaut typiques
net.core.somaxconn Taille max de la file d'attente des connexions en attente d'accept() pour un socket en écoute défaut historique 128, souvent relevé à 1024–4096 sur serveurs
net.core.netdev_max_backlog Nombre max de paquets en file d'attente avant traitement par le noyau quand une interface reçoit plus vite qu'il ne traite défaut : 1000, souvent monté à 5000+ en haut débit
net.core.rmem_default / net.core.rmem_max Taille par défaut / maximale du buffer de réception socket ex. 212992 / augmenté selon besoins réseau
net.core.wmem_default / net.core.wmem_max Taille par défaut / maximale du buffer d'émission socket idem
net.core.optmem_max Mémoire tampon max pour les options de socket ancillaires défaut : 20480
net.core.netdev_budget Nombre de paquets qu'un cœur peut traiter par cycle NAPI avant de rendre la main défaut : 300
net.core.default_qdisc Discipline de mise en file d'attente par défaut des interfaces (ex. fq_codel, fq) varie selon distro
net.core.busy_poll / net.core.busy_read Durée (µs) de scrutation active avant de repasser en mode interruption — réduit la latence au prix du CPU défaut : 0 (désactivé)
net.core.message_cost / net.core.message_burst Anti‑flood des messages d'avertissement réseau du noyau

7. net.ipv4.* — IPv4, TCP, ICMP, ARP

7.1 Routage et transfert

Variable Description Valeurs / défaut
net.ipv4.ip_forward Active le routage de paquets entre interfaces (obligatoire pour un routeur/passerelle/NAT) 0 = désactivé (défaut station) · 1 = activé
net.ipv4.conf.all.forwarding Équivalent par interface du transfert IPv4 0/1
net.ipv4.conf.*.rp_filter Filtrage par chemin inverse (RFC 3704), anti IP‑spoofing 0 = désactivé · 1 = strict (recommandé) · 2 = souple
net.ipv4.conf.*.accept_source_route Accepte les paquets avec option de routage source (souvent utilisée en attaque) 0 = refusé (recommandé)
net.ipv4.conf.*.accept_redirects Accepte les redirections ICMP (peuvent détourner le routage) 0 = refusé (recommandé sur serveur) · 1 = accepté (défaut hôte)
net.ipv4.conf.*.secure_redirects N'accepte les redirections ICMP que depuis des passerelles connues 1 = défaut
net.ipv4.conf.*.send_redirects Autorise l'envoi de redirections ICMP (pertinent seulement pour un routeur) 0 = désactivé (recommandé si pas routeur)
net.ipv4.conf.*.log_martians Journalise les paquets à adresse source/destination impossible (détection de spoofing) 1 = recommandé
net.ipv4.conf.*.accept_local Accepte les paquets dont l'adresse source semble locale, arrivant sur une interface externe 0 = défaut

7.2 ICMP

Variable Description Valeurs / défaut
net.ipv4.icmp_echo_ignore_broadcasts Ignore les requêtes ICMP echo/timestamp envoyées en broadcast/multicast (anti Smurf) 1 = recommandé (souvent défaut)
net.ipv4.icmp_echo_ignore_all Ignore tous les pings entrants 0 = défaut · 1 = ignore tout
net.ipv4.icmp_ignore_bogus_error_responses Supprime les logs d'erreurs ICMP non conformes émises par des routeurs bogués 1 = recommandé
net.ipv4.icmp_ratelimit / icmp_ratemask Limite le débit d'envoi de certains types de messages ICMP (anti déni de service) défaut : 1000 ms

7.3 ARP

Variable Description Valeurs / défaut
net.ipv4.conf.*.arp_ignore Contrôle les conditions de réponse à une requête ARP (utile en multi‑interfaces) 0 = défaut (répond toujours) · 1‑8 = filtrage croissant
net.ipv4.conf.*.arp_announce Contrôle quelle adresse source annoncer dans les requêtes ARP émises 0 = défaut · 2 = le plus restrictif
net.ipv4.conf.*.proxy_arp Active le proxy ARP sur l'interface (répond à la place d'un autre hôte) 0 = désactivé (défaut)

7.4 TCP

Variable Description Valeurs / défaut
net.ipv4.tcp_syncookies Envoie des « syncookies » quand la file SYN déborde — protection anti SYN flood 1 = activé (recommandé, souvent défaut)
net.ipv4.tcp_max_syn_backlog Nombre max de connexions en attente à l'état SYN_RECV défaut variable, souvent 1024‑4096
net.ipv4.tcp_fin_timeout Durée avant fermeture d'une connexion orpheline en FIN_WAIT_2 défaut : 60 s
net.ipv4.tcp_tw_reuse Autorise la réutilisation rapide des sockets en TIME‑WAIT pour de nouvelles connexions sortantes 0 = désactivé · 1 = global · 2 = loopback (défaut souvent 2)
net.ipv4.tcp_keepalive_time Délai d'inactivité avant l'envoi du premier paquet keepalive défaut : 7200 s (2 h)
net.ipv4.tcp_keepalive_intvl / tcp_keepalive_probes Intervalle entre sondes keepalive / nombre de sondes avant coupure défauts : 75 s / 9
net.ipv4.tcp_rmem / net.ipv4.tcp_wmem Triplet min/défaut/max des buffers TCP de réception/émission (auto‑tuning) ex. 4096 87380 6291456
net.ipv4.tcp_window_scaling Active la mise à l'échelle de fenêtre TCP (nécessaire au haut débit/latence) 1 = défaut
net.ipv4.tcp_sack Active les accusés de réception sélectifs (SACK) 1 = défaut
net.ipv4.tcp_timestamps Active les timestamps TCP (RTT précis, protection anti rejeu) — peut exposer l'uptime de la machine 1 = défaut · 0 = pour limiter le fingerprinting
net.ipv4.tcp_mtu_probing Active la découverte de MTU par sondage (contourne les blocages ICMP « Fragmentation Needed ») 0 = défaut · 1/2 = activé
net.ipv4.tcp_congestion_control Algorithme de contrôle de congestion TCP (ex. cubic, bbr) défaut : cubic
net.ipv4.tcp_rfc1337 Protège contre les attaques TIME‑WAIT assassination 0 = défaut · 1 = recommandé
net.ipv4.tcp_syn_retries / tcp_synack_retries Nombre de retransmissions SYN / SYN‑ACK avant abandon défauts : 6 / 5
net.ipv4.tcp_no_metrics_save Empêche la mise en cache des métriques de connexion entre connexions 0 = défaut

7.5 Divers IPv4

Variable Description Valeurs / défaut
net.ipv4.ip_local_port_range Plage de ports éphémères utilisée pour les connexions sortantes ex. 32768 60999
net.ipv4.ip_no_pmtu_disc Désactive la découverte de MTU du chemin (Path MTU Discovery) 0 = défaut (PMTUD actif)
net.ipv4.igmp_max_memberships Nombre max de groupes multicast qu'un socket peut rejoindre défaut : 20

8. net.ipv6.* — IPv6

La plupart des paramètres IPv4 ont un équivalent IPv6 sous net.ipv6.conf.* (par exemple accept_redirects, accept_source_route). Les principaux paramètres spécifiques à IPv6 :

Variable Description Valeurs / défaut
net.ipv6.conf.all.disable_ipv6 Désactive complètement IPv6 sur toutes les interfaces 0 = activé (défaut) · 1 = désactivé
net.ipv6.conf.*.accept_ra Accepte les annonces de routeur (Router Advertisement) — utile de désactiver sur un serveur non‑hôte de confiance 1 = défaut sur la plupart des hôtes
net.ipv6.conf.*.accept_redirects Équivalent IPv6 des redirections ICMP 1 = défaut · 0 = recommandé sur serveur
net.ipv6.conf.*.autoconf Active l'auto‑configuration d'adresse sans état (SLAAC) 1 = défaut
net.ipv6.conf.*.use_tempaddr Utilise des adresses temporaires (RFC 4941) pour limiter le traçage d'un hôte 0 = désactivé · 2 = activé et préféré (recommandé côté client)
net.ipv6.conf.all.forwarding Active le routage IPv6 0 = défaut

9. net.netfilter.* et conntrack

Variable Description Valeurs / défaut
net.netfilter.nf_conntrack_max Nombre maximal d'entrées de suivi de connexion (conntrack) simultanées — critique pour pare‑feu/NAT très sollicités calculé selon la RAM, souvent 262144 ou plus
net.netfilter.nf_conntrack_tcp_timeout_established Délai avant expiration d'une entrée conntrack TCP à l'état établi défaut : 432000 s (5 j), souvent réduit sur pare‑feu chargés
net.netfilter.nf_conntrack_tcp_timeout_time_wait Délai d'expiration conntrack pour l'état TIME_WAIT défaut : 120 s
net.netfilter.nf_conntrack_udp_timeout / _stream Délais d'expiration conntrack pour les flux UDP défauts : 30 s / 180 s
net.netfilter.nf_conntrack_log_invalid Journalise les paquets considérés invalides par conntrack 0 = défaut

10. net.unix.* — sockets Unix

Variable Description Valeurs / défaut
net.unix.max_dgram_qlen Longueur maximale de la file d'attente des sockets Unix de type datagramme défaut : 10 (souvent augmenté pour syslog/journald)

11. user.* — quotas de namespaces

Limitent, par utilisateur dans le namespace utilisateur courant, le nombre de namespaces qu'il peut créer (pertinent pour la sécurité des conteneurs / usage non privilégié).

Variable Description
user.max_user_namespaces Nombre max de namespaces utilisateur créables
user.max_pid_namespaces Nombre max de namespaces PID créables
user.max_net_namespaces Nombre max de namespaces réseau créables
user.max_mnt_namespaces Nombre max de namespaces de montage créables
user.max_ipc_namespaces Nombre max de namespaces IPC créables
user.max_uts_namespaces Nombre max de namespaces UTS (hostname) créables
user.max_cgroup_namespaces Nombre max de namespaces cgroup créables
user.max_time_namespaces Nombre max de namespaces de temps créables

Mettre l'une de ces valeurs à 0 désactive la création de ce type de namespace pour les utilisateurs non privilégiés — utilisé par exemple pour réduire la surface d'attaque des conteneurs non privilégiés.

12. abi.* et divers (dev.*, debug.*)

Variable Description Valeurs / défaut
abi.vsyscall32 Autorise le mappage vDSO 32 bits pour les processus 32 bits sur une machine x86_64 (surface d'attaque historique, ex. CVE liés au vsyscall) 1 = défaut · 0 = plus restrictif

dev.* (paramètres spécifiques aux périphériques : cdrom, scsi, raid, tty…) et debug.* (options de débogage noyau, ex. exception‑trace) existent aussi mais sont propres au matériel/à la configuration du noyau installé — inspecte‑les avec sysctl dev et sysctl debug sur la machine concernée plutôt que de te fier à une liste générique.

13. Sélection « durcissement sécurité » (résumé pratique)

Extrait des variables ci‑dessus les plus citées dans les guides de durcissement serveur (CIS Benchmark, ANSSI, etc.), à valider selon le rôle de la machine :

Variable Valeur recommandée (serveur générique, non‑routeur) Pourquoi
net.ipv4.ip_forward 0 Empêche la machine de router du trafic si ce n'est pas son rôle
net.ipv4.conf.all.rp_filter 1 Anti IP‑spoofing
net.ipv4.conf.all.accept_source_route 0 Bloque le routage source, souvent utilisé pour contourner un pare‑feu
net.ipv4.conf.all.accept_redirects 0 Empêche un tiers de modifier la table de routage locale via ICMP
net.ipv4.conf.all.send_redirects 0 La machine n'a pas à émettre de redirections si ce n'est pas un routeur
net.ipv4.conf.all.log_martians 1 Trace les paquets suspects pour détection d'intrusion
net.ipv4.icmp_echo_ignore_broadcasts 1 Anti attaque Smurf
net.ipv4.tcp_syncookies 1 Anti SYN flood
kernel.dmesg_restrict 1 Empêche un utilisateur non privilégié de lire les logs noyau
kernel.kptr_restrict 2 Empêche la fuite d'adresses noyau facilitant l'exploitation
kernel.randomize_va_space 2 ASLR complet
kernel.yama.ptrace_scope 1 ou 2 Limite le traçage de processus par d'autres processus du même utilisateur
kernel.unprivileged_bpf_disabled 1 Réduit la surface d'attaque eBPF
fs.protected_hardlinks 1 Anti élévation de privilèges par hardlink
fs.protected_symlinks 1 Anti attaque TOCTOU par symlink
fs.suid_dumpable 0 Empêche la fuite de mémoire d'un binaire setuid via un core dump
Ce dernier tableau est un point de départ, pas une checklist à appliquer aveuglément : certaines valeurs (par ex. ip_forward=1, accept_ra) sont légitimes et nécessaires sur des routeurs, hyperviseurs, nœuds Docker/Kubernetes ou passerelles VPN. Adapte toujours au rôle réel de la machine et teste en environnement non critique avant un déploiement en masse.

14. Sources


Revision #4
Created 2 September 2026 14:49:08 by Nehemie
Updated 2 September 2026 14:54:57 by Nehemie