Lynis
Audit de sécurité automatisé, profils personnalisés, intégration CI/CD.
Mise à jour :

Ce guide est conçu pour toute personne souhaitant sécuriser un serveur Linux, quel que soit son niveau technique :
Voir aussi : Introduction au durcissement des serveurs Linux
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 :
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 :
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 :
Le guide ANSSI propose 4 niveaux progressifs. Vous n’êtes pas obligé de tout appliquer : choisissez le niveau adapté à votre situation.
| Niveau | Nom | Pour qui | Effort |
|---|---|---|---|
| M | Minimal | Tous les serveurs, même internes | Faible |
| I | Intermédiaire | Serveurs en production | Moyen |
| R | Renforcé | Serveurs exposés sur Internet | Important |
| E | Élevé | Infrastructures critiques, données sensibles | Expert |
Appliquez ce niveau si :
Temps estimé : 1-2 heures
Appliquez ce niveau si :
Temps estimé : 2-4 heures (après niveau M)
Appliquez ce niveau si :
Temps estimé : 4-8 heures (après niveau I)
Appliquez ce niveau si :
Temps estimé : 1-2 jours (après niveau R)
Nécessite une équipe expérimentée
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ément | Signification |
|---|---|
| R8 | Numéro de la recommandation (R1 à R80+) |
| M I R E | Niveaux concernés (ici : tous les niveaux) |
| Titre | ”Mises à jour régulières” |
| Description | Le texte explicatif qui suit |
R3 . . R E Principe de moindre privilègeIci, 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é).
| Notation | Signification |
|---|---|
M I R E | S’applique à tous les niveaux |
. I R E | S’applique à partir du niveau Intermédiaire |
. . R E | S’applique à partir du niveau Renforcé |
. . . E | S’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 :
Vous pouvez ignorer (pour l’instant) :
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 :
“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 :
“Multipliez les barrières de sécurité”
Si une protection échoue, une autre doit prendre le relais.
Exemples concrets :
Avant de modifier quoi que ce soit, mesurez l’état de sécurité actuel de votre système avec Lynis.
Installer Lynis (outil d’audit gratuit)
# Debian/Ubuntusudo apt update && sudo apt install lynis
# RHEL/CentOS/Rockysudo dnf install lynisLancer un audit complet
sudo lynis audit systemNoter votre score initial
À la fin de l’audit, Lynis affiche un score sur 100. Notez-le, c’est votre point de départ.
Consulter le rapport
cat /var/log/lynis-report.datCommencez par les recommandations Minimal (obligatoires pour tous).
# Debian/Ubuntusudo apt update && sudo apt upgrade -y
# RHEL/CentOSsudo dnf update -yAutomatisez les mises à jour de sécurité :
# Debian/Ubuntu - activer les mises à jour automatiquessudo apt install unattended-upgradessudo dpkg-reconfigure unattended-upgradesVérifiez que l’ASLR est activé :
cat /proc/sys/kernel/randomize_va_spaceLe résultat doit être 2. Si ce n’est pas le cas :
# Application immédiatesudo sysctl -w kernel.randomize_va_space=2
# Persistance après redémarrageecho "kernel.randomize_va_space = 2" | sudo tee -a /etc/sysctl.confLes core dumps peuvent révéler des informations sensibles :
# Vérificationcat /proc/sys/fs/suid_dumpable
# Correction si nécessaire (doit être 0)sudo sysctl -w fs.suid_dumpable=0echo "fs.suid_dumpable = 0" | sudo tee -a /etc/sysctl.confChangez le mot de passe root avec un mot de passe fort :
sudo passwd rootCritères d’un mot de passe robuste :
Vérifiez que vous n’utilisez que des dépôts officiels :
# Debian/Ubuntucat /etc/apt/sources.listls /etc/apt/sources.list.d/Supprimez tout dépôt tiers non indispensable.
Listez les services actifs :
systemctl list-units --type=service --state=runningDésactivez ceux dont vous n’avez pas besoin :
# Exemple : désactiver le serveur Avahi (mDNS)sudo systemctl stop avahi-daemonsudo systemctl disable avahi-daemon
# Exemple : désactiver CUPS (impression) si pas nécessairesudo systemctl stop cupssudo systemctl disable cupsUne fois le niveau M appliqué, passez au niveau Intermédiaire.
Créez un fichier de configuration sécurisée :
sudo tee /etc/sysctl.d/99-hardening.conf << 'EOF'# Désactiver le routage IPnet.ipv4.ip_forward = 0
# Filtrage par chemin inverse (anti-spoofing)net.ipv4.conf.all.rp_filter = 1net.ipv4.conf.default.rp_filter = 1
# Ignorer les redirections ICMPnet.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.default.accept_redirects = 0net.ipv4.conf.all.secure_redirects = 0net.ipv4.conf.default.secure_redirects = 0
# Ne pas envoyer de redirections ICMPnet.ipv4.conf.all.send_redirects = 0net.ipv4.conf.default.send_redirects = 0
# Refuser le source routingnet.ipv4.conf.all.accept_source_route = 0net.ipv4.conf.default.accept_source_route = 0
# Activer les SYN cookies (protection DDoS)net.ipv4.tcp_syncookies = 1
# Journaliser les paquets suspectsnet.ipv4.conf.all.log_martians = 1EOFAppliquez les changements :
sudo sysctl --systemAjoutez ces paramètres au fichier précédent :
sudo tee -a /etc/sysctl.d/99-hardening.conf << 'EOF'
# Masquer les adresses kernelkernel.kptr_restrict = 2
# Restreindre l'accès à dmesgkernel.dmesg_restrict = 1
# Protéger les liens symboliquesfs.protected_symlinks = 1fs.protected_hardlinks = 1
# Désactiver les SysReq magiqueskernel.sysrq = 0EOF
sudo sysctl --systemSi vous n’utilisez pas IPv6 :
sudo tee -a /etc/sysctl.d/99-hardening.conf << 'EOF'
# Désactiver IPv6net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1EOF
sudo sysctl --system# /etc/shadow ne doit être lisible que par rootsudo chmod 600 /etc/shadowsudo chown root:root /etc/shadow
# Pareil pour les clés SSHsudo chmod 600 /etc/ssh/sshd_configsudo chmod 700 /etc/sshLa configuration de sudo s’appuie sur PAM pour l’authentification. Éditez la configuration sudo :
sudo visudoBonnes pratiques :
NOPASSWD sauf nécessité absolueExemple de configuration restrictive :
# Groupe admin peut utiliser sudo avec mot de passe%admin ALL=(ALL) ALL
# Logs détaillésDefaults logfile=/var/log/sudo.logDefaults log_input, log_output# Installer et activer UFWsudo apt install ufw
# Règle par défaut : bloquer toutsudo ufw default deny incomingsudo ufw default allow outgoing
# Autoriser SSH (ajustez le port si nécessaire)sudo ufw allow 22/tcp
# Activer le pare-feusudo ufw enable
# Vérifier le statutsudo ufw status verbose# Vérifier que firewalld est actifsudo systemctl enable firewalldsudo systemctl start firewalld
# Voir la zone par défautsudo firewall-cmd --get-default-zone
# Lister les services autoriséssudo firewall-cmd --list-all
# Autoriser uniquement SSHsudo firewall-cmd --permanent --add-service=sshsudo firewall-cmd --reloadAprès avoir appliqué les recommandations, relancez un audit :
sudo lynis audit systemComparez 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.
| Code | Recommandation | Vérification |
|---|---|---|
| R1 | Services minimaux | systemctl list-units --type=service |
| R8 | Mises à jour | apt list --upgradable ou dnf check-update |
| R15 | Dépôts officiels | cat /etc/apt/sources.list |
| R18 | Mot de passe root | Politique interne |
| R26 | Comptes inutilisés | cat /etc/passwd |
| R30 | Umask restrictif | umask (doit afficher 027 ou 077) |
| R35 | Services réseau | ss -tlnp |
| R46 | ASLR activé | cat /proc/sys/kernel/randomize_va_space |
| R48 | Core dumps désactivés | cat /proc/sys/fs/suid_dumpable |
| Code | Recommandation | Vérification |
|---|---|---|
| R2 | Config minimale | Audit manuel des services |
| R9 | Config BIOS/UEFI | Vérification physique |
| R10 | Architecture 64 bits | uname -m (doit afficher x86_64) |
| R12 | Partitionnement | cat /etc/fstab |
| R14 | Paquets minimaux | dpkg -l ou rpm -qa |
| R19 | Imputabilité (sudo) | cat /etc/sudoers |
| R21 | Services exposés durcis (SSH) | Configuration par service |
| R22 | sysctl réseau | sysctl -a | grep -E "rp_filter|redirect" |
| R23 | sysctl système | sysctl -a | grep -E "kptr_restrict|dmesg" |
| R27 | Expiration sessions | cat /etc/profile (TMOUT) |
| R28 | Configuration PAM | cat /etc/pam.d/common-* |
| R31 | Fichiers sensibles | ls -la /etc/shadow /etc/passwd |
| R32 | setuid/setgid | find / -perm /6000 -type f 2>/dev/null |
| R34 | Sticky bit | find / -perm -1000 -type d 2>/dev/null |
| R36 | Configuration syslog | cat /etc/rsyslog.conf |
| R41 | Configuration sudo | sudo -l |
| R44 | Pare-feu entrant | ufw status ou firewall-cmd --list-all |
| R47 | Masquage kernel | cat /proc/sys/kernel/kptr_restrict |
| R49 | BPF restreint | cat /proc/sys/kernel/unprivileged_bpf_disabled |
| R50 | ptrace restreint | cat /proc/sys/kernel/yama/ptrace_scope |
| R51 | Liens protégés | cat /proc/sys/fs/protected_* |
| R52 | IPv6 désactivé | cat /proc/sys/net/ipv6/conf/all/disable_ipv6 |
| Code | Recommandation | Vérification |
|---|---|---|
| R3 | Moindre privilège | Audit des droits |
| R6 | Cloisonnement | Architecture système |
| R7 | Journalisation externe | Config syslog |
| R13 | /boot restreint | ls -la /boot |
| R16 | Paquets durcis | Vérification source |
| R17 | Mot de passe GRUB | Config GRUB |
| R20 | Secrets à l’install | Procédure d’install |
| R24 | Modules kernel | cat /proc/sys/kernel/modules_disabled |
| R25 | Yama ptrace | cat /proc/sys/kernel/yama/ptrace_scope |
| R33 | Fichiers orphelins | find / -nouser -o -nogroup 2>/dev/null |
| R37 | Déport journaux | Config syslog distant |
| R38 | auditd | systemctl status auditd |
| R39 | AIDE/surveillance FS | aide --check |
| R40 | chroot services | Configuration service |
| R45 | Filtrage sortant | Règles pare-feu |
| R53 | Options GRUB | cat /etc/default/grub |
| Code | Recommandation | Vérification |
|---|---|---|
| R4 | MAC (SELinux/AppArmor) | getenforce ou aa-status |
| R11 | IOMMU | dmesg | grep -i iommu |
| R42 | AppArmor | aa-status |
| R43 | SELinux | getenforce |
| R54 | Compilation kernel | Config noyau |
| R55 | UEFI Secure Boot | mokutil --sb-state |
Lynis analyse votre système et liste les points à améliorer.
# Installationsudo apt install lynis # Debian/Ubuntusudo dnf install lynis # RHEL/CentOS
# Audit completsudo lynis audit system
# Audit avec profil personnalisésudo lynis audit system --profile /etc/lynis/custom.prfOpenSCAP vérifie la conformité par rapport au profil ANSSI-BP-028.
# Installationsudo apt install openscap-utils scap-security-guide
# Audit avec profil ANSSIsudo 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.xmlLe rapport HTML généré liste chaque contrôle avec son statut (PASS/FAIL).
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 :
# Ajouter au crontabsudo crontab -e# Audit Lynis hebdomadaire@weekly /usr/sbin/lynis audit system --cronjob > /var/log/lynis-weekly.logComparez les scores au fil du temps :
| Date | Score Lynis | Remarque |
|---|---|---|
| 01/12/2025 | 82 | Après durcissement initial |
| 08/12/2025 | 82 | Stable |
| 15/12/2025 | 78 | Baisse → 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 :
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.
Lynis
Audit de sécurité automatisé, profils personnalisés, intégration CI/CD.
OpenSCAP
Conformité SCAP, profils ANSSI, rapports détaillés.
Durcissement SSH
Configuration sécurisée, algorithmes, clés, CVE récentes.
CIS Benchmarks
Référentiel complémentaire, niveaux Level 1/2, automatisation.