Aller au contenu

6. Durcissement du serveur

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 actuel
sudo timedatectl

Pour trouver et définir le fuseau horaire approprié :

# Lister tous les fuseaux horaires disponibles
sudo timedatectl list-timezones
# Rechercher un fuseau horaire lié à une ville spécifique
sudo timedatectl list-timezones | grep city
# Exemple : Rechercher le fuseau horaire de Paris
sudo timedatectl list-timezones | grep Paris
# Définir le fuseau horaire à Europe/Paris
sudo timedatectl set-timezone Europe/Paris
# Vérifier le changement de fuseau horaire
sudo timedatectl

Exemple 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: no

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.

Le tableau suivant fournit des recommandations pour la taille du swap en fonction de la RAM de votre serveur :

RAMSans hibernationAvec hibernationMaximum
256MB256MB512MB512MB
512MB512MB1024MB1024MB
1024MB1024MB2048MB2048MB
2GB1GB3GB4GB
4GB2GB6GB8GB
8GB3GB11GB16GB
16GB4GB20GB32GB
32GB6GB38GB64GB

Source : Ubuntu SwapFaq

Avant de créer un nouveau fichier swap, vérifiez si le swap est déjà activé :

# Vérifier l'état actuel du swap
sudo 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 swap
sudo swapoff /swapfile
# Sauvegarder fstab avant modification
sudo cp /etc/fstab /etc/fstab.bak
# Modifier fstab pour supprimer l'entrée swap
sudo nano /etc/fstab
# Supprimer le fichier swap
sudo rm /swapfile

Choisissez la taille appropriée pour votre serveur en vous basant sur le tableau ci-dessus :

# Créer un fichier swap de 2 Gio
sudo dd if=/dev/zero of=/swapfile bs=1024 count=2097152
# Pour un fichier swap de 4 Gio
sudo dd if=/dev/zero of=/swapfile bs=1024 count=4194304
# Pour un fichier swap de 6 Gio
sudo dd if=/dev/zero of=/swapfile bs=1024 count=6291456
# Pour un fichier swap de 8 Gio
sudo dd if=/dev/zero of=/swapfile bs=1024 count=8388608

Exemple de sortie pour un fichier swap de 4 Gio :

4194304+0 records in
4194304+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 8.81315 s, 487 MB/s
  • sudo : Exécute la commande avec les privilèges administratifs
  • dd : Une commande bas niveau pour copier et convertir des données
  • if=/dev/zero : Utilise /dev/zero comme entrée, qui fournit des octets nuls illimités
  • of=/swapfile : Définit le fichier de sortie comme /swapfile
  • bs=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)

Après avoir créé le fichier swap, configurez-le pour l’utilisation :

# Naviguer vers le répertoire racine
cd /
# 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 Linux
sudo mkswap /swapfile
# Activer le nouveau fichier swap
sudo swapon /swapfile
# Vérifier l'état du swap
sudo swapon -s
# Rendre le swap permanent après redémarrage en modifiant fstab
sudo vim /etc/fstab
# Ajouter cette ligne au fichier fstab :
/swapfile swap swap defaults 0 0

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 pressure
sudo sysctl -a | grep -e vm.swappiness -e vm.vfs_cache_pressure
# Naviguer vers le répertoire sysctl.d
cd /etc/sysctl.d/
# Créer ou modifier custom_overrides.conf
sudo vim custom_overrides.conf

Ajoutez la configuration suivante :

# Personnalisation SWAP
vm.swappiness = 1
vm.vfs_cache_pressure = 50

Ces paramètres :

  • vm.swappiness = 1 : Minimise l’utilisation du swap en privilégiant la RAM, n’utilisant le swap qu’en dernier recours
  • vm.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 modifications
sudo reboot
# Après le redémarrage, vérifier les paramètres
sudo sysctl -a | grep -e vm.swappiness -e vm.vfs_cache_pressure

Sortie attendue :

vm.swappiness = 1
vm.vfs_cache_pressure = 50

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 actuels
mount | 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 modification
cd /etc
sudo cp fstab fstab.bak
# Modifier le fichier fstab
sudo vim /etc/fstab

Ajoutez la ligne suivante à la fin du fichier :

# DURCISSEMENT DE LA MEMOIRE PARTAGEE
none /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0

Cette configuration :

  • noexec : Empêche l’exécution de binaires dans la zone de mémoire partagée
  • nosuid : Bloque l’élévation de privilèges via les bits setuid/setgid
  • nodev : Interdit la création de fichiers de périphérique dans la mémoire partagée

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ètres
sudo mount -o remount /dev/shm
# Vérifier les nouveaux paramètres
mount | grep /dev/shm

Sortie 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.

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 GRUB
sudo nano /etc/default/grub

Modifiez 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 GRUB
sudo update-grub
# Redémarrer le système
sudo reboot

6.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 sysctl
sudo vim /etc/sysctl.d/99-sysctl.conf

Ajoutez les lignes suivantes pour désactiver IPv6 :

# Désactiver IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

Appliquez les modifications sans redémarrage :

# Recharger la configuration sysctl
sudo sysctl -p

6.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 IPv6
ip a | grep inet6

Si 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 sysctl
cd /etc/sysctl.d/
# Créer ou modifier le fichier de surcharges personnalisées
sudo vim custom_overrides.conf

Ajoutez les directives de durcissement réseau suivantes :

