Étapes clés pour sécuriser un serveur Linux

Sever Linux

Le durcissement d’un serveur Linux consiste à renforcer et à sécuriser un serveur Linux afin de le protéger contre les vulnérabilités et les menaces. Même si la sécurité totale est une course sans fin, cet article présente quelques mesures fondamentales que vous pouvez prendre pour assurer la sécurité de vos serveurs.

Aucun risque de sécurité n’est trop petit pour être pris en compte

Malheureusement, même les plus petites vulnérabilités peuvent se transformer en graves menaces pour la sécurité. Il est important de se rappeler que tout code exécuté sur votre système peut potentiellement contenir des failles permettant à des intrus d’accéder à un shell de commande ou à des utilisateurs légitimes d’élever leur accès pour avoir des droits de superutilisateur. Quel que soit le niveau de risque, il est toujours préférable de traiter les petits risques de sécurité avant qu’ils ne se transforment en menaces de cybersécurité majeures, en suivant un processus de durcissement de serveur. Grâce au durcissement des serveurs Linux, les équipes informatiques peuvent renforcer leurs défenses avant que des problèmes ne surviennent, ce qui permet d’éviter des incidents majeurs. 

Mises à jour du système et correctifs de sécurité

La mise à jour régulière de votre serveur Linux est essentielle au maintien de sa sécurité et de son intégrité, d’autant plus que 57% des compromissions externes proviennent de systèmes qui ne sont pas à jour. Les logiciels et les systèmes d’exploitation sont constamment améliorés et perfectionnés pour remédier aux vulnérabilités et aux points faibles. En appliquant rapidement les mises à jour, vous vous assurez que les failles de sécurité connues sont éliminées, ce qui réduit les cybermenaces. De plus, les mises à jour comprennent souvent des corrections de bugs et des améliorations des performances, ce qui permet d’obtenir un environnement de serveur plus stable et plus efficace. Le fait de ne pas procéder à des mises à jour régulières peut exposer le système à des attaques et compromettre son intégrité.

Utiliser des logiciels obsolètes et avoir des vulnérabilités non corrigées présente des risques importants pour vos serveurs Linux. Les cybercriminels ciblent activement les vulnérabilités connues pour obtenir un accès non autorisé, compromettre des données ou perturber des services. Lorsque des vulnérabilités sont divulguées publiquement, des personnes malveillantes peuvent les exploiter pour compromettre des systèmes qui n’ont pas reçu de mises à jour. Retarder les mises à jour augmente les possibilités pour les attaquants d’exploiter les faiblesses des défenses de vos serveurs, c’est pourquoi la mise à jour régulière une mesure de défense essentielle.

Choisir les bonnes stratégies de gestion des correctifs et les bonnes pratiques pour la gestion des correctifs de votre serveur est crucial pour maintenir la sécurité d’un serveur Linux. Les distributions Linux actuelles destinées aux entreprises disposent généralement toutes d’un service de gestion automatisée des correctifs, qu’il s’agisse d’un service d’abonnement payant ou d’efforts de la part de la communauté. Les services payants ne se contentent souvent pas de patcher les fichiers de votre système pour en assurer la sécurité; certains de ces services incluent également une solution pour patcher en direct votre noyau (kernel) en cours d’exécution, ce qui permet à vos systèmes en cours d’exécution de rester patchés avant même que vous n’ayez besoin de les redémarrer. 

Introduction aux gestionnaires de paquets

Les gestionnaires de paquets diffèrent d’une distribution à l’autre, mais tendent à utiliser deux formats de paquets principaux : DEB et RPM. DEB est utilisé sur les systèmes basés sur Debian et est géré par apt; RPM signifie Redhat Package Manager et est géré par dnf ou yum pour les systèmes basés sur Red Hat/Enterprise Linux ou par zypper pour SUSE. Tous les gestionnaires de paquets facilitent l’installation, la mise à jour et la suppression des paquets logiciel, en plus de résoudre les dépendances. Utilisez les gestionnaires de paquets pour gérer efficacement les logiciels et optimiser le processus de mise à jour. Tous les principaux gestionnaires de paquets sont également pris en charge par des dépôts à distance, ce qui vous permet de centraliser le contrôle des mises à jour et des déploiements de logiciels.

