Tuning kernel Linux — paramètres sysctl essentiels pour la production

21 mai 2026 — par admin_libra

Le noyau Linux est conçu pour fonctionner sur une multitude de matériels et de cas d’usage, des postes de travail aux serveurs embarqués. Ses paramètres par défaut reflètent cet équilibre : prudents, génériques, mais souvent sous-optimaux pour un environnement de production. Heureusement, l’interface sysctl permet de modifier à chaud des centaines de paramètres du noyau sans redémarrage.

Sur un serveur de production hébergeant des applications web, des bases de données ou des microservices, quelques dizaines de paramètres bien choisis peuvent transformer radicalement les performances réseau, la gestion mémoire et le niveau de sécurité. Ce guide passe en revue les réglages sysctl essentiels, organisés par domaine, avec des valeurs testées et expliquées.

Avant toute modification en production, appliquez systématiquement la règle d’or : tester en pré-production, mesurer avant et après, et conserver un plan de retour arrière.

Comprendre sysctl : lecture, écriture et persistance

L’outil sysctl interagit directement avec le pseudo-système de fichiers /proc/sys/. Chaque fichier de cette arborescence correspond à un paramètre du noyau en cours d’exécution.

Lire et modifier un paramètre à chaud

# Lire la valeur actuelle d'un paramètre
sysctl vm.swappiness

# Modifier temporairement (perdu au redémarrage)
sysctl -w vm.swappiness=10

# Équivalent direct via /proc
echo 10 > /proc/sys/vm/swappiness

Rendre les modifications persistantes

La bonne pratique sur Debian et Ubuntu consiste à créer un fichier dédié dans /etc/sysctl.d/ plutôt que de modifier /etc/sysctl.conf, afin de faciliter la maintenance et les rollbacks.

# Créer un fichier de configuration dédié
sudo nano /etc/sysctl.d/99-production.conf

# Appliquer immédiatement sans redémarrer
sudo sysctl --system

# Vérifier qu'un paramètre est bien actif
sysctl net.core.somaxconn

Optimisation réseau : gérer des milliers de connexions simultanées

Le réseau est le premier goulot d’étranglement sur la majorité des serveurs de production. Les valeurs par défaut du noyau limitent le nombre de connexions simultanées, la taille des files d’attente et les tampons mémoire alloués aux sockets.

Files d’attente et connexions entrantes

# /etc/sysctl.d/99-production.conf

# Taille maximale de la file d'attente des connexions établies
net.core.somaxconn = 65535

# File d'attente des paquets entrants sur chaque interface réseau
net.core.netdev_max_backlog = 65535

# File d'attente des connexions SYN en attente (protection SYN flood)
net.ipv4.tcp_max_syn_backlog = 8192

# Protection active contre les SYN floods (cookies SYN)
net.ipv4.tcp_syncookies = 1

Tampons mémoire des sockets TCP

Les tampons de réception et d’émission déterminent le débit maximal atteignable sur une connexion. Les valeurs par défaut (environ 4 Mo) sont insuffisantes pour des liens haute vitesse ou des connexions longue distance.

# Tampon de réception : min / défaut / max (en octets)
net.ipv4.tcp_rmem = 4096 131072 16777216

# Tampon d'émission : min / défaut / max (en octets)
net.ipv4.tcp_wmem = 4096 87380 16777216

# Plafond système pour les sockets de réception
net.core.rmem_max = 16777216

# Plafond système pour les sockets d'émission
net.core.wmem_max = 16777216

# Auto-tuning des tampons (activer)
net.ipv4.tcp_moderate_rcvbuf = 1

Algorithme de contrôle de congestion BBR

BBR (Bottleneck Bandwidth and Round-trip time), développé par Google, surpasse l’algorithme CUBIC par défaut sur les liaisons WAN et les réseaux avec pertes de paquets. Il maintient un débit élevé tout en réduisant la latence.

# Vérifier les algorithmes disponibles
sysctl net.ipv4.tcp_available_congestion_control

# Activer BBR avec la discipline de file FQ
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# Vérifier que BBR est actif
sysctl net.ipv4.tcp_congestion_control

Gestion des connexions et ports éphémères