# Protection contre l'usurpation d'IP
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
# Protection contre les inondations SYN
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5
# Routage des paquets source
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0
# Augmenter le nombre de ports utilisables
net.ipv4.ip_local_port_range = 1024 65535
# Augmenter les descripteurs de fichiers et restreindre les core dumps
fs.file-max = 2097152
fs.suid_dumpable = 0
# Nombre de connexions entrantes / file d'attente
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 262144
# Augmenter les tampons mémoire maximum
net.core.optmem_max = 25165824
# Tailles des tampons d'envoi/réception
net.core.rmem_default = 31457280
net.core.rmem_max = 67108864
net.core.wmem_default = 31457280
net.core.wmem_max = 67108864

6.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 = 1 active 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 = 1 protè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 = 2048 augmente la file d’attente SYN pour gérer plus de demandes de connexion.
    • tcp_synack_retries = 2 et tcp_syn_retries = 5 optimisent l’établissement des connexions TCP.
  • Routage des paquets source :

    • La désactivation de accept_source_route empêche les attaquants de spécifier la route que les paquets empruntent à travers le réseau.
  • Ports utilisables :

    • ip_local_port_range = 1024 65535 augmente la plage de ports locaux disponibles pour les connexions sortantes.
  • Descripteurs de fichiers et core dumps :

    • fs.file-max = 2097152 augmente le nombre maximum de descripteurs de fichiers.
    • fs.suid_dumpable = 0 empêche les programmes setuid de créer des core dumps, qui pourraient exposer des informations sensibles.
  • Gestion des connexions :

    • somaxconn = 65535 augmente le nombre maximum de connexions en attente.
    • netdev_max_backlog = 262144 augmente la longueur maximale de la file d’entrée du processeur.
  • Tampons mémoire et tampons de socket :

    • Les paramètres optmem_max, rmem_* et wmem_* optimisent l’allocation mémoire pour les opérations réseau.

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 modifications
sudo reboot

Aprè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 = 25165824

Vous 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.

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 disponibles
sudo sysctl net.ipv4.tcp_available_congestion_control
# Vérifier l'algorithme actuellement actif
sudo sysctl net.ipv4.tcp_congestion_control

Pour activer l’algorithme de contrôle de congestion BBR :

# Charger le module BBR
sudo modprobe tcp_bbr
# S'assurer que BBR se charge au démarrage
sudo bash -c 'echo "tcp_bbr" > /etc/modules-load.d/bbr.conf'
# Vérifier que BBR est maintenant disponible
sudo sysctl net.ipv4.tcp_available_congestion_control

Modifiez le fichier de configuration des surcharges personnalisées :

# Modifier le fichier de configuration sysctl
sudo vim /etc/sysctl.d/custom_overrides.conf

Ajoutez les lignes suivantes pour définir BBR comme algorithme de contrôle de congestion par défaut :

# Activer l'algorithme BBR
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq

L’ordonnanceur de paquets fq (Fair Queuing) fonctionne bien avec BBR pour réduire le bufferbloat et améliorer la latence.

Après avoir enregistré les modifications, vous pouvez les appliquer immédiatement et vérifier :

# Appliquer les modifications
sudo sysctl -p /etc/sysctl.d/custom_overrides.conf
# Confirmer que BBR est maintenant l'algorithme actif
sudo sysctl net.ipv4.tcp_congestion_control

Sortie attendue :

net.ipv4.tcp_congestion_control = bbr

6.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 lisibles
df -h
# Afficher les options de montage détaillées
cat /proc/mounts

Exemple de sortie de /proc/mounts :

/dev/vda1 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0

ou

/dev/sda1 / ext4 rw,relatime,discard,errors=remount-ro,commit=30 0 0

Notez 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 fichiers
sudo vim /etc/fstab

Trouvez 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 1

Après (exemple) :

UUID=8ce122bd-f39c-45ae-b129-9650cfc67567 / ext4 errors=remount-ro,noatime 0 1

Si 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 0

6.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 options
sudo mount -o remount /
# Vérifier les modifications
cat /proc/mounts

Sortie attendue (notez que l’option noatime est maintenant présente) :

/dev/vda1 / ext4 rw,noatime,errors=remount-ro,data=ordered 0 0

Cela confirme que le système de fichiers est maintenant monté avec l’option noatime, ce qui améliorera les performances d’E/S disque.

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 -Sn

Les 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.d
cd /etc/security/limits.d/
# Créer ou modifier le fichier de surcharges personnalisées
sudo vim custom_overrides.conf

Ajoutez la configuration suivante pour augmenter les limites :

# <domain> <type> <item> <value>
* soft nofile 120000
* hard nofile 120000
root soft nofile 120000
root hard nofile 120000

Cette 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

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-session
sudo bash -c 'echo "session required pam_limits.so" >> /etc/pam.d/common-session'
# Ajouter pam_limits.so à common-session-noninteractive
sudo bash -c 'echo "session required pam_limits.so" >> /etc/pam.d/common-session-noninteractive'

Vous pouvez également modifier ces fichiers directement :

# Modifier common-session
sudo vim /etc/pam.d/common-session
# Modifier common-session-noninteractive
sudo vim /etc/pam.d/common-session-noninteractive

Ajoutez la ligne suivante à chaque fichier si elle n’est pas déjà présente :

session required pam_limits.so

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 stricte
ulimit -Hn
# Vérifier la nouvelle limite souple
ulimit -Sn

La sortie devrait afficher les nouvelles limites (120000) que vous avez configurées.