Aller au contenu

ANSSI-BP-028 : guide pratique de durcissement Linux

Mise à jour :

À qui s’adresse ce guide

Ce guide est conçu pour toute personne souhaitant sécuriser un serveur Linux, quel que soit son niveau technique :

  • Débutants : vous découvrirez ce qu’est le durcissement et pourquoi c’est important
  • Administrateurs : vous trouverez des commandes concrètes à appliquer
  • RSSI et auditeurs : vous disposerez d’un cadre de conformité documenté

Qu’est-ce que le durcissement

Voir aussi : Introduction au durcissement des serveurs Linux

Le problème : Linux n’est pas sécurisé par défaut

Quand vous installez un serveur Linux (Debian, Ubuntu, RHEL…), le système est configuré pour fonctionner facilement, pas pour être sécurisé. Par défaut :

  • Des services inutiles sont activés
  • Des ports réseau sont ouverts
  • Les mots de passe peuvent être faibles
  • Les journaux de connexion sont basiques
  • N’importe quel utilisateur peut lire certaines informations sensibles

C’est comme emménager dans une maison avec les fenêtres ouvertes et les clés sous le paillasson.

La solution : le durcissement

Durcir un système, c’est le configurer pour :

  • Fermer ce qui n’est pas nécessaire (ports, services, comptes)
  • Restreindre les accès (permissions, droits)
  • Surveiller l’activité (journaux, alertes)
  • Protéger le démarrage et le noyau

Le guide ANSSI-BP-028

L’ANSSI (Agence Nationale de la Sécurité des Systèmes d’Information) est l’autorité française en cybersécurité. Elle publie des guides de bonnes pratiques dont le BP-028 : “Recommandations de configuration d’un système GNU/Linux”.

Ce guide est :

  • Gratuit et téléchargeable sur cyber.gouv.fr
  • En français (une version anglaise existe)
  • Régulièrement mis à jour (version 2.0 depuis octobre 2022)
  • Reconnu par les professionnels de la sécurité

Les 4 niveaux de durcissement

Le guide ANSSI propose 4 niveaux progressifs. Vous n’êtes pas obligé de tout appliquer : choisissez le niveau adapté à votre situation.

Comprendre les niveaux

NiveauNomPour quiEffort
MMinimalTous les serveurs, même internesFaible
IIntermédiaireServeurs en productionMoyen
RRenforcéServeurs exposés sur InternetImportant
EÉlevéInfrastructures critiques, données sensiblesExpert

Quel niveau choisir

Appliquez ce niveau si :

  • C’est votre premier durcissement
  • Serveur de test ou développement
  • Serveur interne isolé

Temps estimé : 1-2 heures

Comment lire une recommandation ANSSI

Chaque recommandation du guide officiel suit le même format. Voici comment la décrypter :

Anatomie d’une recommandation

R8 M I R E Mises à jour régulières
Il est recommandé d'avoir une procédure de mise à jour de sécurité
régulière et réactive.

Décomposons :

ÉlémentSignification
R8Numéro de la recommandation (R1 à R80+)
M I R ENiveaux concernés (ici : tous les niveaux)
Titre”Mises à jour régulières”
DescriptionLe texte explicatif qui suit

Les lettres de niveau expliquées

R3 . . R E Principe de moindre privilège

Ici, les points . signifient que la recommandation ne s’applique pas aux niveaux M et I. Elle ne concerne que les niveaux R (Renforcé) et E (Élevé).

NotationSignification
M I R ES’applique à tous les niveaux
. I R ES’applique à partir du niveau Intermédiaire
. . R ES’applique à partir du niveau Renforcé
. . . ES’applique uniquement au niveau Élevé

Exemple pratique

Imaginons que vous souhaitez durcir un serveur web en production. Vous visez le niveau I (Intermédiaire).

Vous devez appliquer :

  • Toutes les recommandations marquées M (Minimal)
  • Toutes les recommandations marquées I (Intermédiaire)

Vous pouvez ignorer (pour l’instant) :

  • Les recommandations marquées uniquement R ou E

Les 3 principes fondamentaux

Avant de plonger dans les recommandations techniques, comprenez ces 3 principes qui guident tout le durcissement. Voir aussi : Principes de sécurité.

1. Minimisation

“N’installez que ce dont vous avez besoin”

Chaque programme installé est une porte d’entrée potentielle. Moins il y a de composants, moins il y a de risques. Consultez notre guide dédié : Minimisation de la surface d’attaque.

Exemples concrets :

  • Pas besoin d’interface graphique sur un serveur
  • Désinstallez les compilateurs si vous ne compilez pas
  • Supprimez les services comme Telnet, FTP si vous ne les utilisez pas

2. Moindre privilège

“Donnez le minimum de droits nécessaires”