# Plage de ports éphémères (par défaut 32768-60999)
net.ipv4.ip_local_port_range = 10000 65535

# Réutilisation des sockets TIME_WAIT pour de nouvelles connexions
net.ipv4.tcp_tw_reuse = 1

# Réduction du délai de fermeture TCP FIN (défaut : 60s)
net.ipv4.tcp_fin_timeout = 15

# Maintien des connexions persistantes (keepalive)
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 9

Optimisation mémoire : swap, dirty pages et cache

La gestion mémoire du noyau impacte directement la latence des applications. Un serveur de base de données ou un cache Redis peut voir ses performances chuter de 50 % si le noyau décide d’activer massivement le swap au mauvais moment.

Contrôle du swap avec swappiness

# Réduire l'agressivité du swap (défaut : 60)
# 10 = conserver les données en RAM, swapper en dernier recours
# 1 = désactiver presque totalement le swap (bases de données)
vm.swappiness = 10

# Mémoire minimale libre à maintenir en permanence (en Ko)
vm.min_free_kbytes = 65536

Dirty pages et synchronisation disque

Les « dirty pages » sont des pages mémoire modifiées non encore écrites sur disque. Un ratio trop élevé entraîne des pics d’I/O lors des flush, dégradant les temps de réponse.

# Pourcentage de RAM contenant des dirty pages avant flush forcé (défaut : 20)
vm.dirty_ratio = 15

# Seuil de déclenchement du flush en arrière-plan (défaut : 10)
vm.dirty_background_ratio = 5

# Pression sur le cache VFS (dentry/inode) — 50 = équilibré
vm.vfs_cache_pressure = 50

# Délai entre deux passages du flush (en centièmes de secondes)
vm.dirty_expire_centisecs = 1500
vm.dirty_writeback_centisecs = 500

Limite de fichiers ouverts

# Nombre maximum de fichiers ouverts simultanément (C10k/C100k)
fs.file-max = 2097152

# Vérifier l'utilisation actuelle
cat /proc/sys/fs/file-nr

Durcissement sécurité : protections réseau et noyau

Les paramètres sysctl constituent une ligne de défense complémentaire au pare-feu. Ils neutralisent plusieurs vecteurs d’attaque réseau courants et renforcent l’isolation mémoire des processus.

Protections réseau

# Filtrage des paquets par chemin inverse (anti-spoofing IP)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Rejeter le routage à la source (source routing)
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0

# Ignorer les redirections ICMP (vecteur d'attaque MITM)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# Ignorer les broadcasts ICMP (amplification d'attaque)
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Journaliser les paquets de sources martiens
net.ipv4.conf.all.log_martians = 1

Durcissement du noyau

# ASLR : randomisation de l'espace d'adressage (défaut souvent 0 ou 1)
kernel.randomize_va_space = 2

# Restreindre l'accès aux logs noyau (dmesg) aux administrateurs
kernel.dmesg_restrict = 1

# Masquer les pointeurs noyau dans /proc (prévention de fuites d'adresses)
kernel.kptr_restrict = 2

# Restreindre ptrace aux processus parents uniquement
kernel.yama.ptrace_scope = 1

# Désactiver les core dumps des processus setuid
fs.suid_dumpable = 0

# Protections des liens symboliques et physiques
fs.protected_symlinks = 1
fs.protected_hardlinks = 1

Configuration complète et application

Voici le fichier consolidé à déployer sur vos serveurs de production Debian/Ubuntu :

sudo tee /etc/sysctl.d/99-production.conf > /dev/null << 'EOF'
### Réseau — connexions et buffers
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_rmem = 4096 131072 16777216
net.ipv4.tcp_wmem = 4096 87380 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_moderate_rcvbuf = 1
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.ipv4.ip_local_port_range = 10000 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 9

### Mémoire
vm.swappiness = 10
vm.min_free_kbytes = 65536
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
vm.vfs_cache_pressure = 50
vm.dirty_expire_centisecs = 1500
vm.dirty_writeback_centisecs = 500
fs.file-max = 2097152

### Sécurité réseau
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.log_martians = 1

