Skip to main content

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

ActionCommande
Lister toutes les variables courantessysctl -a
Lire une variable précisesysctl 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 permanentAjouter 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 persistantesysctl -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

VariableDescriptionValeurs / défaut
kernel.dmesg_restrictRestreint la lecture du buffer dmesg aux utilisateurs privilégiés (CAP_SYSLOG)0 = non restreint · 1 = restreint (recommandé)
kernel.kptr_restrictMasque les adresses mémoire du noyau exposées via /proc0 = affichées · 1 = masquées pour non‑privilégiés · 2 = toujours masquées (recommandé)
kernel.randomize_va_spaceActive l'ASLR (Address Space Layout Randomization)0 = désactivé · 1 = mmap/stack/VDSO · 2 = + tas (heap), défaut et recommandé
kernel.yama.ptrace_scopeRestreint qui peut tracer (ptrace) un autre processus0 = classique · 1 = enfants uniquement (recommandé) · 2 = admin seulement · 3 = personne (irréversible)
kernel.unprivileged_bpf_disabledInterdit les appels bpf() aux utilisateurs non privilégiés0 = autorisé · 1 = désactivé de façon permanente · 2 = désactivé mais modifiable (recommandé : 1 ou 2)
kernel.modules_disabledBloque tout chargement/déchargement de module noyau (irréversible une fois activé)0 = autorisé · 1 = bloqué
kernel.kexec_load_disabledDésactive les appels système kexec (charge d'un autre noyau en mémoire)0 = autorisé · 1 = désactivé (irréversible)
kernel.perf_event_paranoidRestreint 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.sysrqActive/désactive et filtre les combinaisons Magic SysRq0 = désactivé · 1 = tout activé · bitmask = activation sélective
kernel.core_pattern / kernel.core_uses_pidModèle de nom de fichier core dump et ajout du PIDdéfaut : core
kernel.suid_dumpable(alias historique, voir fs.suid_dumpable) Autorise/interdit le core dump des binaires setuid0 = interdit (recommandé) · 1 = debug · 2 = suidsafe
kernel.io_uring_disabledRestreint 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

VariableDescriptionValeurs / défaut
kernel.panicDélai (s) avant redémarrage auto après une panique noyau0 = boucle infinie (défaut) · N = redémarre après N s
kernel.panic_on_oopsForce une panique dès qu'un « oops » survient0 = continue (défaut) · 1 = panique
kernel.panic_on_warnForce une panique sur tout WARN()0 = défaut · 1 = panique
kernel.watchdog / kernel.nmi_watchdog / kernel.soft_watchdogActive les détecteurs de blocage matériel/logiciel (lockup)0 = désactivé · 1 = activé
kernel.watchdog_threshSeuil (s) de détection d'un lockupdéfaut : 10
kernel.hung_task_timeout_secsDélai avant qu'une tâche bloquée en état D soit signalée0 = désactivé
kernel.ctrl-alt-delComportement de Ctrl+Alt+Suppr0 = envoi SIGINT à init (propre) · >0 = redémarrage immédiat
kernel.printk4 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_burstAnti‑flood des messages noyau répétésdéfaut : 5 s / 10 messages

3.3 Limites processus, PID, threads, IPC

VariableDescriptionValeurs / défaut
kernel.pid_maxPID maximal attribuable avant réutilisationdéfaut souvent 32768 ou 4194304 selon distro/arch
kernel.threads-maxNombre maximal de threads que le système peut créercalculé selon la RAM disponible
kernel.ngroups_maxNombre maximal de groupes supplémentaires par utilisateurdéfaut : 65536
kernel.msgmax / kernel.msgmnb / kernel.msgmniLimites 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.shmmniTaille max d'un segment de mémoire partagée, total de pages partagées, nombre max de segmentsshmmni défaut : 4096
kernel.semLimites des sémaphores System V (4 valeurs : SEMMSL, SEMMNS, SEMOPM, SEMMNI)ex. 250 32000 32 128
kernel.overflowuid / kernel.overflowgidUID/GID de repli pour les appels 16‑bit historiquesdéfaut : 65534

3.4 Entropie / aléatoire

VariableDescriptionValeurs / défaut
kernel.random.entropy_availEntropie actuellement disponible (lecture seule, indicatif)
kernel.random.poolsizeTaille du pool d'entropie
kernel.random.urandom_min_reseed_secsIntervalle minimal de réamorçage de /dev/urandom

4. vm.* — gestion mémoire

VariableDescriptionValeurs / défaut
vm.swappinessTendance du noyau à utiliser le swap plutôt que le cache page/inode0–200, défaut 60 · serveurs/BDD : souvent abaissé à 1–10
vm.overcommit_memoryPolitique de sur‑allocation mémoire0 = heuristique (défaut) · 1 = toujours autoriser · 2 = strict selon overcommit_ratio
vm.overcommit_ratio% de RAM autorisé au‑delà du swap quand overcommit_memory=2défaut : 50
vm.dirty_ratio% de mémoire « sale » déclenchant une écriture disque bloquante par le processdéfaut : 20
vm.dirty_background_ratio% de mémoire sale déclenchant une écriture asynchrone en arrière‑plandéfaut : 10
vm.dirty_expire_centisecsÂge (centisecondes) au‑delà duquel une donnée sale doit être écritedéfaut : 3000 (30 s)
vm.dirty_writeback_centisecsIntervalle de réveil du thread d'écriture différéedéfaut : 500 (5 s)
vm.vfs_cache_pressureTendance à récupérer la mémoire des caches dentry/inodedéfaut : 100 (baisser conserve plus de cache FS)
vm.min_free_kbytesQuantité de RAM libre que le noyau tente toujours de garder disponiblecalculé automatiquement, ajustable
vm.max_map_countNombre maximal de zones mémoire (VMA) par processus — critique pour Elasticsearch/JVMdéfaut : 65530
vm.mmap_min_addrAdresse 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_bitsNombre de bits de hasard pour l'ASLR des adresses mmapplus élevé = ASLR plus fort
vm.panic_on_oomDéclenche une panique noyau au lieu de tuer un processus lors d'un OOM0 = défaut · 1/2 = panique
vm.oom_kill_allocating_taskTue directement le processus demandeur plutôt que de choisir la meilleure victime0 = défaut
vm.zone_reclaim_modeStratégie de récupération mémoire NUMA locale avant d'aller sur un autre nœuddéfaut : 0
vm.nr_hugepagesTaille du pool de hugepages réservéesdéfaut : 0
vm.drop_cachesVide manuellement les caches (écriture seule, diagnostic)1 = pagecache · 2 = dentries/inodes · 3 = les deux
vm.user_reserve_kbytes / vm.admin_reserve_kbytesMémoire réservée pour éviter qu'un process ne bloque tout le système / pour l'admincalculés selon la RAM
vm.watermark_scale_factorAgressivité de kswapd pour libérer de la mémoire en avancedéfaut : 10 (max 3000)
vm.unprivileged_userfaultfdAutorise userfaultfd() aux utilisateurs non privilégiés (surface d'attaque)0 = interdit (recommandé) · 1 = autorisé

5. fs.* — fichiers et filesystem

VariableDescriptionValeurs / défaut
fs.file-maxNombre maximal de descripteurs de fichiers ouverts pour tout le systèmecalculé selon la RAM, souvent augmenté sur serveurs (ex. 2097152)
fs.file-nrLecture seule : handles alloués / libres / max actuels
fs.nr_openNombre maximal de descripteurs qu'un seul processus peut ouvrirdéfaut : 1048576
fs.aio-max-nrNombre maximal de requêtes d'I/O asynchrone système (utile pour bases de données)défaut : 65536
fs.inotify.max_user_watchesNombre maximal de fichiers surveillés par inotify et par utilisateur (IDE, Docker, etc.)souvent augmenté (ex. 524288)
fs.inotify.max_user_instancesNombre maximal d'instances inotify par utilisateurdéfaut : 128
fs.epoll.max_user_watchesLimite de « watches » epoll par utilisateurcalculé selon la mémoire
fs.suid_dumpableAutorise le core dump des binaires setuid/setgid (sensible côté sécurité)0 = interdit (recommandé) · 1 = debug · 2 = suidsafe
fs.protected_symlinksEmpê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_hardlinksEmpê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_fifosRestreint l'écriture dans des FIFOs situées dans des dossiers world‑writable0 = désactivé · 1/2 = restreint (recommandé ≥1)
fs.protected_regularMême principe pour les fichiers réguliers dans des dossiers « sticky » world‑writable0 = désactivé · 1/2 = restreint (recommandé ≥1)
fs.mount-maxNombre maximal de montages dans un namespace de montagedéfaut : 100000
fs.pipe-user-pages-soft / fs.pipe-user-pages-hardLimites de pages allouées aux pipes par utilisateur non privilégié0 = illimité (hard)
fs.mqueue.msg_max / msgsize_max / queues_maxLimites des files de messages POSIX (mqueue)variables selon distro
fs.leases-enableActive les baux de fichiers (file leases)défaut : 1
fs.dentry-state / fs.inode-nrStatistiques lecture seule sur les caches dentry/inode

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

VariableDescriptionValeurs / défaut typiques
net.core.somaxconnTaille max de la file d'attente des connexions en attente d'accept() pour un socket en écoutedéfaut historique 128, souvent relevé à 1024–4096 sur serveurs
net.core.netdev_max_backlogNombre max de paquets en file d'attente avant traitement par le noyau quand une interface reçoit plus vite qu'il ne traitedéfaut : 1000, souvent monté à 5000+ en haut débit
net.core.rmem_default / net.core.rmem_maxTaille par défaut / maximale du buffer de réception socketex. 212992 / augmenté selon besoins réseau
net.core.wmem_default / net.core.wmem_maxTaille par défaut / maximale du buffer d'émission socketidem
net.core.optmem_maxMémoire tampon max pour les options de socket ancillairesdéfaut : 20480
net.core.netdev_budgetNombre de paquets qu'un cœur peut traiter par cycle NAPI avant de rendre la maindéfaut : 300
net.core.default_qdiscDiscipline 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_readDurée (µs) de scrutation active avant de repasser en mode interruption — réduit la latence au prix du CPUdéfaut : 0 (désactivé)
net.core.message_cost / net.core.message_burstAnti‑flood des messages d'avertissement réseau du noyau

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

7.1 Routage et transfert

VariableDescriptionValeurs / défaut
net.ipv4.ip_forwardActive 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 IPv40/1
net.ipv4.conf.*.rp_filterFiltrage par chemin inverse (RFC 3704), anti IP‑spoofing0 = désactivé · 1 = strict (recommandé) · 2 = souple
net.ipv4.conf.*.accept_source_routeAccepte les paquets avec option de routage source (souvent utilisée en attaque)0 = refusé (recommandé)
net.ipv4.conf.*.accept_redirectsAccepte les redirections ICMP (peuvent détourner le routage)0 = refusé (recommandé sur serveur) · 1 = accepté (défaut hôte)
net.ipv4.conf.*.secure_redirectsN'accepte les redirections ICMP que depuis des passerelles connues1 = défaut
net.ipv4.conf.*.send_redirectsAutorise l'envoi de redirections ICMP (pertinent seulement pour un routeur)0 = désactivé (recommandé si pas routeur)
net.ipv4.conf.*.log_martiansJournalise les paquets à adresse source/destination impossible (détection de spoofing)1 = recommandé
net.ipv4.conf.*.accept_localAccepte les paquets dont l'adresse source semble locale, arrivant sur une interface externe0 = défaut

7.2 ICMP

VariableDescriptionValeurs / défaut
net.ipv4.icmp_echo_ignore_broadcastsIgnore les requêtes ICMP echo/timestamp envoyées en broadcast/multicast (anti Smurf)1 = recommandé (souvent défaut)
net.ipv4.icmp_echo_ignore_allIgnore tous les pings entrants0 = défaut · 1 = ignore tout
net.ipv4.icmp_ignore_bogus_error_responsesSupprime les logs d'erreurs ICMP non conformes émises par des routeurs bogués1 = recommandé
net.ipv4.icmp_ratelimit / icmp_ratemaskLimite le débit d'envoi de certains types de messages ICMP (anti déni de service)défaut : 1000 ms

7.3 ARP

VariableDescriptionValeurs / défaut
net.ipv4.conf.*.arp_ignoreContrô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_announceContrôle quelle adresse source annoncer dans les requêtes ARP émises0 = défaut · 2 = le plus restrictif
net.ipv4.conf.*.proxy_arpActive le proxy ARP sur l'interface (répond à la place d'un autre hôte)0 = désactivé (défaut)

7.4 TCP

VariableDescriptionValeurs / défaut
net.ipv4.tcp_syncookiesEnvoie des « syncookies » quand la file SYN déborde — protection anti SYN flood1 = activé (recommandé, souvent défaut)
net.ipv4.tcp_max_syn_backlogNombre max de connexions en attente à l'état SYN_RECVdéfaut variable, souvent 1024‑4096
net.ipv4.tcp_fin_timeoutDurée avant fermeture d'une connexion orpheline en FIN_WAIT_2défaut : 60 s
net.ipv4.tcp_tw_reuseAutorise la réutilisation rapide des sockets en TIME‑WAIT pour de nouvelles connexions sortantes0 = désactivé · 1 = global · 2 = loopback (défaut souvent 2)
net.ipv4.tcp_keepalive_timeDélai d'inactivité avant l'envoi du premier paquet keepalivedéfaut : 7200 s (2 h)
net.ipv4.tcp_keepalive_intvl / tcp_keepalive_probesIntervalle entre sondes keepalive / nombre de sondes avant coupuredéfauts : 75 s / 9
net.ipv4.tcp_rmem / net.ipv4.tcp_wmemTriplet min/défaut/max des buffers TCP de réception/émission (auto‑tuning)ex. 4096 87380 6291456
net.ipv4.tcp_window_scalingActive la mise à l'échelle de fenêtre TCP (nécessaire au haut débit/latence)1 = défaut
net.ipv4.tcp_sackActive les accusés de réception sélectifs (SACK)1 = défaut
net.ipv4.tcp_timestampsActive les timestamps TCP (RTT précis, protection anti rejeu) — peut exposer l'uptime de la machine1 = défaut · 0 = pour limiter le fingerprinting
net.ipv4.tcp_mtu_probingActive la découverte de MTU par sondage (contourne les blocages ICMP « Fragmentation Needed »)0 = défaut · 1/2 = activé
net.ipv4.tcp_congestion_controlAlgorithme de contrôle de congestion TCP (ex. cubic, bbr)défaut : cubic
net.ipv4.tcp_rfc1337Protège contre les attaques TIME‑WAIT assassination0 = défaut · 1 = recommandé
net.ipv4.tcp_syn_retries / tcp_synack_retriesNombre de retransmissions SYN / SYN‑ACK avant abandondéfauts : 6 / 5
net.ipv4.tcp_no_metrics_saveEmpêche la mise en cache des métriques de connexion entre connexions0 = défaut

7.5 Divers IPv4

VariableDescriptionValeurs / défaut
net.ipv4.ip_local_port_rangePlage de ports éphémères utilisée pour les connexions sortantesex. 32768 60999
net.ipv4.ip_no_pmtu_discDésactive la découverte de MTU du chemin (Path MTU Discovery)0 = défaut (PMTUD actif)
net.ipv4.igmp_max_membershipsNombre max de groupes multicast qu'un socket peut rejoindredé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 :

VariableDescriptionValeurs / défaut
net.ipv6.conf.all.disable_ipv6Désactive complètement IPv6 sur toutes les interfaces0 = activé (défaut) · 1 = désactivé
net.ipv6.conf.*.accept_raAccepte les annonces de routeur (Router Advertisement) — utile de désactiver sur un serveur non‑hôte de confiance1 = défaut sur la plupart des hôtes
net.ipv6.conf.*.accept_redirectsÉquivalent IPv6 des redirections ICMP1 = défaut · 0 = recommandé sur serveur
net.ipv6.conf.*.autoconfActive l'auto‑configuration d'adresse sans état (SLAAC)1 = défaut
net.ipv6.conf.*.use_tempaddrUtilise des adresses temporaires (RFC 4941) pour limiter le traçage d'un hôte0 = désactivé · 2 = activé et préféré (recommandé côté client)
net.ipv6.conf.all.forwardingActive le routage IPv60 = défaut

9. net.netfilter.* et conntrack

VariableDescriptionValeurs / défaut
net.netfilter.nf_conntrack_maxNombre maximal d'entrées de suivi de connexion (conntrack) simultanées — critique pour pare‑feu/NAT très sollicitéscalculé selon la RAM, souvent 262144 ou plus
net.netfilter.nf_conntrack_tcp_timeout_establishedDélai avant expiration d'une entrée conntrack TCP à l'état établidéfaut : 432000 s (5 j), souvent réduit sur pare‑feu chargés
net.netfilter.nf_conntrack_tcp_timeout_time_waitDélai d'expiration conntrack pour l'état TIME_WAITdéfaut : 120 s
net.netfilter.nf_conntrack_udp_timeout / _streamDélais d'expiration conntrack pour les flux UDPdéfauts : 30 s / 180 s
net.netfilter.nf_conntrack_log_invalidJournalise les paquets considérés invalides par conntrack0 = défaut

10. net.unix.* — sockets Unix

VariableDescriptionValeurs / défaut
net.unix.max_dgram_qlenLongueur maximale de la file d'attente des sockets Unix de type datagrammedé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é).

VariableDescription
user.max_user_namespacesNombre max de namespaces utilisateur créables
user.max_pid_namespacesNombre max de namespaces PID créables
user.max_net_namespacesNombre max de namespaces réseau créables
user.max_mnt_namespacesNombre max de namespaces de montage créables
user.max_ipc_namespacesNombre max de namespaces IPC créables
user.max_uts_namespacesNombre max de namespaces UTS (hostname) créables
user.max_cgroup_namespacesNombre max de namespaces cgroup créables
user.max_time_namespacesNombre 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.*)