Un utilisateur ou un programme ne doit avoir accès qu’à ce dont il a strictement besoin. Ce principe est détaillé dans notre guide Moindre privilège.

Exemples concrets :

  • L’application web n’a pas besoin d’être root
  • Le développeur n’a pas besoin d’accès sudo sur tous les serveurs
  • Le script de backup ne doit pas pouvoir modifier les fichiers système

3. Défense en profondeur

“Multipliez les barrières de sécurité”

Si une protection échoue, une autre doit prendre le relais.

Exemples concrets :

  • Pare-feu + configuration SSH restrictive + clés SSH
  • Mots de passe forts + limitation des tentatives + journalisation
  • Chiffrement réseau + chiffrement disque + permissions fichiers

Mettre en œuvre le durcissement

Étape 1 : auditer l’état actuel

Avant de modifier quoi que ce soit, mesurez l’état de sécurité actuel de votre système avec Lynis.

  1. Installer Lynis (outil d’audit gratuit)

    Terminal window
    # Debian/Ubuntu
    sudo apt update && sudo apt install lynis
    # RHEL/CentOS/Rocky
    sudo dnf install lynis
  2. Lancer un audit complet

    Terminal window
    sudo lynis audit system
  3. Noter votre score initial

    À la fin de l’audit, Lynis affiche un score sur 100. Notez-le, c’est votre point de départ.

  4. Consulter le rapport

    Terminal window
    cat /var/log/lynis-report.dat

Étape 2 : appliquer les recommandations niveau M

Commencez par les recommandations Minimal (obligatoires pour tous).

2.1 Mises à jour de sécurité (R8)

Terminal window
# Debian/Ubuntu
sudo apt update && sudo apt upgrade -y
# RHEL/CentOS
sudo dnf update -y

Automatisez les mises à jour de sécurité :

Terminal window
# Debian/Ubuntu - activer les mises à jour automatiques
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades

2.2 Protection mémoire ASLR (R46)

Vérifiez que l’ASLR est activé :

Terminal window
cat /proc/sys/kernel/randomize_va_space

Le résultat doit être 2. Si ce n’est pas le cas :

Terminal window
# Application immédiate
sudo sysctl -w kernel.randomize_va_space=2
# Persistance après redémarrage
echo "kernel.randomize_va_space = 2" | sudo tee -a /etc/sysctl.conf

2.3 Désactiver les core dumps (R48)

Les core dumps peuvent révéler des informations sensibles :

Terminal window
# Vérification
cat /proc/sys/fs/suid_dumpable
# Correction si nécessaire (doit être 0)
sudo sysctl -w fs.suid_dumpable=0
echo "fs.suid_dumpable = 0" | sudo tee -a /etc/sysctl.conf

2.4 Mot de passe root robuste (R18)

Changez le mot de passe root avec un mot de passe fort :

Terminal window
sudo passwd root

Critères d’un mot de passe robuste :

  • Minimum 15 caractères
  • Majuscules, minuscules, chiffres, caractères spéciaux
  • Unique (jamais utilisé ailleurs)
  • maximum de 4 caractères de la meme catégorie consécutifs

2.5 Dépôts officiels uniquement (R15)

Vérifiez que vous n’utilisez que des dépôts officiels :

Terminal window
# Debian/Ubuntu
cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/

Supprimez tout dépôt tiers non indispensable.

2.6 Supprimer les services inutiles (R1, R35)

Listez les services actifs :

Terminal window
systemctl list-units --type=service --state=running

Désactivez ceux dont vous n’avez pas besoin :

Terminal window
# Exemple : désactiver le serveur Avahi (mDNS)
sudo systemctl stop avahi-daemon
sudo systemctl disable avahi-daemon
# Exemple : désactiver CUPS (impression) si pas nécessaire
sudo systemctl stop cups
sudo systemctl disable cups

Étape 3 : appliquer les recommandations niveau I

Une fois le niveau M appliqué, passez au niveau Intermédiaire.

3.1 Paramètres sysctl réseau (R22)

Créez un fichier de configuration sécurisée :

Terminal window
sudo tee /etc/sysctl.d/99-hardening.conf << 'EOF'
# Désactiver le routage IP
net.ipv4.ip_forward = 0
# Filtrage par chemin inverse (anti-spoofing)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Ignorer les redirections ICMP
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
# Ne pas envoyer de redirections ICMP
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Refuser le source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Activer les SYN cookies (protection DDoS)
net.ipv4.tcp_syncookies = 1
# Journaliser les paquets suspects
net.ipv4.conf.all.log_martians = 1
EOF

Appliquez les changements :

Terminal window
sudo sysctl --system

3.2 Paramètres sysctl système (R23)

Ajoutez ces paramètres au fichier précédent :