### Durcissement noyau
kernel.randomize_va_space = 2
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
kernel.yama.ptrace_scope = 1
fs.suid_dumpable = 0
fs.protected_symlinks = 1
fs.protected_hardlinks = 1
EOF

# Appliquer tous les paramètres
sudo sysctl --system

# Vérifier sans erreur
sysctl -p /etc/sysctl.d/99-production.conf

À lire également

Références

Index complet

Tous les articles (35)

Date Article Tags
27/05/2026 LXD 6.x : orchestration de conteneurs Linux avec profils et clustering administration clustering conteneurs 27/05/2026 Keepalived — VIP flottante et load balancing sans matériel dédié debian failover haute-disponibilité 27/05/2026 Btrfs sur Linux — snapshots, sous-volumes et compression en pratique administration btrfs compression 21/05/2026 CVE-2026-42945 (NGINX Rift) : analyse et remédiation sur Debian/Ubuntu cve debian heap-overflow 21/05/2026 Tuning kernel Linux — paramètres sysctl essentiels pour la production debian kernel mémoire 21/05/2026 DRBD : réplication de blocs entre deux serveurs en temps réel cluster debian drbd 15/05/2026 CVE-2026-23918 — vulnérabilité Apache 2.4.66 : analyse et correctifs sur Debian/Ubuntu (hors Debian 11) apache cve debian 15/05/2026 CVE-2026-31431 (Copy Fail) — Analyse et remédiation sur Debian/Ubuntu algif_aead copy-fail cve 12/05/2026 Pacemaker et Corosync — cluster haute disponibilité Linux cluster corosync debian 12/05/2026 WireGuard : monter un VPN mesh entre plusieurs serveurs Linux chiffrement linux mesh 12/05/2026 Netdata — monitoring temps réel sans configuration complexe alertes dashboard linux 12/05/2026 nftables en pratique — remplacer iptables sur Debian/Ubuntu debian firewall iptables 12/05/2026 Podman : alternative rootless à Docker — installation et migration conteneurs docker kubernetes 02/05/2026 Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques alertmanager dashboard debian 02/05/2026 Ansible : automatiser la gestion de serveurs Linux avec des playbooks administration ansible automation 28/04/2026 ZFS sur Linux : snapshots, clones et RAID-Z en pratique administration compression filesystem 28/04/2026 eBPF sur Linux : observabilité et traçage kernel avec bpftrace et BCC bcc bpftrace diagnostic 23/04/2026 Analyse de la mémoire sur Linux — vmstat, free, smem diagnostic mémoire monitoring 23/04/2026 Sécurité Linux — Firewall iptables et nftables firewall iptables nftables 23/04/2026 ZFS sur Linux — Installation et gestion avancée administration filesystem stockage 23/04/2026 Gestion des services avec systemd sur Debian et Ubuntu administration debian services 23/04/2026 Gestion des ressources cgroups v1/v2 avec LXC cgroups conteneurs lxc 23/04/2026 Centralisation logs avec ELK Stack — Elasticsearch, Kibana, Filebeat elasticsearch elk filebeat 23/04/2026 Supervision avec Zabbix 7.0 LTS sur Debian/Ubuntu debian monitoring supervision 23/04/2026 Plusieurs versions PHP-FPM sur Apache Debian/Ubuntu apache debian php-fpm 23/04/2026 Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx apache nginx php-fpm 23/04/2026 Optimisation PHP-FPM — Guide de tuning d'un pool optimisation performance php-fpm 29/07/2025 Docker sur Debian/Ubuntu : Installation, Configuration et Utilisation conteneurs debian docker 03/07/2025 Serveur VPN WireGuard sous linux réseau sécurité vpn 03/07/2025 Authentification par clé publique sur un serveur SSH authentification cryptographie sécurité 27/06/2025 Surveillance et diagnostic d’un serveur Linux avec vmstat, iotop et htop diagnostic htop monitoring 27/06/2025 Mémoire : Utilisation des Huge Pages et implémentation hugepages mémoire noyau 27/06/2025 Mémoire Swap et paramétrage swappiness mémoire noyau performance 18/06/2025 Installation et Configuration des Conteneurs LXC sur Linux administration conteneurs lxc 18/06/2025 Gestion des journaux avec syslog et journalctl administration journalctl logs