Installation sécurisée d'un serveur Linux
En TSSR, l'installation d'un serveur Linux (CLI) se limitera à un déploiement dans une seule partition.
Dans la pratique professionnelle, c'est strictement interdit !
Il est nécessaire pour la sécurisation des systèmes Linux de pratiquer un cloisonnement strict des différentes parties du système, chacune dans une partition, afin de les isoler les unes des autres.
Ce cloisonnement est mis en place lors de l'installation du système d'exploitation, au moment du partitionnement sur le(s) disque(s).
Il requiert une certaine expérience car la taille de chaque partition est fixe une fois créée.
Il faut donc savoir estimer (et gérer) la croissance ou la taille des services que le service exécutera.
Je ne vous demande donc pas de mettre cela en place, sachez simplement que savoir mettre en place ce cloisonnement est une étape obligatoire en entreprise.
En revanche, pour les AIS, c'est obligatoire ! :-P...
(Et sur montage RAID miroir encrypté pour ne rien arranger !)
1. Cloisonnement et séparation des partitions
L'ANSSI recommande de séparer certaines partitions afin de limiter l'impact en cas de compromission d'un service et de maîtriser l'espace disque occupé. Par exemple :
- / (racine) : Contient le système de base.
- /var : Séparez cette partition pour isoler les fichiers journaux (logs) et les données variables.
En cas de saturation (attaque ou mauvaise gestion des logs), cela n'affectera pas la racine.
- /home : Permet de séparer les données des utilisateurs.
Une compromission d'un compte utilisateur n'affectera pas directement le système.
- /tmp : Répertoire souvent utilisé pour des fichiers temporaires. Le monter avec des options de sécurité (noexec, nosuid) limite l'exécution de code malveillant.
- /usr, /opt : Selon la politique interne, ces répertoires peuvent être séparés pour limiter les effets d'une corruption logicielle.
De plus, l'utilisation d'options de montage telles que noexec, nosuid, nodev sur les partitions non destinées à contenir des exécutables, est recommandée pour réduire la surface d'attaque.
2. Installation minimaliste du système
L'ANSSI préconise d'installer le strict minimum de packages nécessaires au fonctionnement des services prévus. Moins il y a de programmes installés, moins il y a de vulnérabilités potentielles. Cela implique :
- N'installer que les services et dépendances nécessaires.
- Désactiver ou désinstaller les services par défaut inutiles (par exemple, le serveur d'impression si non utilisé, les environnements graphiques sur un serveur purement CLI, etc.).
3. Renforcement de la configuration SSH
Les serveurs Linux sont souvent administrés à distance via SSH. Les bonnes pratiques incluent :
- Désactiver l'accès SSH direct au compte root (PermitRootLogin no dans /etc/ssh/sshd_config).
- N'autoriser que l'authentification par clés publiques (désactiver l'authentification par mot de passe si possible).
- Modifier le port par défaut (en complément d'autres mesures, car cela n'est qu'une mesure cosmétique).
- Utiliser des ciphers et des protocoles de chiffrement robustes (ex : SSHv2, chiffrages forts recommandés).
- Mettre en place les TCP wrappers.
4. Gestion des comptes et droits
- Supprimer ou désactiver tous les comptes par défaut inutiles.
- Appliquer le principe du moindre privilège : chaque utilisateur ou service n'a que les droits nécessaires.
- Utiliser sudo avec parcimonie et gérer précisément les accès dans /etc/sudoers.
5. Renforcement du noyau et des paramètres système
- Activer des mécanismes de confinement tels que SELinux, AppArmor, ou grsecurity (selon la distribution et le contexte).
- Durcir la pile réseau (modifications dans /etc/sysctl.conf), par exemple désactiver le routage IP si inutile, activer la protection contre le SYN flood, etc.
- Mettre en place des mécanismes de limitation des ressources (ulimits).
6. Mise à jour et maintenance régulières
- Mettre en place un processus régulier de mise à jour des paquets et du noyau.
- Surveiller les annonces de sécurité (security advisories) des distributions.
- Utiliser des dépôts officiels et vérifier l'intégrité des packages.
7. Journalisation et supervision
- Configurer la journalisation de manière centralisée et sécurisée (via rsyslog, journald, ou un serveur de log distant).
- Analyser régulièrement les journaux, mettre en place des outils d'IDS/IPS (ex. fail2ban) pour détecter et bloquer les comportements suspects.
8. Sécurisation du pare-feu
- Activer et configurer le pare-feu du système (iptables, nftables, ufw, firewalld) pour n'autoriser que le trafic nécessaire.
- Limiter l'exposition des services, par exemple restreindre SSH à certaines adresses IP si c'est pertinent ou à certains utilisateurs.
9. Utilisation de protocoles et de chiffrement robustes
- Chiffrer les échanges (HTTPS pour les serveurs Web, IMAPS/POP3S pour le mail, etc.).
Les sites web en HTTP ne sont plus d'actualité.
- Vérifier les paramètres cryptographiques (CipherSuites, TLS version) pour respecter les recommandations récentes (comme celles de l'ANSSI sur TLS).
10. Documentation et conformité
- Consulter les guides de l'ANSSI, comme le "Guide d'hygiène informatique", qui propose des recommandations précises et concrètes.
- Se conformer au Référentiel Général de Sécurité (RGS) si nécessaire, et maintenir une documentation claire sur l'architecture, la configuration et les règles internes.
Il est essentiel que vous preniez connaissance des différents guides de bonnes pratiques édictés par l'ANSSI.
Vous serez confronté tôt ou tard, en entreprise, à une mise aux normes.
Consultez notamment les Recommandations pour la protection des systèmes d'information essentiels
Voici enfin la liste de toutes les publications techniques de l'ANSSI