Terminal window
sudo tee -a /etc/sysctl.d/99-hardening.conf << 'EOF'
# Masquer les adresses kernel
kernel.kptr_restrict = 2
# Restreindre l'accès à dmesg
kernel.dmesg_restrict = 1
# Protéger les liens symboliques
fs.protected_symlinks = 1
fs.protected_hardlinks = 1
# Désactiver les SysReq magiques
kernel.sysrq = 0
EOF
sudo sysctl --system

3.3 Désactiver IPv6 si non utilisé (R52)

Si vous n’utilisez pas IPv6 :

Terminal window
sudo tee -a /etc/sysctl.d/99-hardening.conf << 'EOF'
# Désactiver IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
EOF
sudo sysctl --system

3.4 Permissions des fichiers sensibles (R31)

Terminal window
# /etc/shadow ne doit être lisible que par root
sudo chmod 600 /etc/shadow
sudo chown root:root /etc/shadow
# Pareil pour les clés SSH
sudo chmod 600 /etc/ssh/sshd_config
sudo chmod 700 /etc/ssh

3.5 Configurer sudo correctement (R19, R41)

La configuration de sudo s’appuie sur PAM pour l’authentification. Éditez la configuration sudo :

Terminal window
sudo visudo

Bonnes pratiques :

  • Évitez NOPASSWD sauf nécessité absolue
  • Utilisez des groupes plutôt que des utilisateurs individuels
  • Limitez les commandes autorisées

Exemple de configuration restrictive :

# Groupe admin peut utiliser sudo avec mot de passe
%admin ALL=(ALL) ALL
# Logs détaillés
Defaults logfile=/var/log/sudo.log
Defaults log_input, log_output

3.6 Configurer un pare-feu (R44)

Terminal window
# Installer et activer UFW
sudo apt install ufw
# Règle par défaut : bloquer tout
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Autoriser SSH (ajustez le port si nécessaire)
sudo ufw allow 22/tcp
# Activer le pare-feu
sudo ufw enable
# Vérifier le statut
sudo ufw status verbose

Étape 4 : vérifier le durcissement

Après avoir appliqué les recommandations, relancez un audit :

Terminal window
sudo lynis audit system

Comparez le nouveau score avec le score initial. Vous devriez constater une amélioration significative.

Tableau récapitulatif des recommandations

Ce tableau présente les principales recommandations avec leur niveau et la commande de vérification.

Niveau M (Minimal) - Obligatoire

CodeRecommandationVérification
R1Services minimauxsystemctl list-units --type=service
R8Mises à jourapt list --upgradable ou dnf check-update
R15Dépôts officielscat /etc/apt/sources.list
R18Mot de passe rootPolitique interne
R26Comptes inutiliséscat /etc/passwd
R30Umask restrictifumask (doit afficher 027 ou 077)
R35Services réseauss -tlnp
R46ASLR activécat /proc/sys/kernel/randomize_va_space
R48Core dumps désactivéscat /proc/sys/fs/suid_dumpable

Niveau I (Intermédiaire) - Recommandé en production

CodeRecommandationVérification
R2Config minimaleAudit manuel des services
R9Config BIOS/UEFIVérification physique
R10Architecture 64 bitsuname -m (doit afficher x86_64)
R12Partitionnementcat /etc/fstab
R14Paquets minimauxdpkg -l ou rpm -qa
R19Imputabilité (sudo)cat /etc/sudoers
R21Services exposés durcis (SSH)Configuration par service
R22sysctl réseausysctl -a | grep -E "rp_filter|redirect"
R23sysctl systèmesysctl -a | grep -E "kptr_restrict|dmesg"
R27Expiration sessionscat /etc/profile (TMOUT)
R28Configuration PAMcat /etc/pam.d/common-*
R31Fichiers sensiblesls -la /etc/shadow /etc/passwd
R32setuid/setgidfind / -perm /6000 -type f 2>/dev/null
R34Sticky bitfind / -perm -1000 -type d 2>/dev/null
R36Configuration syslogcat /etc/rsyslog.conf
R41Configuration sudosudo -l
R44Pare-feu entrantufw status ou firewall-cmd --list-all
R47Masquage kernelcat /proc/sys/kernel/kptr_restrict
R49BPF restreintcat /proc/sys/kernel/unprivileged_bpf_disabled
R50ptrace restreintcat /proc/sys/kernel/yama/ptrace_scope
R51Liens protégéscat /proc/sys/fs/protected_*
R52IPv6 désactivécat /proc/sys/net/ipv6/conf/all/disable_ipv6

Niveau R (Renforcé) - Serveurs exposés

