Une introduction à la sécurisation de votre VPS Linux
Introduction
Prendre le contrôle de votre propre serveur Linux est une opportunité d'essayer de nouvelles choses et de tirer parti de la puissance et de la flexibilité d'une excellente plate-forme. Cependant, les administrateurs de serveurs Linux doivent prendre les mêmes précautions que celles qui s'appliquent à toute machine connectée au réseau pour la garder sécurisée et sécurisée.
Il existe de nombreux sujets de sécurité différents qui relèvent de la catégorie générale de la "sécurité Linux" et de nombreuses opinions sur ce à quoi ressemble un niveau de sécurité approprié pour un serveur Linux.
La principale chose à retenir de cela est que vous devrez décider vous-même quelles protections de sécurité seront nécessaires. Avant de faire cela, vous devez être conscient des risques et des compromis, et décider de l'équilibre entre convivialité et sécurité qui vous convient.
Cet article est destiné à vous aider à vous orienter avec certaines des mesures de sécurité les plus courantes à prendre dans un environnement de serveur Linux. Cette liste n'est pas exhaustive et ne couvre pas les configurations recommandées, mais elle fournira des liens vers des ressources plus approfondies et expliquera pourquoi chaque composant est une partie importante de nombreux systèmes.
Bloquer l'accès avec des pare-feu
L'une des étapes les plus simples à recommander à tous les utilisateurs consiste à activer et à configurer un pare-feu. Les pare-feu agissent comme une barrière entre le trafic général d'Internet et votre machine. Ils examinent le trafic entrant et sortant de votre serveur et décident s'il doit permettre la livraison des informations.
Pour ce faire, ils vérifient le trafic en question par rapport à un ensemble de règles configurées par l'utilisateur. Habituellement, un serveur n'utilisera que quelques ports réseau spécifiques pour les services légitimes. Les autres ports sont inutilisés et doivent être protégés en toute sécurité derrière un pare-feu, qui refusera tout trafic destiné à ces emplacements.
Cela vous permet de supprimer des données que vous n'attendez pas et même de conditionner l'utilisation de vos services réels dans certains cas. Les règles de pare-feu Sane constituent une bonne base pour la sécurité du réseau.
Il existe de nombreuses solutions de pare-feu disponibles. Nous discuterons brièvement de certaines des options les plus populaires ci-dessous.
UFW
UFW signifie pare-feu simple. Son objectif est de fournir une bonne protection sans la syntaxe compliquée des autres solutions.
UFW, ainsi que la plupart des pare-feu Linux, est en fait un frontal pour contrôler le pare-feu netfilter inclus avec le noyau Linux. Il s'agit généralement d'un pare-feu simple à utiliser pour les personnes qui ne sont pas déjà familiarisées avec les solutions de pare-feu Linux et c'est généralement un bon choix.
Vous pouvez apprendre comment activer et configurer le pare-feu UFW et en savoir plus en cliquant sur ce lien.
Tables IP
La solution de pare-feu Linux la plus connue est peut-être iptables. IPTables est un autre composant utilisé pour administrer le pare-feu netfilter inclus dans le noyau Linux. Il existe depuis longtemps et a subi des audits de sécurité intenses pour assurer sa sécurité. Il existe une version d'iptables appelée ip6tables pour créer des restrictions IPv6.
Vous rencontrerez probablement des configurations iptables pendant votre temps d'administration des machines Linux. La syntaxe peut être compliquée à saisir au début, mais c'est un outil incroyablement puissant qui peut être configuré avec des ensembles de règles très flexibles.
Vous pouvez en savoir plus sur comment mettre en œuvre certaines règles de pare-feu iptables sur les systèmes Ubuntu ou Debian ici, ou apprendre comment utiliser iptables sur les distributions basées sur CentOS/Fedora/RHEL ici.
Tables IP6
Comme mentionné ci-dessus, le iptables
est utilisé pour manipuler les tables qui contiennent des règles IPv4. Si vous avez activé IPv6 sur votre serveur, vous devrez également faire attention à l'équivalent IPv6 : ip6tables
.
Le pare-feu netfilter inclus dans le noyau Linux sépare complètement le trafic IPv4 et IPv6. Ceux-ci sont stockés dans différentes tables. Les règles qui dictent le sort ultime d'un paquet sont déterminées par la version de protocole utilisée.
Cela signifie pour l'administrateur du serveur qu'un ensemble de règles distinct doit être maintenu lorsque la version 6 est activée. La commande ip6tables
partage la même syntaxe que la commande iptables
, donc la mise en œuvre du même ensemble de restrictions dans le tableau de la version 6 est généralement simple. Vous devez cependant être sûr que le trafic dirigé vers vos adresses IPv6 corresponde pour que cela fonctionne correctement.
NFTables
Bien qu'iptables soit depuis longtemps la norme pour les pare-feu dans un environnement Linux, un nouveau pare-feu appelé nftables a récemment été ajouté au noyau Linux. Il s'agit d'un projet de la même équipe qui fabrique iptables et qui vise à remplacer iptables à terme.
Le pare-feu nftables tente d'implémenter une syntaxe plus lisible que celle trouvée par son prédécesseur iptables et implémente la prise en charge IPv4 et IPv6 dans le même outil. Bien que la plupart des versions de Linux à l'heure actuelle ne soient pas livrées avec un noyau suffisamment nouveau pour implémenter nftables, il sera bientôt très courant et vous devriez essayer de vous familiariser avec son utilisation.
Utilisation de SSH pour se connecter à distance en toute sécurité
Lors de l'administration d'un serveur où vous n'avez pas d'accès local, vous devrez vous connecter à distance. Le moyen standard et sécurisé d'accomplir cela sur un système Linux consiste à utiliser un protocole appelé SSH, qui signifie shell sécurisé.
SSH fournit un cryptage de bout en bout, la possibilité de tunneliser le trafic non sécurisé via une connexion sécurisée, le transfert X (interface utilisateur graphique via une connexion réseau) et bien plus encore. Fondamentalement, si vous n'avez pas accès à une connexion locale ou à une gestion hors bande, SSH devrait être votre principal moyen d'interagir avec votre machine.
Bien que le protocole lui-même soit très sécurisé et ait fait l'objet de recherches approfondies et d'un examen du code, vos choix de configuration peuvent soit aider, soit entraver la sécurité du service. Nous discuterons de certaines options ci-dessous.
Connexions par mot de passe ou par clé SSH
SSH dispose d'un modèle d'authentification flexible qui vous permet de vous connecter en utilisant un certain nombre de méthodes différentes. Les deux choix les plus populaires sont l'authentification par mot de passe et par clé SSH.
Bien que l'authentification par mot de passe soit probablement le modèle le plus naturel pour la plupart des utilisateurs, c'est aussi le moins sûr de ces deux choix. Les connexions par mot de passe permettent à un intrus potentiel de deviner continuellement les mots de passe jusqu'à ce qu'une combinaison réussie soit trouvée. Ceci est connu sous le nom de force brute et peut facilement être automatisé par des attaquants potentiels avec des outils modernes.
Les clés SSH, en revanche, fonctionnent en générant une paire de clés sécurisées. Une clé publique est créée comme un type de test pour identifier un utilisateur. Il peut être partagé publiquement sans problème et ne peut être utilisé que pour identifier un utilisateur et autoriser une connexion à l'utilisateur avec la clé privée correspondante. La clé privée doit être gardée secrète et est utilisée pour réussir le test de sa clé publique associée.
Fondamentalement, vous pouvez ajouter votre clé publique SSH sur un serveur, et cela vous permettra de vous connecter en utilisant la clé privée correspondante. Ces clés sont si complexes que le forçage brutal n'est pas pratique. De plus, vous pouvez éventuellement ajouter de longues phrases secrètes à votre clé, ce qui ajoute encore plus de sécurité.
Pour en savoir plus sur comment utiliser SSH, cliquez ici et consultez ce lien pour apprendre comment configurer des clés SSH sur votre serveur.
Implémentez fail2ban pour interdire les adresses IP malveillantes
Une étape qui contribuera à la sécurité générale de votre configuration SSH consiste à implémenter une solution telle que fail2ban. Fail2ban est un service qui surveille les fichiers journaux afin de déterminer si un système distant n'est probablement pas un utilisateur légitime, puis d'interdire temporairement le trafic futur à partir de l'adresse IP associée.
La configuration d'une politique fail2ban saine peut vous permettre de signaler les ordinateurs qui tentent continuellement de se connecter sans succès et d'ajouter des règles de pare-feu pour en supprimer le trafic pendant une période de temps définie. C'est un moyen facile d'entraver les méthodes de force brute souvent utilisées, car elles devront faire une pause pendant un certain temps lorsqu'elles seront interdites. Cela suffit généralement à décourager d'autres tentatives de force brute.
Vous pouvez apprendre comment mettre en œuvre une politique fail2ban sur Ubuntu ici. Il existe des guides similaires pour Debian et CentOS ici.
Mettre en place un système de détection d'intrusion pour détecter les entrées non autorisées
Une considération importante à garder à l'esprit est l'élaboration d'une stratégie de détection des utilisations non autorisées. Vous avez peut-être mis en place des mesures préventives, mais vous devez également savoir si elles ont échoué ou non.
Un système de détection d'intrusion, également connu sous le nom d'IDS, répertorie la configuration et les détails des fichiers lorsqu'ils sont dans un état correct. Il exécute ensuite des comparaisons avec ces états enregistrés pour savoir si les fichiers ont été modifiés ou si les paramètres ont été modifiés.
Il existe de nombreux systèmes de détection d'intrusion. Nous allons passer en revue quelques-uns ci-dessous.
Tripwire
Tripwire est l'une des implémentations IDS les plus connues. Tripwire compile une base de données de fichiers système et protège ses fichiers de configuration et ses binaires avec un ensemble de clés. Une fois les détails de configuration choisis et les exceptions définies, les exécutions suivantes signalent toute modification des fichiers qu'il surveille.
Le modèle de politique est très flexible, ce qui vous permet d'adapter ses propriétés à votre environnement. Vous pouvez ensuite configurer les exécutions de tripwire via une tâche cron et même implémenter des notifications par e-mail en cas d'activité inhabituelle.
En savoir plus sur comment implémenter tripwire ici.
Aide
Une autre option pour un IDS est Aide. Semblable à Tripwire, Aide fonctionne en créant une base de données et en comparant l'état actuel du système aux bonnes valeurs connues qu'il a stockées. Lorsqu'un écart survient, il peut informer l'administrateur du problème.
Aide et Tripwire offrent tous deux des solutions similaires au même problème. Consultez la documentation et essayez les deux solutions pour savoir laquelle vous convient le mieux.
Pour un guide sur comment utiliser Aide comme IDS, cliquez ici.
PSA
L'outil psad concerne une partie du système différente de celle des outils répertoriés ci-dessus. Au lieu de surveiller les fichiers système, psad garde un œil sur les journaux du pare-feu pour essayer de détecter les activités malveillantes.
Si un utilisateur essaie de rechercher des vulnérabilités avec une analyse de port, par exemple, psad peut détecter cette activité et modifier dynamiquement les règles du pare-feu pour verrouiller l'utilisateur incriminé. Cet outil peut enregistrer différents niveaux de menace et baser sa réponse sur la gravité du problème. Il peut également éventuellement envoyer un e-mail à l'administrateur.
Pour apprendre comment utiliser psad comme IDS réseau, suivez ce lien.
Frère
Une autre option pour un IDS basé sur le réseau est Bro. Bro est en fait un framework de surveillance de réseau qui peut être utilisé comme IDS de réseau ou à d'autres fins comme la collecte de statistiques d'utilisation, l'étude de problèmes ou la détection de modèles.
Le système Bro est divisé en deux couches. La première couche surveille l'activité et génère ce qu'elle considère comme des événements. La deuxième couche exécute les événements générés via un cadre de stratégie qui dicte ce qui doit être fait, le cas échéant, avec le trafic. Il peut générer des alertes, exécuter des commandes système, simplement enregistrer l'occurrence ou emprunter d'autres chemins.
Pour savoir comment utiliser Bro comme IDS, cliquez ici.
RKHunter
Bien qu'il ne s'agisse pas techniquement d'un système de détection d'intrusion, rkhunter fonctionne sur bon nombre des mêmes principes que les systèmes de détection d'intrusion basés sur l'hôte afin de détecter les rootkits et les logiciels malveillants connus.
Alors que les virus sont rares dans le monde Linux, les logiciels malveillants et les rootkits existent et peuvent compromettre votre machine ou permettre un accès continu à un exploiteur prospère. RKHunter télécharge une liste d'exploits connus, puis vérifie votre système par rapport à la base de données. Il vous alerte également s'il détecte des paramètres dangereux dans certaines applications courantes.
Vous pouvez consulter cet article pour apprendre comment utiliser RKHunter sur Ubuntu.
Conseils généraux de sécurité
Bien que les outils et configurations ci-dessus puissent vous aider à sécuriser des parties de votre système, une bonne sécurité ne vient pas simplement de la mise en œuvre d'un outil et de son oubli. Une bonne sécurité se manifeste dans un certain état d'esprit et est obtenue grâce à la diligence, à l'examen minutieux et à l'engagement dans la sécurité en tant que processus.
Certaines règles générales peuvent vous aider à vous orienter dans la bonne direction en ce qui concerne l'utilisation de votre système en toute sécurité.
Faites attention aux mises à jour et mettez-les à jour régulièrement
Les vulnérabilités logicielles se trouvent tout le temps dans à peu près tous les types de logiciels que vous pourriez avoir sur votre système. Les responsables de la distribution font généralement un bon travail en se tenant au courant des derniers correctifs de sécurité et en poussant ces mises à jour dans leurs référentiels.
Cependant, avoir des mises à jour de sécurité disponibles dans le référentiel ne sert à rien votre serveur si vous n'avez pas téléchargé et installé les mises à jour. Bien que de nombreux serveurs bénéficient de versions stables et bien testées du logiciel système, les correctifs de sécurité ne doivent pas être différés et doivent être considérés comme des mises à jour critiques.
La plupart des distributions fournissent des listes de diffusion de sécurité et des référentiels de sécurité séparés pour télécharger et installer uniquement les correctifs de sécurité.
Faites attention lorsque vous téléchargez un logiciel en dehors des canaux officiels
La plupart des utilisateurs s'en tiendront aux logiciels disponibles dans les référentiels officiels pour leur distribution, et la plupart des distributions proposent des packages signés. Les utilisateurs peuvent généralement faire confiance aux responsables de la distribution et concentrer leurs préoccupations sur la sécurité des logiciels acquis en dehors des canaux officiels.
Vous pouvez choisir de faire confiance aux packages de votre distribution ou aux logiciels disponibles sur le site Web officiel d'un projet, mais sachez que si vous n'auditez pas vous-même chaque logiciel, il existe un risque. La plupart des utilisateurs estiment qu'il s'agit d'un niveau de risque acceptable.
D'un autre côté, les logiciels acquis à partir de référentiels aléatoires et de PPA gérés par des personnes ou des organisations que vous ne reconnaissez pas peuvent constituer un risque de sécurité énorme. Il n'y a pas de règles établies et la majorité des sources de logiciels non officielles seront probablement totalement sûres, mais sachez que vous prenez un risque chaque fois que vous faites confiance à une autre partie.
Assurez-vous de pouvoir vous expliquer pourquoi vous faites confiance à la source. Si vous ne pouvez pas le faire, envisagez de considérer votre risque de sécurité comme une préoccupation plus importante que la commodité que vous gagnerez.
Connaissez vos services et limitez-les
Bien que l'intégralité de l'exécution d'un serveur soit susceptible de fournir des services auxquels vous pouvez accéder, limitez les services exécutés sur votre machine à ceux que vous utilisez et dont vous avez besoin. Considérez chaque service activé comme un vecteur de menace possible et essayez d'éliminer autant de vecteurs de menace que possible sans affecter votre fonctionnalité principale.
Cela signifie que si vous exécutez un serveur sans écran (sans moniteur connecté) et que vous n'exécutez aucun programme graphique (non Web), vous devez désactiver et probablement désinstaller votre serveur d'affichage X. Des mesures similaires peuvent être prises dans d'autres domaines. Pas d'imprimante ? Désactivez le service "lp". Pas de partages réseau Windows ? Désactivez le service "samba".
Vous pouvez découvrir les services en cours d'exécution sur votre ordinateur par divers moyens. Cet article explique comment détecter les services activés dans la section "Créer une liste d'exigences".
Ne pas utiliser FTP ; Utilisez SFTP à la place
Cela peut être difficile à accepter pour de nombreuses personnes, mais FTP est un protocole qui n'est pas sécurisé par nature. Toutes les authentifications sont envoyées en texte brut, ce qui signifie que toute personne surveillant la connexion entre votre serveur et votre ordinateur local peut voir vos informations de connexion.
Il n'y a que très peu de cas où FTP peut être mis en œuvre. Si vous utilisez un miroir de téléchargement anonyme, public et en lecture seule, FTP est un bon choix. Un autre cas où FTP est un bon choix est lorsque vous transférez simplement des fichiers entre deux ordinateurs qui se trouvent derrière un pare-feu compatible NAT et que vous pensez que votre réseau est sécurisé.
Dans presque tous les autres cas, vous devez utiliser une alternative plus sécurisée. La suite SSH est livrée avec un protocole alternatif appelé SFTP qui fonctionne en surface de manière similaire, mais basé sur la même sécurité que le protocole SSH.
Cela vous permet de transférer des informations vers et depuis votre serveur de la même manière que vous utiliseriez traditionnellement FTP, mais sans risque. La plupart des clients FTP modernes peuvent également communiquer avec des serveurs SFTP.
Pour savoir comment utiliser SFTP pour transférer des fichiers en toute sécurité, consultez ce guide.
Mettre en œuvre des politiques de sécurité utilisateur sensées
Il existe un certain nombre de mesures que vous pouvez prendre pour mieux sécuriser votre système lors de l'administration des utilisateurs.
Une suggestion est de désactiver les connexions root. Étant donné que l'utilisateur root est présent sur tous les systèmes de type POSIX et qu'il s'agit d'un compte tout-puissant, il constitue une cible attrayante pour de nombreux attaquants. La désactivation des connexions root est souvent une bonne idée après avoir configuré l'accès sudo ou si vous êtes à l'aise avec la commande su. Beaucoup de gens ne sont pas d'accord avec cette suggestion, mais examinez si elle vous convient.
Il est possible de désactiver les connexions root à distance dans le démon SSH ou de désactiver les connexions locales, vous pouvez faire des restrictions dans le fichier /etc/securetty
. Vous pouvez également définir le shell de l'utilisateur root sur un non-shell pour désactiver l'accès au shell root et configurer des règles PAM pour restreindre également les connexions root. RedHat a un excellent article sur comment désactiver les connexions root.
Une autre bonne politique à mettre en œuvre avec les comptes d'utilisateurs consiste à créer des comptes uniques pour chaque utilisateur et service, et à ne leur donner que les autorisations minimales nécessaires pour faire leur travail. Verrouillez tout ce dont ils n'ont pas besoin d'accéder et supprimez tous les privilèges à moins de les paralyser.
Il s'agit d'une politique importante car si un utilisateur ou un service est compromis, cela ne conduit pas à un effet domino qui permet à l'attaquant d'accéder à encore plus de système. Ce système de compartimentation vous aide à isoler les problèmes, tout comme un système de cloisons et de portes étanches peut aider à empêcher un navire de couler en cas de brèche dans la coque.
Dans la même veine que les politiques de services dont nous avons discuté ci-dessus, vous devez également veiller à désactiver tous les comptes d'utilisateurs qui ne sont plus nécessaires. Cela peut se produire lorsque vous désinstallez un logiciel ou si un utilisateur n'a plus accès au système.
Faites attention aux paramètres d'autorisation
Les autorisations de fichiers sont une énorme source de frustration pour de nombreux utilisateurs. Trouver un équilibre pour les autorisations qui vous permettent de faire ce que vous devez faire sans vous exposer à des dommages peut être difficile et nécessite une attention et une réflexion approfondies dans chaque scénario.
La configuration d'une politique umask saine (la propriété qui définit les autorisations par défaut pour les nouveaux fichiers et répertoires) peut contribuer grandement à créer de bonnes valeurs par défaut. Vous pouvez en savoir plus sur comment fonctionnent les autorisations et comment ajuster votre valeur umask ici.
En général, vous devriez réfléchir à deux fois avant de définir quoi que ce soit pour qu'il soit accessible en écriture par le monde, surtout s'il est accessible de quelque manière que ce soit à Internet. Cela peut avoir des conséquences extrêmes. De plus, vous ne devez pas définir le bit SGID ou SUID dans les autorisations à moins que vous ne sachiez absolument ce que vous faites. Vérifiez également que vos fichiers ont un propriétaire et un groupe.
Vos paramètres d'autorisations de fichiers varient considérablement en fonction de votre utilisation spécifique, mais vous devez toujours essayer de voir s'il existe un moyen de s'en sortir avec moins d'autorisations. C'est l'une des choses les plus faciles à se tromper et un domaine où il y a beaucoup de mauvais conseils qui circulent sur Internet.
Vérifiez régulièrement les logiciels malveillants sur vos serveurs
Bien que Linux soit généralement moins ciblé par les logiciels malveillants que Windows, il n'est en aucun cas à l'abri des logiciels malveillants. En conjonction avec la mise en œuvre d'un IDS pour détecter les tentatives d'intrusion, la recherche de logiciels malveillants peut aider à identifier les traces d'activité qui indiquent qu'un logiciel illégitime est installé sur votre machine.
Il existe un certain nombre de scanners de logiciels malveillants disponibles pour les systèmes Linux qui peuvent être utilisés pour valider régulièrement l'intégrité de vos serveurs. Linux Malware Detect, également connu sous le nom de maldet
ou LMD, est une option populaire qui peut être facilement installée et configurée pour rechercher les signatures de logiciels malveillants connus. Il peut être exécuté manuellement pour effectuer des analyses ponctuelles et peut également être démonisé pour exécuter des analyses planifiées régulièrement. Les rapports de ces analyses peuvent être envoyés par e-mail aux administrateurs du serveur.
Comment sécuriser le logiciel spécifique que vous utilisez
Bien que ce guide ne soit pas assez volumineux pour passer en revue les spécificités de la sécurisation de chaque type de service ou d'application, de nombreux didacticiels et directives sont disponibles en ligne. Vous devriez lire les recommandations de sécurité de chaque projet que vous avez l'intention d'implémenter sur votre système.
De plus, les logiciels de serveur populaires tels que les serveurs Web ou les systèmes de gestion de bases de données ont des sites Web et des bases de données entiers consacrés à la sécurité. En général, vous devez vous renseigner et sécuriser chaque service avant de le mettre en ligne.
Vous pouvez consulter notre section sécurité pour obtenir des conseils plus spécifiques sur le logiciel que vous utilisez.
Conclusion
Vous devriez maintenant avoir une bonne compréhension des pratiques de sécurité générales que vous pouvez mettre en œuvre sur votre serveur Linux. Bien que nous nous soyons efforcés de mentionner de nombreux domaines de grande importance, en fin de compte, vous devrez prendre de nombreuses décisions par vous-même. Lorsque vous administrez un serveur, vous devez assumer la responsabilité de la sécurité de votre serveur.
Ce n'est pas quelque chose que vous pouvez configurer en une seule virée rapide au début, c'est un processus et un exercice continu d'audit de votre système, de mise en œuvre de solutions, d'évaluation des journaux et des alertes, de réévaluation de vos besoins, etc. Vous devez être vigilant dans la protection de votre système et toujours évaluer et surveiller les résultats de vos solutions.