Aller au contenu

Durcissement du système (Hardening)

Cette procédure détaille les mesures techniques appliquées pour sécuriser un serveur Linux de production et atteindre un niveau de conformité élevé.

Fiche technique

  • Cible : Serveur Linux (Production)
  • OS : Debian GNU/Linux (Stable)
  • Objectif : Score d'audit > 74 (Hardened)
  • Dernière MAJ : 30/12/2025

Sécurisation du service SSH

L'objectif est de supprimer les algorithmes cryptographiques obsolètes, de désactiver l'accès au compte root et d'imposer l'authentification par clé publique.

Génération et envoi des clés

Exécutez ces commandes sur le poste d'administration pour générer une paire de clés robuste (Ed25519).

PowerShell
# Génération de la clé
ssh-keygen -t ed25519 -C "admin@posteadmin"

# Envoi de la clé au serveur
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@<IP_SERVEUR> "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Bash
# Génération de la clé
ssh-keygen -t ed25519 -C "admin@posteadmin"

# Envoi de la clé au serveur
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@<IP_SERVEUR>

Configuration du démon SSH

Attention

Avant de redémarrer le service, assurez-vous que votre clé est correctement copiée. Gardez une session active ouverte par sécurité.

Éditez le fichier /etc/ssh/sshd_config pour appliquer la configuration durcie :

/etc/ssh/sshd_config
Port 22
Protocol 2

# Authentification
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# Performance et Sécurité Réseau
AllowTcpForwarding no
X11Forwarding no
AllowAgentForwarding no
TCPKeepAlive no
MaxSessions 2
ClientAliveInterval 300
ClientAliveCountMax 2

# Bannière légale
Banner /etc/issue.net

# Clés d'hôte (Host Keys)
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key

# Algorithmes d'échange de clés (KEX) - Suppression NIST & SHA1
KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com,curve25519-sha256,curve25519-sha256@libssh.org

# Chiffrement (Ciphers) - AEAD uniquement
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com

# Intégrité (MACs) - Mode ETM uniquement
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com

Appliquez les changements :

Bash
sudo systemctl restart ssh


Protection active (Fail2Ban)

Installation d'un système de prévention d'intrusions pour bannir les adresses IP après plusieurs échecs d'authentification.

Installation

Bash
sudo apt install fail2ban -y

Configuration de la prison SSH

Créez le fichier de configuration locale /etc/fail2ban/jail.local :

/etc/fail2ban/jail.local
[sshd]
enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
bantime = 1h

Redémarrez le service :

Bash
sudo systemctl restart fail2ban


Durcissement du Noyau (Kernel)

Modification des paramètres sysctl pour protéger la pile réseau contre le spoofing IP et les paquets malformés.

Créez le fichier /etc/sysctl.d/99-hardened.conf :

/etc/sysctl.d/99-hardened.conf
# Protection IP Spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignorer les redirections ICMP (Anti Man-in-the-Middle)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Logs des paquets martiens (sources impossibles)
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

# Protection SYN Flood
net.ipv4.tcp_syncookies = 1

# Désactiver le routage
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0

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

Appliquez immédiatement les paramètres :

Bash
sudo sysctl -p /etc/sysctl.d/99-hardened.conf


Surveillance et Intégrité

Mise en place des outils de surveillance recommandés par le framework d'audit.

Bash
sudo apt install auditd aide rkhunter apt-listbugs -y

Initialisation

  1. Auditd (Journaux d'audit système) :
    Bash
    sudo systemctl enable auditd --now
    
  2. AIDE (Intégrité des fichiers) :
    Bash
    sudo aideinit
    sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
    

Gestion des utilisateurs

Modification des paramètres par défaut dans /etc/login.defs pour renforcer la sécurité des comptes créés ultérieurement.

Paramètre Valeur par défaut Valeur durcie Description
UMASK 022 027 Restreint la lecture des nouveaux fichiers aux autres utilisateurs.
PASS_MAX_DAYS 99999 90 Impose le renouvellement du mot de passe tous les 90 jours.
PASS_MIN_DAYS 0 1 Empêche le changement immédiat du mot de passe (anti-spam).

Bannière légale

Ajout d'un avertissement juridique dissuasif affiché avant l'authentification.

Fichier : /etc/issue.net

Text Only
********************************************************************
* ACCES RESTREINT / RESTRICTED ACCESS                              *
* Toute tentative d'intrusion sera enregistree et poursuivie.      *
* Disconnect IMMEDIATELY if you are not an authorized user!        *
********************************************************************

Audit et Validation

Validation des mesures appliquées à l'aide d'outils d'audit automatisés.

Audit de la configuration SSH

L'outil ssh-audit permet de vérifier la conformité des algorithmes de chiffrement.

Bash
# Installation
sudo apt install ssh-audit -y

# Exécution locale
ssh-audit 127.0.0.1

Résultat attendu : * Aucun algorithme faible (rouge) ou obsolète (jaune). * Utilisation exclusive de curve25519, chacha20-poly1305 ou aes-gcm.

Audit global (Lynis)

Lynis effectue un scan complet du système (fichiers, kernel, réseau) pour calculer un score de conformité.

Bash
sudo lynis audit system

Résultat obtenu : Hardening Index 74

Ci-dessous le rapport de synthèse après application de la procédure.

Text Only
Lynis security scan details:

  Hardening index : 74 [##############      ]
  Tests performed : 269
  Plugins enabled : 1

  Components:
  - Firewall                [V]
  - Malware scanner         [V]

  Scan mode:
  Normal [V]  Forensics [ ]  Integration [ ]  Pentest [ ]