Configuration des mises à jour automatiques pour les correctifs de sécurité critiques

Configurer votre serveur Linux pour qu’il installe automatiquement les correctifs de sécurité critiques garantit que les mises à jour prioritaires sont appliquées rapidement sans intervention manuelle, ce qui minimise la fenêtre de vulnérabilité et réduit la charge de travail des administrateurs. Les distributions d’entreprise permettent généralement de configurer cette fonction lors de l’installation. Voir les paquets de configuration ci-dessous, si vous souhaitez mettre cela en place sur votre système existant :

Ubuntu : sudo apt install unattended-upgrades

Red Hat/CentOS : sudo yum install dnf-automatic

SUSE : sudo zypper install yast2-online-update-configuration ->  ouvrez YaST, sélectionnez Software -> Online Update Configuration, puis configurez-le selon vos préférences.

Il convient toutefois d’être prudent lors de l’activation des mises à jour automatiques, qui peuvent avoir un impact sur la stabilité du système ou nécessiter des tests de compatibilité. Les tests sont particulièrement importants lors de l’utilisation d’outils d’administration de masse à distance tels qu’ansible ou puppet pour effectuer des mises à jour de serveurs dans un environnement informatique hétérogène.

Configuration de l’élévation sudo et de l’accès au shell

Il est essentiel de configurer correctement les comptes d’utilisateurs et les autorisations pour disposer d’un système sécurisé qui permette l’accès à tous les utilisateurs. Les permissions qui n’ont pas été configurées correctement peuvent créer des problèmes, il est donc préférable de s’assurer qu’elles sont configurées correctement dès le départ.

L’utilisation de la commande sudo à son plein potentiel avec la bonne configuration /etc/sudoers, vous permet de limiter et d’autoriser les droits d’accès à la racine sans mot de passe pour chaque application. Utilisez toujours la commande visudo pour modifier /etc/sudoers afin de maintenir les autorisations correctes sur ce fichier critique:

sudo visudo

Effectuez des modifications similaires à celles-ci, en remplaçant « ninja » par votre nom d’utilisateur et en adaptant la liste des commandes autorisées, séparées par des virgules, à votre cas d’utilisation :

someuser ALL=(ALL:ALL) ALL

en

someuser ALL = NOPASSWD : /bin/systemctl restart nginx, /bin/kill, /usr/sbin/reboot

Ensuite, enregistrez et quittez. Notez que sudo lit effectivement le fichier /etc/sudoers de bas en haut, donc si vos modifications ne semblent pas efficaces, essayez de déplacer la ligne que vous avez modifiée vers le bas du fichier sudoers.

A propos des shells (interpreteurs de commandes)

Vous pouvez définir l’interpréteur de commandes par défaut d’un utilisateur en exécutant la commande chsh en tant que super-utilisateur, ou en masse en modifiant le fichier /etc/passwd en tant qu’utilisateur root ou superuser (super-utilisateur). C’est utile et souhaitable dans certains cas, par exemple pour modifier l’interpréteur de commandes (shell) par défaut d’un compte FTP en /sbin/nologin; car un tel compte ne devrait jamais avoir besoin d’exécuter des commandes de terminal. Dans ce cas, la suppression de l’accès au shell réduirait la surface d’attaque potentielle du système.

Sécuriser l’accès SSH avec des clés et désactiver le login root

Secure Shell (SSH) est un protocole réseau standard qui permet l’accès à distance à un système au niveau de la ligne de commande. Il est donc essentiel de permettre l’accès SSH uniquement aux utilisateurs nécessaires et de s’assurer que seuls les bons utilisateurs peuvent effectuer des opérations en tant qu’utilisateur root ou superuser (super utilisateur).

Bonnes pratiques pour sécuriser l’accès SSH aux serveurs Linux

