Aller au contenu
Sécurité medium

ANSSI-BP-028 : guide pratique de durcissement Linux

26 min de lecture

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é

Voir aussi : Introduction au durcissement des serveurs Linux

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

Section intitulée « 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.

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

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é

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

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

Appliquez ce niveau si :

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

Temps estimé : 1-2 heures

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

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

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

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

“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

“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

“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

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)

    Fenêtre de terminal
    # Debian/Ubuntu
    sudo apt update && sudo apt install lynis
    # RHEL/CentOS/Rocky
    sudo dnf install lynis
  2. Lancer un audit complet

    Fenêtre de terminal
    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

    Fenêtre de terminal
    cat /var/log/lynis-report.dat

Commencez par les recommandations Minimal (obligatoires pour tous).

Fenêtre de terminal
# Debian/Ubuntu
sudo apt update && sudo apt upgrade -y
# RHEL/CentOS
sudo dnf update -y

Automatisez les mises à jour de sécurité :

Fenêtre de terminal
# Debian/Ubuntu - activer les mises à jour automatiques
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades

Vérifiez que l’ASLR est activé :

Fenêtre de terminal
cat /proc/sys/kernel/randomize_va_space

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

Fenêtre de terminal
# 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

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

Fenêtre de terminal
# 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

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

Fenêtre de terminal
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

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

Fenêtre de terminal
# Debian/Ubuntu
cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/

Supprimez tout dépôt tiers non indispensable.

Listez les services actifs :

Fenêtre de terminal
systemctl list-units --type=service --state=running

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

Fenêtre de terminal
# 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

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

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

Fenêtre de terminal
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 :

Fenêtre de terminal
sudo sysctl --system

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

Fenêtre de terminal
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

Si vous n’utilisez pas IPv6 :

Fenêtre de terminal
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
Fenêtre de terminal
# /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

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

Fenêtre de terminal
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
Fenêtre de terminal
# 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

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

Fenêtre de terminal
sudo lynis audit system

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

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

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

Section intitulée « 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
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
CodeRecommandationVérification
R4MAC (SELinux/AppArmor)getenforce ou aa-status
R11IOMMUdmesg | grep -i iommu
R42AppArmoraa-status
R43SELinuxgetenforce
R54Compilation kernelConfig noyau
R55UEFI Secure Bootmokutil --sb-state

logo rudder

Rudder est une solution de gestion de configuration qui va au-delà de l’audit en proposant l’application automatique des règles de durcissement. Contrairement aux outils d’audit qui détectent les écarts sans les corriger, Rudder détecte et remédie automatiquement toutes les 5 minutes.

La plupart des outils auditent : ils détectent les problèmes, génèrent des rapports, mais c’est à vous de corriger manuellement. Rudder propose deux modes :

ModeComportementCas d’usage
AuditDétecte les écarts sans modifierÉvaluation initiale, préparation d’audit
EnforceDétecte et corrige automatiquementProduction, maintien continu de la conformité

Exemple concret : vous avez configuré kernel.randomize_va_space = 2 dans /etc/sysctl.conf (recommandation R9). Un script ou une mise à jour remet cette valeur à 0.

  • Avec Lynis ou OpenSCAP : le prochain audit détecte l’écart, vous recevez un rapport, vous devez corriger manuellement.
  • Avec Rudder en mode Enforce : l’agent détecte l’écart dans les 5 minutes et rétablit automatiquement kernel.randomize_va_space = 2.

Rudder intègre nativement les CIS Benchmarks (500+ contrôles pour RHEL, Ubuntu, Debian). Les CIS Benchmarks et l’ANSSI-BP-028 partagent de nombreux objectifs communs :

Recommandation ANSSIÉquivalent CISDescription
R9 : ASLR activéCIS 1.5.3kernel.randomize_va_space = 2
R12 : SSH durciCIS 5.2.xMaxAuthTries, PermitRootLogin, Protocol 2
R15 : Services inutiles désactivésCIS 2.xDésactiver telnet, xinetd, avahi, cups
R18 : Journalisation centraliséeCIS 4.2.xConfiguration rsyslog/syslog-ng
R24 : Permissions /etc restrictivesCIS 6.1.xchmod 644 /etc/passwd, 640 /etc/shadow

De nombreux contrôles CIS peuvent être transposés aux exigences ANSSI. Par exemple, les règles SSH (R12) correspondent directement aux contrôles CIS 5.2 (SSH Server Configuration).

L’équipe Rudder travaille actuellement sur une fonctionnalité de rapports ANSSI-BP-028. À terme, Rudder pourra afficher :

  • Le niveau de conformité ANSSI (M, I, R, E)
  • Un score par catégorie de recommandations
  • Le mapping entre les contrôles CIS appliqués et les recommandations ANSSI équivalentes

Cette fonctionnalité permettra aux organisations françaises de démontrer leur conformité aux recommandations de l’ANSSI tout en bénéficiant de la remédiation automatique.

  • Dashboard temps réel : score de conformité par section du benchmark
  • Remédiation automatique : maintien continu de l’état conforme
  • Granularité d’application : modes Audit/Enforce par groupe, système ou section
  • Documentation intégrée : chaque contrôle affiche sa justification
DistributionVersionsBenchmark CIS
Red Hat Enterprise Linux8, 9CIS RHEL 8/9 Benchmark
Ubuntu20.04 LTS, 22.04 LTSCIS Ubuntu Benchmark
Debian11 (Bullseye), 12 (Bookworm)CIS Debian Benchmark

Le plugin Policy and Benchmark Compliance fait partie de l’offre Rudder Enterprise (non disponible dans la version open source). Pour obtenir un devis, contactez l’équipe commerciale Rudder.

Guide complet : Benchmarks CIS avec Rudder

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

Fenêtre de terminal
# 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 vérifie la conformité par rapport au profil ANSSI-BP-028.

Fenêtre de terminal
# 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

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' }

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

Planifiez un audit automatique chaque semaine :

Fenêtre de terminal
# Ajouter au crontab
sudo crontab -e
# Audit Lynis hebdomadaire
@weekly /usr/sbin/lynis audit system --cronjob > /var/log/lynis-weekly.log

Comparez les scores au fil du temps :

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

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

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 ou Rudder pour garantir la cohérence sur l’ensemble de votre parc
  • Les CIS Benchmarks peuvent compléter les recommandations ANSSI : de nombreux contrôles se recoupent

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.

Rudder

Audit et application automatique des règles, transposition CIS vers ANSSI.

Lire le guide →

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 ANSSI, niveaux Level 1/2, automatisation.

Lire le guide →

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