VariableDescriptionValeurs / défaut
abi.vsyscall32Autorise 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 :

VariableValeur recommandée (serveur générique, non‑routeur)Pourquoi
net.ipv4.ip_forward0Empêche la machine de router du trafic si ce n'est pas son rôle
net.ipv4.conf.all.rp_filter1Anti IP‑spoofing
net.ipv4.conf.all.accept_source_route0Bloque le routage source, souvent utilisé pour contourner un pare‑feu
net.ipv4.conf.all.accept_redirects0Empêche un tiers de modifier la table de routage locale via ICMP
net.ipv4.conf.all.send_redirects0La machine n'a pas à émettre de redirections si ce n'est pas un routeur
net.ipv4.conf.all.log_martians1Trace les paquets suspects pour détection d'intrusion
net.ipv4.icmp_echo_ignore_broadcasts1Anti attaque Smurf
net.ipv4.tcp_syncookies1Anti SYN flood
kernel.dmesg_restrict1Empêche un utilisateur non privilégié de lire les logs noyau
kernel.kptr_restrict2Empêche la fuite d'adresses noyau facilitant l'exploitation
kernel.randomize_va_space2ASLR complet
kernel.yama.ptrace_scope1 ou 2Limite le traçage de processus par d'autres processus du même utilisateur
kernel.unprivileged_bpf_disabled1Réduit la surface d'attaque eBPF
fs.protected_hardlinks1Anti élévation de privilèges par hardlink
fs.protected_symlinks1Anti attaque TOCTOU par symlink
fs.suid_dumpable0Empê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