Il est généralement conseillé de désactiver complètement la connexion root via SSH et l’accès SSH par mot de passe. Bien que le texte du mot de passe dans l’authentification par mot de passe soit transmis de façon chiffrée par les clés hôte SSH qui sont échangées lors de la poignée de main client/serveur SSH avant l’ouverture de session, le mot de passe est néanmoins transmis sur plusieurs réseaux d’une manière ou d’une autre. Il s’agit d’un autre aspect de la surface d’attaque : si les clés d’hôte de votre serveur SSH ont été générées à l’aide d’un algorithme ancien/non sécurisé, par exemple, il est possible d’espionner vos mots de passe.

Les connexions par clé SSH ne sont pas vulnérables à ce type d’attaque; vos clés publiques sont les seules parties qui sont transmises en « texte clair », et elles ont été conçues pour être distribuées publiquement. Tout comme votre clé privée, la phrase secrète (ou « phrase de passe ») que vous utilisez pour la déverrouiller lors de la connexion à la clé SSH n’est pas transmise sur le réseau.

Utiliser les clés SSH pour l’authentification

À noter que les extraits de code ci-dessous sont annotés par les commentaires de l’auteur, qui sont indiqués par « ## » pour plus de visibilité.

  1. Générez une clé SSH à l’aide de la commandessh-keygen. Par défaut, le format de clé de chiffrement RSA standard est utilisé, mais il est recommandé d’utiliser le chiffrement à courbe elliptique ed25519, plus rapide et plus sûre.

    user@host:~> ssh-keygen -t ed25519   
    Génération d'une paire de clés publiques/privées ed25519. Saisissez le fichier dans lequel vous souhaitez enregistrer la clé (/home/user/.ssh/id_ed25519) : 
    Saisissez la phrase secrète d'authentification (laisser vide en cas d'absence de phrase secrète) :
    Saisissez à nouveau la même phrase secrète d'authentification :
    Votre identification a été sauvegardée dans /home/user/.ssh/id_ed25519
    Votre clé publique a été enregistrée dans /home/user/.ssh/id_ed25519.pub
    L'empreinte de la clé est : SHA256:NjPk3GbSIL6wdITiSrEQ3U9uXqqaYJdtS62cwCahKoM user@host
    L'image randomart de la clé est :
    +--[ED25519 256]--+
    |.. . |
    | .. ... |
    | ... .+o o | ..
    |..o. o+=.+ |..
    | +. ooooS = |
    |o.o.o++o B |
    |=o *.=.. |
    |E.+.* + |
    |o.o. = |
    +----[SHA256]-----+ 
    user@host:~>
  2. Copiez votre clé publique sur votre plateforme d’hébergement en ligne. Si vous avez toujours un accès par mot de passe au serveur en question, vous pouvez utiliser la commande ssh-copy-id pour configurer automatiquement les fichiers de configuration SSH de votre compte avec votre clé SSH nouvellement générée copiée aux bons endroits:

    ssh-copy-id -i ~/.ssh/id_ed25519.pub remoteuser@remotehost
  3. Différentes façons d’utiliser les clés SSH pour se connecter :A) Directement dans la ligne de commande :

    ssh -i ~/.ssh/id_ed25519 remoteuser@remotehost:port

    OU en utilisant le fichier ~/.ssh/config :

  4. Editez votre fichier ~/.ssh/config avec n’importe quel éditeur de texte. Faites-le en tant que compte/utilisateur qui utilisera la configuration SSH pour se connecter à distance.
  5.  Ajoutez des lignes avec le format suivant :

    Host server1   ## Arbitrary label/handle for easy usage
    Hostname server1.example.com   ## Real hostname/IP
    User remote_user_1  ## Remote Linux username
    Port 12345  ## Remote port, default 22
    IdentityFile ~/.ssh/id_ed25519  ## NB! Private key file
    ForwardX11 yes ## Optional, forwards remote GUI apps
    
    Host server2  
    Hostname server2.example.com
    User remote_user_2
    Port 34567 
    IdentityFile ~/.ssh/id_ed25519


    Les stanzas doivent être séparés par des espaces verticaux.

  6. Vous pouvez maintenant utiliser le SSH en tapant simplement :

    ssh serveur1
    

    Puisque tout le reste est spécifié sous cette étiquette de stanza dans votre fichier .ssh/config. Astuce : si vous avez adopté la complétion tabulaire de Linux (alias la complétion bash), vous serez heureux d’apprendre que votre fichier de configuration SSH se branche automatiquement sur les systèmes de complétion bash de la plupart des distros Linux modernes.