CodeRecommandationVérification
R3Moindre privilègeAudit des droits
R6CloisonnementArchitecture système
R7Journalisation externeConfig syslog
R13/boot restreintls -la /boot
R16Paquets durcisVérification source
R17Mot de passe GRUBConfig GRUB
R20Secrets à l’installProcédure d’install
R24Modules kernelcat /proc/sys/kernel/modules_disabled
R25Yama ptracecat /proc/sys/kernel/yama/ptrace_scope
R33Fichiers orphelinsfind / -nouser -o -nogroup 2>/dev/null
R37Déport journauxConfig syslog distant
R38auditdsystemctl status auditd
R39AIDE/surveillance FSaide --check
R40chroot servicesConfiguration service
R45Filtrage sortantRègles pare-feu
R53Options GRUBcat /etc/default/grub

Niveau E (Élevé) - Environnements critiques

CodeRecommandationVérification
R4MAC (SELinux/AppArmor)getenforce ou aa-status
R11IOMMUdmesg | grep -i iommu
R42AppArmoraa-status
R43SELinuxgetenforce
R54Compilation kernelConfig noyau
R55UEFI Secure Bootmokutil --sb-state

Outils pour vous aider

Lynis : audit rapide

Lynis analyse votre système et liste les points à améliorer.

Terminal window
# Installation
sudo apt install lynis # Debian/Ubuntu
sudo dnf install lynis # RHEL/CentOS
# Audit complet
sudo lynis audit system
# Audit avec profil personnalisé
sudo lynis audit system --profile /etc/lynis/custom.prf

Guide complet Lynis

OpenSCAP : conformité ANSSI

OpenSCAP vérifie la conformité par rapport au profil ANSSI-BP-028.

Terminal window
# Installation
sudo apt install openscap-utils scap-security-guide
# Audit avec profil ANSSI
sudo oscap xccdf eval \
--profile xccdf_org.ssgproject.content_profile_anssi_bp28_enhanced \
--results results.xml \
--report rapport.html \
/usr/share/xml/scap/ssg/content/ssg-debian12-ds.xml

Le rapport HTML généré liste chaque contrôle avec son statut (PASS/FAIL).

Guide complet OpenSCAP

Ansible : automatisation

Pour appliquer le durcissement à grande échelle, utilisez Ansible :

- name: Durcissement niveau I
hosts: all
become: yes
tasks:
- name: Configurer sysctl
sysctl:
name: "{{ item.key }}"
value: "{{ item.value }}"
state: present
reload: yes
loop:
- { key: 'kernel.randomize_va_space', value: '2' }
- { key: 'kernel.kptr_restrict', value: '2' }
- { key: 'fs.suid_dumpable', value: '0' }
- { key: 'net.ipv4.conf.all.rp_filter', value: '1' }

Maintenir le durcissement

Le durcissement n’est pas une action ponctuelle. Pour rester sécurisé :

Audits réguliers

Planifiez un audit automatique chaque semaine :

Terminal window
# Ajouter au crontab
sudo crontab -e
# Audit Lynis hebdomadaire
@weekly /usr/sbin/lynis audit system --cronjob > /var/log/lynis-weekly.log

Surveillance des dérives

Comparez les scores au fil du temps :

DateScore LynisRemarque
01/12/202582Après durcissement initial
08/12/202582Stable
15/12/202578Baisse → investiguer

Mises à jour du guide

L’ANSSI met à jour son guide régulièrement. Consultez cyber.gouv.fr pour les nouvelles versions.

Conclusion

Le durcissement d’un système Linux n’est pas une option, c’est une nécessité. Avec le guide ANSSI-BP-028, vous disposez d’un référentiel clair, structuré et adapté au contexte français.

Ce qu’il faut retenir :

  • Commencez par le niveau M : c’est accessible à tous et apporte déjà une protection significative
  • Utilisez Lynis pour mesurer vos progrès et identifier les points à améliorer
  • Le durcissement est un processus continu : planifiez des audits réguliers
  • Automatisez avec Ansible pour garantir la cohérence sur l’ensemble de votre parc

Ne cherchez pas la perfection du premier coup. Chaque recommandation appliquée réduit votre surface d’attaque. Progressez à votre rythme, documentez vos choix, et n’hésitez pas à revenir sur ce guide au fil de votre montée en compétences.

Votre prochain pas : lancez un audit Lynis sur votre serveur et notez votre score. C’est le point de départ de votre parcours vers un système durci.

Pour aller plus loin

Lynis

Audit de sécurité automatisé, profils personnalisés, intégration CI/CD.

Lire le guide →

Durcissement SSH

Configuration sécurisée, algorithmes, clés, CVE récentes.

Lire le guide →

CIS Benchmarks

Référentiel complémentaire, niveaux Level 1/2, automatisation.

Lire le guide →

Contrôle d’accès avancé

  • SELinux : pour RHEL, CentOS, Fedora
  • AppArmor : pour Debian, Ubuntu
  • PAM : authentification et politiques

Ressources officielles