6. Durcissement du serveur
6.1. Réglage du fuseau horaire correct
Section intitulée « 6.1. Réglage du fuseau horaire correct »Le réglage du fuseau horaire correct sur votre serveur est important pour la précision des journaux, les tâches planifiées et la cohérence des horodatages dans vos applications avec votre heure locale.
6.1.1. Vérification et réglage du fuseau horaire
Section intitulée « 6.1.1. Vérification et réglage du fuseau horaire »Commencez par vérifier votre configuration actuelle du fuseau horaire :
# Afficher le fuseau horaire actuelsudo timedatectlPour trouver et définir le fuseau horaire approprié :
# Lister tous les fuseaux horaires disponiblessudo timedatectl list-timezones
# Rechercher un fuseau horaire lié à une ville spécifiquesudo timedatectl list-timezones | grep city
# Exemple : Rechercher le fuseau horaire de Parissudo timedatectl list-timezones | grep Paris
# Définir le fuseau horaire à Europe/Parissudo timedatectl set-timezone Europe/Paris
# Vérifier le changement de fuseau horairesudo timedatectlExemple de sortie après le réglage du fuseau horaire :
Local time: Sun 2025-03-02 14:29:40 CET Universal time: Sun 2025-03-02 13:29:40 UTC RTC time: Sun 2025-03-02 13:29:40 Time zone: Europe/Paris (CET, +0100)System clock synchronized: yes NTP service: active RTC in local TZ: no6.2. Configuration de l’espace swap
Section intitulée « 6.2. Configuration de l’espace swap »L’espace swap est une portion du disque dur que le système peut utiliser comme mémoire virtuelle lorsque la RAM physique est entièrement utilisée. Un espace swap correctement configuré peut prévenir les plantages système lors d’une utilisation intensive de la mémoire.
6.2.1. Taille de swap recommandée
Section intitulée « 6.2.1. Taille de swap recommandée »Le tableau suivant fournit des recommandations pour la taille du swap en fonction de la RAM de votre serveur :
| RAM | Sans hibernation | Avec hibernation | Maximum |
|---|---|---|---|
| 256MB | 256MB | 512MB | 512MB |
| 512MB | 512MB | 1024MB | 1024MB |
| 1024MB | 1024MB | 2048MB | 2048MB |
| 2GB | 1GB | 3GB | 4GB |
| 4GB | 2GB | 6GB | 8GB |
| 8GB | 3GB | 11GB | 16GB |
| 16GB | 4GB | 20GB | 32GB |
| 32GB | 6GB | 38GB | 64GB |
Source : Ubuntu SwapFaq
6.2.2. Vérification de l’état actuel du swap
Section intitulée « 6.2.2. Vérification de l’état actuel du swap »Avant de créer un nouveau fichier swap, vérifiez si le swap est déjà activé :
# Vérifier l'état actuel du swapsudo swapon -s
# Si aucune sortie n'apparaît, le swap n'est pas activé
# Vous pouvez également vérifier avec htop, qui affichera :# Swp[ 0K/0K] lorsque le swap n'est pas activé6.2.3. Suppression du swap existant (si nécessaire)
Section intitulée « 6.2.3. Suppression du swap existant (si nécessaire) »Si vous devez modifier un fichier swap existant :
# Désactiver le fichier swapsudo swapoff /swapfile
# Sauvegarder fstab avant modificationsudo cp /etc/fstab /etc/fstab.bak
# Modifier fstab pour supprimer l'entrée swapsudo nano /etc/fstab
# Supprimer le fichier swapsudo rm /swapfile6.2.4. Création d’un nouveau fichier swap
Section intitulée « 6.2.4. Création d’un nouveau fichier swap »Choisissez la taille appropriée pour votre serveur en vous basant sur le tableau ci-dessus :
# Créer un fichier swap de 2 Giosudo dd if=/dev/zero of=/swapfile bs=1024 count=2097152
# Pour un fichier swap de 4 Giosudo dd if=/dev/zero of=/swapfile bs=1024 count=4194304
# Pour un fichier swap de 6 Giosudo dd if=/dev/zero of=/swapfile bs=1024 count=6291456
# Pour un fichier swap de 8 Giosudo dd if=/dev/zero of=/swapfile bs=1024 count=8388608Exemple de sortie pour un fichier swap de 4 Gio :
4194304+0 records in4194304+0 records out4294967296 bytes (4.3 GB, 4.0 GiB) copied, 8.81315 s, 487 MB/sComprendre la commande dd :
Section intitulée « Comprendre la commande dd : »sudo: Exécute la commande avec les privilèges administratifsdd: Une commande bas niveau pour copier et convertir des donnéesif=/dev/zero: Utilise/dev/zerocomme entrée, qui fournit des octets nuls illimitésof=/swapfile: Définit le fichier de sortie comme/swapfilebs=1024: Définit la taille de bloc à 1024 octets (1 Ko)count=4194304: Spécifie le nombre de blocs à écrire (4194304 blocs x 1024 octets = 4 Gio)
6.2.5. Configuration du fichier swap
Section intitulée « 6.2.5. Configuration du fichier swap »Après avoir créé le fichier swap, configurez-le pour l’utilisation :
# Naviguer vers le répertoire racinecd /
# Définir les permissions correctes pour le fichier swap (empêche les autres utilisateurs de le lire)sudo chmod 600 /swapfile
# Configurer le fichier comme zone de swap Linuxsudo mkswap /swapfile
# Activer le nouveau fichier swapsudo swapon /swapfile
# Vérifier l'état du swapsudo swapon -s
# Rendre le swap permanent après redémarrage en modifiant fstabsudo vim /etc/fstab
# Ajouter cette ligne au fichier fstab :/swapfile swap swap defaults 0 06.2.6. Optimisation des paramètres swap
Section intitulée « 6.2.6. Optimisation des paramètres swap »Pour améliorer les performances du système, vous pouvez ajuster l’utilisation du swap par le système :
# Vérifier les paramètres actuels de swappiness et cache pressuresudo sysctl -a | grep -e vm.swappiness -e vm.vfs_cache_pressure
# Naviguer vers le répertoire sysctl.dcd /etc/sysctl.d/
# Créer ou modifier custom_overrides.confsudo vim custom_overrides.confAjoutez la configuration suivante :
# Personnalisation SWAPvm.swappiness = 1vm.vfs_cache_pressure = 50Ces paramètres :
vm.swappiness = 1: Minimise l’utilisation du swap en privilégiant la RAM, n’utilisant le swap qu’en dernier recoursvm.vfs_cache_pressure = 50: Équilibre l’utilisation de la mémoire en conservant plus longtemps les métadonnées des fichiers en cache, améliorant la vitesse d’accès aux fichiers
Appliquez les modifications :
# Redémarrer pour appliquer les modificationssudo reboot
# Après le redémarrage, vérifier les paramètressudo sysctl -a | grep -e vm.swappiness -e vm.vfs_cache_pressureSortie attendue :
vm.swappiness = 1vm.vfs_cache_pressure = 506.3. Durcissement de la mémoire partagée
Section intitulée « 6.3. Durcissement de la mémoire partagée »La mémoire partagée (/dev/shm) est un système de fichiers temporaire utilisé pour la communication inter-processus. Par défaut, elle peut présenter des vulnérabilités de sécurité exploitables par des attaquants.
6.3.1. Vérification des paramètres actuels de la mémoire partagée
Section intitulée « 6.3.1. Vérification des paramètres actuels de la mémoire partagée »Commencez par vérifier la configuration actuelle de votre mémoire partagée :
# Confirmer les paramètres actuelsmount | grep shm
# Exemple de sortie :# tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,inode64)6.3.2. Durcissement de la configuration de la mémoire partagée
Section intitulée « 6.3.2. Durcissement de la configuration de la mémoire partagée »Pour sécuriser la mémoire partagée, vous devez modifier le fichier /etc/fstab :
# Sauvegarder le fichier fstab avant modificationcd /etcsudo cp fstab fstab.bak
# Modifier le fichier fstabsudo vim /etc/fstabAjoutez la ligne suivante à la fin du fichier :
# DURCISSEMENT DE LA MEMOIRE PARTAGEEnone /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0Cette configuration :
noexec: Empêche l’exécution de binaires dans la zone de mémoire partagéenosuid: Bloque l’élévation de privilèges via les bitssetuid/setgidnodev: Interdit la création de fichiers de périphérique dans la mémoire partagée
6.3.3. Vérification de la configuration
Section intitulée « 6.3.3. Vérification de la configuration »Après avoir enregistré les modifications, vous pouvez soit redémarrer, soit remonter la mémoire partagée pour appliquer les changements :
# Remonter /dev/shm avec les nouveaux paramètressudo mount -o remount /dev/shm
# Vérifier les nouveaux paramètresmount | grep /dev/shmSortie attendue :
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,inode64)La présence de noexec, nosuid et nodev dans la sortie confirme que le durcissement a été appliqué avec succès.
6.4. Désactivation d’IPv6
Section intitulée « 6.4. Désactivation d’IPv6 »IPv6 est le protocole Internet de nouvelle génération, mais si vous ne l’utilisez pas, désactiver IPv6 peut réduire la surface d’attaque de votre serveur et simplifier votre configuration réseau.
6.4.1. Méthode 1 : Désactivation d’IPv6 via GRUB
Section intitulée « 6.4.1. Méthode 1 : Désactivation d’IPv6 via GRUB »Pour les systèmes utilisant le chargeur de démarrage GRUB, vous pouvez désactiver IPv6 au niveau du noyau :
# Ouvrir le fichier de configuration GRUBsudo nano /etc/default/grubModifiez la ligne GRUB_CMDLINE_LINUX pour inclure le paramètre de désactivation d’IPv6 :
GRUB_CMDLINE_LINUX="ipv6.disable=1"Si la ligne contient déjà d’autres paramètres, ajoutez le paramètre IPv6 avec un espace comme séparateur :
GRUB_CMDLINE_LINUX="existing_parameters ipv6.disable=1"Mettez à jour GRUB et redémarrez pour appliquer les modifications :
# Mettre à jour la configuration GRUBsudo update-grub
# Redémarrer le systèmesudo reboot6.4.2. Méthode 2 : Désactivation d’IPv6 avec Sysctl
Section intitulée « 6.4.2. Méthode 2 : Désactivation d’IPv6 avec Sysctl »Vous pouvez également désactiver IPv6 en utilisant la configuration sysctl :
# Modifier le fichier de configuration sysctlsudo vim /etc/sysctl.d/99-sysctl.confAjoutez les lignes suivantes pour désactiver IPv6 :
# Désactiver IPv6net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1Appliquez les modifications sans redémarrage :
# Recharger la configuration sysctlsudo sysctl -p6.4.3. Vérification de la désactivation d’IPv6
Section intitulée « 6.4.3. Vérification de la désactivation d’IPv6 »Pour confirmer qu’IPv6 a été désactivé avec succès :
# Vérifier la présence d'adresses IPv6ip a | grep inet6Si aucune sortie n’est affichée, IPv6 est désactivé avec succès. Si vous voyez encore des adresses IPv6, vous devrez peut-être redémarrer le système ou vérifier votre configuration.
6.5. Durcissement et optimisation de la couche réseau
Section intitulée « 6.5. Durcissement et optimisation de la couche réseau »L’optimisation de votre configuration réseau peut améliorer à la fois la sécurité et les performances. Les paramètres suivants aident à se protéger contre les attaques réseau courantes et à optimiser les performances réseau.
6.5.1. Paramètres de sécurité et de performance réseau
Section intitulée « 6.5.1. Paramètres de sécurité et de performance réseau »Naviguez vers le répertoire de configuration sysctl :
# Accéder au répertoire de configuration sysctlcd /etc/sysctl.d/
# Créer ou modifier le fichier de surcharges personnaliséessudo vim custom_overrides.confAjoutez les directives de durcissement réseau suivantes :
# Protection contre l'usurpation d'IPnet.ipv4.conf.default.rp_filter = 1net.ipv4.conf.all.rp_filter = 1
# Protection contre les inondations SYNnet.ipv4.tcp_syncookies = 1net.ipv4.tcp_max_syn_backlog = 2048net.ipv4.tcp_synack_retries = 2net.ipv4.tcp_syn_retries = 5
# Routage des paquets sourcenet.ipv4.conf.all.accept_source_route = 0net.ipv6.conf.all.accept_source_route = 0net.ipv4.conf.default.accept_source_route = 0net.ipv6.conf.default.accept_source_route = 0
# Augmenter le nombre de ports utilisablesnet.ipv4.ip_local_port_range = 1024 65535
# Augmenter les descripteurs de fichiers et restreindre les core dumpsfs.file-max = 2097152fs.suid_dumpable = 0
# Nombre de connexions entrantes / file d'attentenet.core.somaxconn = 65535net.core.netdev_max_backlog = 262144
# Augmenter les tampons mémoire maximumnet.core.optmem_max = 25165824
# Tailles des tampons d'envoi/réceptionnet.core.rmem_default = 31457280net.core.rmem_max = 67108864net.core.wmem_default = 31457280net.core.wmem_max = 671088646.5.2. Comprendre les paramètres de durcissement réseau
Section intitulée « 6.5.2. Comprendre les paramètres de durcissement réseau »Ces paramètres améliorent la sécurité et les performances de votre serveur :
-
Protection contre l’usurpation d’IP :
rp_filter = 1active la validation source des paquets, empêchant les attaques d’usurpation d’IP où les attaquants falsifient l’adresse source.
-
Protection contre les inondations SYN :
tcp_syncookies = 1protège contre les attaques par inondation SYN en validant les demandes de connexion sans utiliser d’entrées dans la file de connexion.tcp_max_syn_backlog = 2048augmente la file d’attente SYN pour gérer plus de demandes de connexion.tcp_synack_retries = 2ettcp_syn_retries = 5optimisent l’établissement des connexions TCP.
-
Routage des paquets source :
- La désactivation de
accept_source_routeempêche les attaquants de spécifier la route que les paquets empruntent à travers le réseau.
- La désactivation de
-
Ports utilisables :
ip_local_port_range = 1024 65535augmente la plage de ports locaux disponibles pour les connexions sortantes.
-
Descripteurs de fichiers et core dumps :
fs.file-max = 2097152augmente le nombre maximum de descripteurs de fichiers.fs.suid_dumpable = 0empêche les programmes setuid de créer des core dumps, qui pourraient exposer des informations sensibles.
-
Gestion des connexions :
somaxconn = 65535augmente le nombre maximum de connexions en attente.netdev_max_backlog = 262144augmente la longueur maximale de la file d’entrée du processeur.
-
Tampons mémoire et tampons de socket :
- Les paramètres
optmem_max,rmem_*etwmem_*optimisent l’allocation mémoire pour les opérations réseau.
- Les paramètres
6.5.3. Application et vérification des paramètres
Section intitulée « 6.5.3. Application et vérification des paramètres »Appliquez les modifications en redémarrant le système :
# Redémarrer pour appliquer toutes les modificationssudo rebootAprès le redémarrage, vérifiez que les paramètres ont été appliqués :
# Vérifier un paramètre spécifique (exemple)sudo sysctl -a | grep net.core.optmem_max
# Sortie attendue :# net.core.optmem_max = 25165824Vous pouvez vérifier les autres paramètres de la même manière en remplaçant net.core.optmem_max par le paramètre spécifique que vous souhaitez vérifier.
6.6. Optimisation du contrôle de congestion TCP
Section intitulée « 6.6. Optimisation du contrôle de congestion TCP »Les algorithmes de contrôle de congestion TCP gèrent le trafic réseau pour éviter l’effondrement par congestion. L’algorithme BBR (Bottleneck Bandwidth and RTT) de Google peut améliorer significativement les performances réseau par rapport aux algorithmes traditionnels.
6.6.1. Vérification des paramètres actuels de contrôle de congestion
Section intitulée « 6.6.1. Vérification des paramètres actuels de contrôle de congestion »Commencez par vérifier quels algorithmes de contrôle de congestion sont disponibles et lequel est actuellement actif :
# Vérifier les algorithmes de contrôle de congestion disponiblessudo sysctl net.ipv4.tcp_available_congestion_control
# Vérifier l'algorithme actuellement actifsudo sysctl net.ipv4.tcp_congestion_control6.6.2. Activation de l’algorithme BBR
Section intitulée « 6.6.2. Activation de l’algorithme BBR »Pour activer l’algorithme de contrôle de congestion BBR :
# Charger le module BBRsudo modprobe tcp_bbr
# S'assurer que BBR se charge au démarragesudo bash -c 'echo "tcp_bbr" > /etc/modules-load.d/bbr.conf'
# Vérifier que BBR est maintenant disponiblesudo sysctl net.ipv4.tcp_available_congestion_control6.6.3. Définir BBR comme algorithme par défaut
Section intitulée « 6.6.3. Définir BBR comme algorithme par défaut »Modifiez le fichier de configuration des surcharges personnalisées :
# Modifier le fichier de configuration sysctlsudo vim /etc/sysctl.d/custom_overrides.confAjoutez les lignes suivantes pour définir BBR comme algorithme de contrôle de congestion par défaut :
# Activer l'algorithme BBRnet.ipv4.tcp_congestion_control = bbrnet.core.default_qdisc = fqL’ordonnanceur de paquets fq (Fair Queuing) fonctionne bien avec BBR pour réduire le bufferbloat et améliorer la latence.
6.6.4. Vérification de la configuration
Section intitulée « 6.6.4. Vérification de la configuration »Après avoir enregistré les modifications, vous pouvez les appliquer immédiatement et vérifier :
# Appliquer les modificationssudo sysctl -p /etc/sysctl.d/custom_overrides.conf
# Confirmer que BBR est maintenant l'algorithme actifsudo sysctl net.ipv4.tcp_congestion_controlSortie attendue :
net.ipv4.tcp_congestion_control = bbr6.7. Optimisation des temps d’accès aux fichiers
Section intitulée « 6.7. Optimisation des temps d’accès aux fichiers »Par défaut, Linux met à jour le temps d’accès (atime) d’un fichier à chaque lecture, ce qui peut entraîner des opérations d’E/S disque inutiles. La désactivation de cette fonctionnalité peut améliorer les performances, en particulier pour les serveurs très sollicités.
6.7.1. Vérification des options de montage actuelles
Section intitulée « 6.7.1. Vérification des options de montage actuelles »Commencez par vérifier les options de montage actuelles de votre système de fichiers :
# Afficher les systèmes de fichiers montés avec des tailles lisiblesdf -h
# Afficher les options de montage détailléescat /proc/mountsExemple de sortie de /proc/mounts :
/dev/vda1 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0ou
/dev/sda1 / ext4 rw,relatime,discard,errors=remount-ro,commit=30 0 0Notez que la plupart des systèmes utilisent relatime par défaut, qui est un compromis ne mettant à jour les temps d’accès que s’ils sont antérieurs au temps de modification. Bien que meilleur que le atime par défaut, l’utilisation de noatime offre des performances encore meilleures.
6.7.2. Modification de la table du système de fichiers (fstab)
Section intitulée « 6.7.2. Modification de la table du système de fichiers (fstab) »Pour désactiver définitivement les mises à jour du temps d’accès, modifiez le fichier /etc/fstab :
# Modifier la table du système de fichierssudo vim /etc/fstabTrouvez la ligne de votre système de fichiers racine (/) et ajoutez l’option noatime :
Avant (exemple) :
UUID=8ce122bd-f39c-45ae-b129-9650cfc67567 / ext4 errors=remount-ro 0 1Après (exemple) :
UUID=8ce122bd-f39c-45ae-b129-9650cfc67567 / ext4 errors=remount-ro,noatime 0 1Si votre fstab utilise un format différent, assurez-vous d’ajouter noatime aux options de montage :
/dev/sda1 / ext4 rw,noatime,discard,errors=remount-ro,commit=30 0 06.7.3. Application et vérification des modifications
Section intitulée « 6.7.3. Application et vérification des modifications »Vous pouvez soit redémarrer votre système, soit remonter le système de fichiers pour appliquer les modifications :
# Remonter le système de fichiers racine avec les nouvelles optionssudo mount -o remount /
# Vérifier les modificationscat /proc/mountsSortie attendue (notez que l’option noatime est maintenant présente) :
/dev/vda1 / ext4 rw,noatime,errors=remount-ro,data=ordered 0 0Cela confirme que le système de fichiers est maintenant monté avec l’option noatime, ce qui améliorera les performances d’E/S disque.
6.8. Augmentation des limites de fichiers ouverts
Section intitulée « 6.8. Augmentation des limites de fichiers ouverts »Les systèmes Linux ont des limites sur le nombre de fichiers qu’un processus peut ouvrir simultanément. Pour les serveurs très sollicités, en particulier ceux qui exécutent des bases de données ou des serveurs web, les limites par défaut peuvent être trop restrictives.
6.8.1. Vérification des limites de fichiers actuelles
Section intitulée « 6.8.1. Vérification des limites de fichiers actuelles »Commencez par vérifier vos limites actuelles de fichiers ouverts :
# Vérifier la limite stricte (maximum autorisé)ulimit -Hn
# Vérifier la limite souple (paramètre actuel)ulimit -SnLes valeurs par défaut sont généralement de 1024 pour les limites souples et 4096 pour les limites strictes, ce qui peut être insuffisant pour les serveurs très sollicités.
6.8.2. Augmentation des limites de fichiers à l’échelle du système
Section intitulée « 6.8.2. Augmentation des limites de fichiers à l’échelle du système »Pour augmenter les limites pour tous les utilisateurs, créez un fichier de configuration dans le répertoire limits.d :
# Naviguer vers le répertoire limits.dcd /etc/security/limits.d/
# Créer ou modifier le fichier de surcharges personnaliséessudo vim custom_overrides.confAjoutez la configuration suivante pour augmenter les limites :
# <domain> <type> <item> <value>* soft nofile 120000* hard nofile 120000root soft nofile 120000root hard nofile 120000Cette configuration :
- Définit les limites souples et strictes à 120 000 fichiers ouverts
- S’applique à tous les utilisateurs (
*) et spécifiquement à l’utilisateur root - La valeur de 120 000 est suffisante pour la plupart des charges de travail serveur, mais peut être augmentée si nécessaire
6.8.3. Activation des limites PAM
Section intitulée « 6.8.3. Activation des limites PAM »Pour que les limites prennent effet, vous devez vous assurer que le système PAM (Pluggable Authentication Modules) est configuré pour les appliquer. Modifiez les fichiers de configuration de session PAM :
# Ajouter pam_limits.so à common-sessionsudo bash -c 'echo "session required pam_limits.so" >> /etc/pam.d/common-session'
# Ajouter pam_limits.so à common-session-noninteractivesudo bash -c 'echo "session required pam_limits.so" >> /etc/pam.d/common-session-noninteractive'Vous pouvez également modifier ces fichiers directement :
# Modifier common-sessionsudo vim /etc/pam.d/common-session
# Modifier common-session-noninteractivesudo vim /etc/pam.d/common-session-noninteractiveAjoutez la ligne suivante à chaque fichier si elle n’est pas déjà présente :
session required pam_limits.so6.8.4. Vérification des modifications
Section intitulée « 6.8.4. Vérification des modifications »Après avoir effectué ces modifications, vous devrez vous déconnecter et vous reconnecter pour qu’elles prennent effet. Vérifiez ensuite les nouvelles limites :
# Vérifier la nouvelle limite stricteulimit -Hn
# Vérifier la nouvelle limite soupleulimit -SnLa sortie devrait afficher les nouvelles limites (120000) que vous avez configurées.