Désactiver la connexion root SSH et l’authentification par mot de passe

  1. Assurez-vous IMPERATIVEMENT que vous pouvez vous connecter avec votre clé SSH. Vous pouvez potentiellement vous bloquer hors de votre système si cela ne fonctionne pas correctement.
  2. Utilisez votre éditeur favori en tant que root pour modifier les lignes suivantes dans  /etc/ssh/sshd_config avec les paramètres suivants:

    PermitRootLogin no
    
    ChallengeResponseAuthentication no
    
    PasswordAuthentication no
    
    KbdInteractiveAuthentication no
  3. Il est possible de faire fonctionner votre serveur SSH sur un port non standard :

    Port 12345
  4. Enregistrez ce fichier et relancez votre service SSH :

    sudo systemctl restart sshd
  5. Essayez maintenant de vous connecter via SSH sans la clé SSH :

    ssh remote_user_1@server1 [-p port]
    

    Si vous ne pouvez pas vous connecter sans spécifier de clé SSH, vous avez effectué cette étape correctement.

Implémentation d’un pare-feu sur les serveurs Linux

Si vous exploitez un serveur Linux de production et que votre distribution est livrée avec un pare-feu préconfiguré, vous avez pris un bon départ. Lorsque les données d’un serveur de production sont exposées à l’internet, il est préférable de les protéger avec un pare-feu. Les variantes Enterprise Linux/Red Hat ont tendance à être livrées avec firewalld, tandis que Debian/Ubuntu sont livrées avec ufw (« Uncomplicated Firewall »). Consultez la page de manuel de firewall-cmd ou la page de manuel de ufw pour plus de détails.

Configuration des règles et des politiques de pare-feu

Une fois que l’on a dépassé les détails, les règles et politiques de pare-feu devraient se résumer à « bloquer tout, sauf ce que j’autorise spécifiquement ». Encore une fois, ces règles sont généralement préconfigurées par défaut sur les systèmes Linux modernes, en particulier sur les variantes d’Enterprise Linux. Tout cas d’utilisation non couvert par ces valeurs par défaut n’entre pas dans le champ d’application du présent document.

Surveillance et gestion de pare-feu

  • Firewalld et ufw se branchent tous les deux sur les principaux systèmes de journalisation journald et/ou [r]syslog.
  • Outre les outils de gestion de pare-feu en ligne de commande firewall-cmd et ufw, , d’autres frontends de gestion à distance tels que Cockpit, WebMin et YaST proposent des modules qui permettent de gérer les pare-feu. D’autres outils de gestion à distance, comme ansible et puppet, disposent également de modules pour la configuration et la gestion automatiques des pare-feux.

Sécurisation des services en contact avec le réseau

Bonnes pratiques pour sécuriser les services en contact avec le réseau :

  • Il doit y avoir le moins de code possible sur votre système.
  • Exécutez le minimum de services possible.
  • N’exécutez pas un service grand public en tant qu’utilisateur root. 
  • Les serveurs n’ont pas besoin d’une interface graphique. Code étranger et services en cours d’exécution = augmentation de la surface d’attaque.
  • Les services Linux reposent sur la sécurisation du système par des certificats de chiffrement. Certbot/Let’s Encrypt propose la procédure la plus simple pour générer des certificats de chiffrement gratuits.
  • La plupart des services Linux écoutent sur des ports distincts pour leurs connexions sécurisées et non sécurisées. Pour plus de détails sur la sécurité et les autres options de configuration, veuillez consulter les pages de manuel de ces services.
  • Vous pouvez utiliser la commande netstat -tulpen pour voir les ports que votre système écoute (que ces ports soient ou non bloqués par votre pare-feu; cette commande affiche les ports d’écoute en fonction des processus) 

Le minimalisme est aussi important que l’action pour la sécurité des serveurs Linux

Il vaut mieux faire les bons choix dès le départ et dans le monde actuel, connecté au cloud, choisir la bonne distribution de serveurs Linux et de solutions de gestion à distance est plus important que jamais. Le logiciel de gestion à distance Linux intégré de NinjaOne vous donne la liberté d’utiliser n’importe quelle plateforme de système d’exploitation tout en restant sécurisé et à jour.

On peut affirmer sans hésiter que l’infrastructure technologique de la majorité des PME comprend quelques serveurs Linux dans le cadre de leur infrastructure critique. Si vous avez un site web, il y a de fortes chances qu’il tourne sur un serveur Linux; si vous utilisez des services bancaires en ligne, il y a de fortes chances qu’ils dépendent de la sécurité de dizaines de serveurs Linux. Étant donné qu’Android lui-même est (en simplifiant à l’extrême) un noyau Linux surmonté d’une interface graphique, si vous lisez ceci sur un smartphone, la question de la sécurité de Linux peut être littéralement plus proche de vous que vous ne le pensez.

Pour aller plus loin

Les principes fondamentaux de la sécurité des appareils sont essentiels à votre posture de sécurité globale. NinjaOne facilite l’application de correctifs, le durcissement, la sécurisation et la sauvegarde des données de tous les appareils de façon centralisée, à distance et à grande échelle.
Pour en savoir plus sur NinjaOne Backup, participez à une visite guidée en direct ou commencez votre essai gratuit de la plateforme NinjaOne.

Vous pourriez aussi aimer

Prêt à devenir un Ninja de l’informatique ?

Découvrez comment NinjaOne peut vous aider à simplifier les opérations informatiques.
Voir la démo×
×

Voir NinjaOne en action !

En soumettant ce formulaire, j'accepte la politique de confidentialité de NinjaOne.

Commencez un essai gratuit du logiciel de gestion des terminaux classé N°1 sur G2

Pas de carte de crédit requise, accès complet à toutes les fonctionnalités.

Termes et conditions NinjaOne

En cliquant sur le bouton « J’accepte » ci-dessous, vous indiquez que vous acceptez les termes juridiques suivants ainsi que nos conditions d’utilisation:

  • Droits de propriété: NinjaOne possède et continuera de posséder tous les droits, titres et intérêts relatifs au script (y compris les droits d’auteur). NinjaOne vous accorde une licence limitée pour l’utilisation du script conformément à ces conditions légales.
  • Limitation de l’utilisation: Les scripts ne peuvent être utilisés qu’à des fins personnelles ou professionnelles internes légitimes et ne peuvent être partagés avec d’autres entités.
  • Interdiction de publication: Vous n’êtes en aucun cas autorisé à publier le script dans une bibliothèque de scripts appartenant à, ou sous le contrôle d’un autre fournisseur de logiciels.
  • Clause de non-responsabilité: Le texte est fourni « tel quel » et « tel que disponible », sans garantie d’aucune sorte. NinjaOne ne promet ni ne garantit que le script sera exempt de défauts ou qu’il répondra à vos besoins ou attentes particulières.
  • Acceptation des risques: L’utilisation du script est sous votre propre responsabilité. Vous reconnaissez qu’il existe certains risques inhérents à l’utilisation du script, et vous comprenez et assumez chacun de ces risques.
  • Renonciation et exonération de responsabilité: Vous ne tiendrez pas NinjaOne pour responsable des conséquences négatives ou involontaires résultant de votre utilisation du script, et vous renoncez à tout droit ou recours légal ou équitable que vous pourriez avoir contre NinjaOne en rapport avec votre utilisation du script.
  • EULA: Si vous êtes un client de NinjaOne, votre utilisation du script est soumise au contrat de licence d’utilisateur final qui vous est applicable (End User License Agreement (EULA)).