Introduction
La plupart du temps, votre principal objectif sera de mettre en place et de faire fonctionner vos applications cloud. Dans le cadre de votre processus de configuration et de déploiement, il est important de mettre en place des mesures de sécurité robustes et complètes pour vos systèmes et applications avant qu’elles ne soient accessibles au public. La mise en œuvre des mesures de sécurité de ce tutoriel avant le déploiement de vos applications garantira que tout logiciel que vous exécutez sur votre infrastructure dispose d’une configuration de base sécurisée, contrairement à des mesures ad-hoc qui pourraient être mises en place après le déploiement.
Cette guide met en avant quelques mesures de sécurité pratiques que vous pouvez adopter lors de la configuration et de la mise en place de votre infrastructure serveur. Cette liste n’est pas exhaustive de tout ce que vous pouvez faire pour sécuriser vos serveurs, mais elle vous offre un point de départ sur lequel vous pouvez construire. Au fil du temps, vous pouvez développer une approche de sécurité plus personnalisée qui répond aux besoins spécifiques de vos environnements et applications.
Clés SSH
SSH, ou Shell Secure, est un protocole crypté utilisé pour administrer et communiquer avec des serveurs. Quand vous travaillez avec un serveur, vous passerez probablement la plupart de votre temps dans une séquence de commandes liée au serveur via SSH. En tant qu’alternative aux connexions basées sur les mots de passe, les clés SSH utilisent l’encryption asymétrique pour fournir une méthode sécuritaire pour se connecter à votre serveur. Les clés SSH sont recommandées pour tous les utilisateurs.
Avec les clés SSH, une paire de clés privée et publique est créée pour l’utilisation d’authentification. La clé privée est gardée secrète et sécurité par l’utilisateur, alors que la clé publique peut être partagée. Cela est souvent appelé un patron de chiffrement asymétrique, un motif que vous pouvez rencontrer ailleurs.
Pour configurer l’authentification par clés SSH, vous devez mettre votre clé publique SSH sur le serveur dans le lieu attendu ( habituellement ~/.ssh/authorized_keys
). Pour en savoir plus sur comment fonctionne l’authentification basée sur les clés SSH, lisez Comprendre le processus d’encryption et de connexion SSH.
Comment les clés SSH améliorent la sécurité ?
Avec SSH, tout type d’authentification — y compris l’authentification par mot de passe — est complètement chiffré. Cependant, lorsque les connexions par mot de passe sont autorisées, des utilisateurs malveillants peuvent répétitivement et automatiquement tenter d’accéder à un serveur, surtout s’il a une adresse IP publique. Bien qu’il existe des moyens de verrouiller l’accès après plusieurs tentatives échouées provenant de la même IP, et que les utilisateurs malveillants seront limités en pratique par la rapidité avec laquelle ils peuvent tenter de se connecter à votre serveur, toute circonstance dans laquelle un utilisateur peut plausiblement tenter de gaining access à votre pile par des attaques de force brute posera un risque de sécurité.
La configuration de l’authentification par clé SSH vous permet de désactiver l’authentification par mot de passe. Les clés SSH ont généralement beaucoup plus de bits de données qu’un mot de passe — vous pouvez créer un hachage de clé SSH de 128 caractères à partir d’un mot de passe de 12 caractères — ce qui les rend beaucoup plus difficiles à briser par force brute. Certains algorithmes de chiffrement sont cependant considérés comme brisables en tentant de rétroconcevoir des hachages de mot de passe suffisamment de fois sur un ordinateur suffisamment puissant. D’autres, y compris la clé RSA par défaut générée par les clients SSH modernes, ne sont pas encore plausibles à briser.
Comment mettre en œuvre les clés SSH
Les clés SSH sont la méthode recommandée pour se connecter à n’importe quel environnement serveur Linux à distance. Un couple de clés SSH peut être généré sur votre machine locale en utilisant la commande ssh
, et vous pouvez ensuite transférer la clé publique à un serveur distant.
Pour configurer les clés SSH sur votre serveur, vous pouvez suivre Comment installer des clés SSH pour Ubuntu, Debian ou CentOS.
Pour tous les composants de votre pile qui nécessitent une authentification par mot de passe ou qui sont susceptibles aux attaques par force brute, vous pouvez implémenter une solution comme fail2ban sur vos serveurs pour limiter le nombre d’essais de déguisement.
Il est une bonne pratique de ne pas permettre à l’utilisateur root de se connecter directement avec SSH. Au lieu de cela, connectez-vous en tant qu’utilisateur non privilégie et escalatez les droits nécessaires à l’aide d’un outil comme sudo
. Cette approche consiste à limiter les permissions connu sous le nom de principe du moindre privilège. Une fois que vous avez connecté à votre serveur et créé un compte utilisateur non privilégie qui a été verifié fonctionnel avec SSH, vous pouvez désactiver les connexions SSH avec la directive PermitRootLogin no
dans /etc/ssh/sshd_config
sur votre serveur et puis redémarrez le processus SSH du serveur avec une commande comme sudo systemctl restart sshd
.
Fortifications
Un pare-feu est un dispositif logiciel ou matériel qui contrôle comment les services sont exposés au réseau et quels types de trafic sont autorisés dans et hors d’une serveur donné ou des serveurs. Un pare-feu correctement configuré assurera que seuls les services qui devraient être disponibles publiquement peuvent être atteints depuis l’extérieur des serveurs ou du réseau.
Sur une machine typique de serveur, plusieurs services peuvent être exécutés par défaut. Ces services peuvent être catégorisés en fonction des groupes suivants :
- Les services publics qui peuvent être accédés par tout le monde sur Internet, souvent anonymement. Un exemple de ce genre est le serveur Web qui vous permet de servir votre site Web actuel.
- Les services privés qui ne doivent être accès que par un groupe sélectionné d’utilisateurs ou des emplacements spécifiés. Par exemple, un panneau de contrôle de base de donnéescomme phpMyAdmin.
- Les services internes qui doivent être accessibles uniquement à l’intérieur du serveur lui-même, sans exposer le service au public internet. Par exemple, une base de données qui accepte seulement des connexions locales.
Les pare-feux peuvent garantir que l’accès aux applications soit restreint selon les catégories précédentes avec différentes degrés de granularité. Les services publics peuvent être laissés ouverts et disponibles sur le réseau internet, les services privés peuvent être restreints en fonction de différents criteres, tels que les types de connexion. Les ports non utilisés sont bloqués complètement dans la plupart des configurations.
Comment les pare-feu améliorent-ils la sécurité ?
Même si vos services implémentent des fonctionnalités de sécurité ou sont restreints aux interfaces sur lesquelles vous souhaitez les faire fonctionner, un pare-feu sert de couche de protection de base en limitant les connexions vers et depuis vos services avant que le trafic ne soit géré par une application.
Un pare-feu correctement configuré restreindra l’accès à tout sauf aux services spécifiques dont vous avez besoin de conserver l’accès, généralement en ouvrant uniquement les ports associés à ces services. Par exemple, SSH fonctionne généralement sur le port 22, et l’accès HTTP/HTTPS via un navigateur Web se fait généralement sur les ports 80 et 443 respectivement. Exposer uniquement quelques logiciels réduit la surface d’attaque de votre serveur, limitant les composants qui sont vulnérables à l’exploitation.
Comment implémenter des pare-feu
Il existe de nombreux pare-feu disponibles pour les systèmes Linux, et certains sont plus complexes que d’autres. En général, vous devriez_only avoir besoin de faire des modifications à la configuration de votre pare-feu lorsque vous apportez des modifications aux services en cours d’exécution sur votre serveur. Voici quelques options pour commencer à utiliser :
- UFW, ou Uncomplicated Firewall, est installé par défaut sur certaines distributions Linux comme Ubuntu. Vous pouvez en savoir plus dans Comment configurer un pare-feu avec UFW sur Ubuntu 20.04
-
Si vous utilisez Red Hat, Rocky, ou Fedora Linux, vous pouvez lire Comment configurer un pare-feu avec firewalld pour utiliser leurs outils par défaut.
-
De nombreuses solutions de pare-feu logicieles telles que UFW et firewalld écrivent leurs règles configurées directement dans un fichier nommé
iptables
. Pour apprendre comment travailler directement avec la configuration deiptables
, vous pouvez consulter Iptables Essentials: Common Firewall Rules and Commands
. Notez que certains autres logiciels qui implémentent leurs propres règles de ports, tels que Docker, écrivent également directement dansiptables
, ce qui peut entrer en conflit avec les règles que vous créez avec UFW. Par conséquent, il est utile de savoir comment lire une configuration deiptables
dans des cas comme celui-ci.
Note : Beaucoup de fournisseurs de hébergement, dont DigitalOcean, vous permettront de configurer un pare-feu en tant que service qui fonctionne comme une couche externe gérée sur votre serveur(s) dans le nuage, plutôt qu’il n’est nécessaire d’implémenter le pare-feu directement. Ces configurations, qui sont implémentées au bord du réseau avec des outils gérés, sont souvent moins complexes en pratique, mais peuvent être plus difficiles à écrire et à répliquer. Vous pouvez se référer à la documentation de la pare-feu cloud de DigitalOcean.Veuillez également assurer que votre configuration de pare-feu par défaut bloque le trafic inconnu. ainsi, les nouvelles services que vous déployez ne seront pas accidentellement exposés à l’Internet. Au contraire, vous devrez explicitement permettre l’accès, ce qui vous obligera à évaluer comment un service est exécuté, accédé et qui devrait pouvoir le utiliser.
Réseaux VPC
Les réseaux virtuels privés (VPC) sont des réseaux privés pour les ressources de l’infrastructure. Les réseaux VPC offrent une connexion plus sécuritaire entre les ressources car les interfaces du réseau ne sont pas accessibles depuis l’internet public.
Comment les réseaux VPC améliorent la sécurité ?
Certains fournisseurs d’hébergement assignent par défaut à vos serveurs cloud une interface réseau publique et une interface réseau privée. Désactiver l’interface réseau publique de vos infrastructures sur certaines parties ne permettra que à ces instances de se connecter l’une à l’autre en utilisant leurs interfaces réseau privées sur une plateforme interne, ce qui signifie que le trafic entre vos systèmes ne passera pas par l’Internet public, où il pourrait être exposé ou intercepté.
En exposant conditionnellement uniquement quelques portes d’entrée Internet dédiées, également appelées ingress gateways, en tant que seul point d’accès entre les ressources de votre réseau VPC et l’Internet public, vous aurez plus de contrôle et de visibilité sur le trafic public se connectant à vos ressources. Les systèmes de supervision de conteneurs modernes tels que Kubernetes ont une conceptue bien définie des portes d’entrée, car ils créent beaucoup d’interfaces réseau privées par défaut, qui doivent être exposées sélectivement.
Comment implémenter les réseaux VPC
De nombreux fournisseurs de基础设施 cloud vous permettent de créer et d’ajouter des ressources à un réseau VPC dans leurs centres de données.
Note : Si vous utilisez DigitalOcean et souhaitez configurer votre propre porte d’entrée VPC, vous pouvez suivre le guide Comment configurer un Droplet comme une porte d’entrée VPC pour apprendre comment le faire sur les serveurs basés sur Debian, Ubuntu et CentOS.
La configuration manuelle de votre propre réseau privé peut nécessiter des configurations avancées du serveur et du savoir-faire en matière de réseaux. Une autre solution consiste à utiliser une connexion VPN entre les serveurs.
Les VPN et la gestion de réseaux privés
Un VPN, ou rseau virtuel privé, est un moyen de créer des connexions sécurisées entre des ordinateurs distants et d’afficher la connexion comme si elle était sur un réseau privé local. Cela permet de configurer vos services comme s’ils étaient sur un réseau privé et de se connecter aux serveurs distants via des connexions sécurisées.
Par exemple, les réseaux privés DigitalOcean permettent d’effectuer des communications isolées entre les serveurs dans le même compte ou l’équipe dans la même région.
Comment les VPN améliorent la sécurité ?
L’utilisation d’un VPN est un moyen de définir un réseau privé que seulement vos serveurs peuvent voir. La communication sera complètement privée et sécurisée. D’autres applications peuvent être configurées pour passer leur trafic sur l’interface virtuelle que le logiciel VPN expose. ainsi, seules les applications destinées à être utilisées par les clients sur l’internet nécessiteront d’être exposées sur le réseau public.
Comment implémenter des VPN
L’utilisation de réseaux privés nécessite généralement de prendre des décisions concernant vos interfaces réseau lors du déploiement initial de vos serveurs, et de configurer vos applications et votre pare-feu pour privilégier ces interfaces. Par comparaison, le déploiement de VPNs nécessite l’installation de.outils supplémentaires et la création de routes réseau supplémentaires, mais peut généralement être déployé par-dessus l’architecture existante. Chaque serveur sur un VPN doit disposer des données de sécurité et de configuration partagées nécessaires à l’établissement d’une connexion VPN. Une fois le VPN fonctionnel, les applications doivent être configurées pour utiliser le tunnel VPN.
Si vous utilisez Ubuntu ou CentOS, vous pouvez suivre le tutoriel Comment configurer et installer un serveur OpenVPN sur Ubuntu 20.04
.
Wireguard
est un autre déploiement VPN populaire. En général, les VPN suivent le même principe de limitation de l’entrée vers vos serveurs cloud en mettant en place une série d’interfaces de réseau privé derrière quelques points d’entrée, mais là où les configurations VPC sont généralement une considération de l’infrastructure de base, les VPN peuvent être déployés de manière plus ad-hoc.
Service d’audit
Une bonne sécurité implique d’analyser vos systèmes, de comprendre les surfaces d’attaque disponibles et de verrouiller les composants le mieux possible.
Le service d’audit permet de connaître les services en cours d’exécution sur un système donné, les ports qu’ils utilisent pour communiquer et les protocoles utilisés par ces services. Cette information peut vous aider à configurer les services qui devraient être accessibles publiquement, les paramètres de pare-feu, la surveillance et les alertes.
Comment le service d’audit améliore-t-il la sécurité ?
Chaque service en cours d’exécution, qu’il soit prévu pour un usage interne ou public, représente une surface d’attaque élargie pour les utilisateurs malveillants. Plus il y a de services en cours d’exécution, plus il y a de chances qu’une vulnérabilité affecte votre logiciel.
Une fois que vous avez une bonne idée des services réseaux en cours d’exécution sur votre machine, vous pouvez commencer à les analyser. Lorsque vous effectuez un audit de service, posez-vous les questions suivantes à propos de chaque service en cours d’exécution :
- Ce service devrait-il être en cours d’exécution ?
- Le service est-il en cours d’exécution sur des interfaces réseau où il ne devrait pas l’être ?
- L’audit de la sécurité des services nécessite-t-il une interface réseau publique ou privée ?
- Est-ce que les règles de pare-feu sont structurées pour permettre le trafic légitime à ce service ?
- Est-ce que les règles du pare-feu bloquent le trafic qui n’est pas légal ?
- Avez-vous un moyen d’obtenir des alertes de sécurité concernant les vulnérabilités pour chacun de ces services ?
L’examen de sécurité de cette nature doit être une pratique standard lors de la configuration de chaque nouveau serveur dans votre infrastructure. Les audits de service tous les quelques mois vous aideront également à détecter les services avec des confgurations qui peuvent avoir changé involontairement.
Comment implémenter l’audit des services
Pour auditer les services de réseau qui sont en cours sur votre système, utilisez la commande ss
. Un exemple de commande montrant le nom du programme, PID et les adresses utilisées pour écouter le trafic TCP et UDP est :
Les options p
, l
, u
, n
, et t
fonctionnent comme suit :
p
affiche le processus spécifique qui utilise un socket.l
affiche uniquement les sockets qui sont actuellement en attente de connexions.u
inclut les sockets UDP (en plus des sockets TCP).n
montre les valeurs de trafic numériques.- Le serveur inclut des socket TCP en plus des socket UDP.
Vous recevrez une sortie similaire :
OutputNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3))
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=69226,fd=6),("nginx",pid=69225,fd=6))
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=812,fd=4))
tcp LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=69226,fd=7),("nginx",pid=69225,fd=7))
Les colonnes principales qui nécessitent votre attention sont les colonnes Netid, Local Address:Port et Nom du processus. Si l’adresse locale est 0.0.0.0
, alors le service accepte des connexions sur toutes les interfaces de réseau IPv4. Si l’adresse est [:]
alors le service accepte des connexions sur toutes les interfaces de réseau IPv6. Dans l’exemple d’output ci-dessus, SSH et Nginx écoutent tous les interfaces publiques, sur les stack de réseaux IPv4 et IPv6.
Vous pouvez décider si vous voulez autoriser SSH et Nginx à écouter sur toutes les interfaces ou seulement sur une ou l’autre. En général, vous devriez déactiver les services qui se trouvent sur des interfaces non utilisées.
Mises à jour automatiques
La mise à jour régulière de vos serveurs est nécessaire pour assurer un bon niveau de sécurité. Les serveurs qui exécutent des versions anciennes et insecures de logiciels sont responsables d’une majorité des incidents de sécurité, mais les mises à jour régulières peuvent mitiger les vulnérabilites et prévenir les attaquants d’obtenir un point d’accroche sur votre serveur. Mises à jour automatiques permettent au système de mettre à jour la plupart des paquets automatiquement.
Comment les mises à jour automatiques améliorent-elles la sécurité ?
L’implémentation de mises à jour automatiques, c’est-à-dire indépendantes de l’intervention humaine, réduit le niveau de efforts nécessaires pour maintenir vos serveurs sécurisés et raccourcit la durée pendant laquelle vos serveurs peuvent être vulnérables à des bogues connus. En cas de vulnérabilité affectant le logiciel sur vos serveurs, vos serveurs resteront vulnérables pendant autant de temps que nécessitera pour vous de faire les mises à jour. Des mises à jour automatiques quotidiennes garantissent que vous n’oubliez pas de mettre à jour certains paquets et que tout logiciel vulnérable est corrigé dès que des correctifs sont disponibles.
Comment mettre en œuvre des mises à jour automatiques
Vous pouvez vous référer à Comment maintenir les serveurs Ubuntu à jour pour une vue d’ensemble de la mise en œuvre de mises à jour automatiques sur Ubuntu.
Infrastructure de clés publiques et cryptage SSL/TLS
La sécurité des communications sur l’Internet est essentielle pour protéger les données et assurer la confidentialité des transactions en ligne. La gestion de l’infrastructure publique (PKI), qui inclut la création, la gestion et le validation des certificats d’identification, est une approche efficace pour améliorer la sécurité des communications sur le Web. Les certificats SSL ou TLS peuvent être utilisés pour authentifier différents entités entre elles et établir des communications sécurisées.
Comment Fonctionne la PKI pour Améliorer la Sécurité ?
L’établissement d’une autorité de certification (CA) et la gestion des certificats pour chaque serveur dans votre infrastructure permettent à chacun des membres de votre infrastructure de valider l’identité des autres membres et d’établir des communications sécurisées. Cela peut prévenir les attaques du type « man-in-the-middle » où un attaquant imite un serveur dans votre infrastructure pour intercepter le trafic.Chaque serveur peut être configuré pour faire confiance à une autorité de certification centrale. Après cela, tous les certificats signés par cette autorité peuvent être implicitement acceptés.
Pour implémenter la PKI, vous devez suivre certains étapes :
Comment Implémenter la PKI ?
1. **Définition de stratégie de sécurité**: Déterminer les exigences de sécurité pour votre organisation et définir les objectifs de sécurité.
2. **Création d’une autorité de certification**: Créer une autorité de certification qui sera responsable de la création, de la gestion et de la validité des certificats.
3. **Gestion des certificats**: Gérer les certificats en place, incluant la distribution, la révocation et la surveillance des expirations.
4. **Configuration des serveurs**: Configurer les serveurs web et applications avec les certificats nécessaires et les paramètres de sécurité appropriés.
5. **Mise en place d’intégrité et de confiance**: Assurer que toutes les communications sont sécurisées et que les informations ne peuvent pas être interceptées ou falsifiées.
6. **Training et sensibilisation**: Formater les utilisateurs et les équipes techniques sur la sécurité des communications et la gestion des certificats.
7. **Révision régulière**: Revoir régulièrement la politique de sécurité et les procédures pour assurer leur pertinence et leur efficacité.
La mise en place d’une autorité de certificats et l’établissement des autres infrastructures publiques peuvent nécessiter un certain nombre d’efforts initiaux. De plus, la gestion des certificats peut créer une charge d’administration supplémentaire lorsque des nouveaux certificats doivent être créés, signés ou annulés.
Pour beaucoup d’utilisateurs, implémenter une autorité de certificats complète ne sera que lorsqu’ils atteignent un stade où le besoin d’infrastructure sécuritaire est suffisant. La sécurisation des communications entre les composants utilisant un VPN peut être une meilleure mesure intermédiaire jusqu’à ce que vous atteigniez un point où l’autorité de certificats est justifiée par les coûts administratifs supplémentaires.
Si vous souhaitez créer votre propre autorité de certificats, vous pouvez se référer aux guides Comment installer et configurer une autorité de certificats (CA) selon la distribution Linux que vous utilisez.
Conclusion
Les stratégies décrites dans ce tutoriel sont une synthèse de quelques étapes que vous pouvez suivre pour améliorer la sécurité de votre système. Il est important de reconnaitre que les mesures de sécurité perdent leur efficacité le plus longtemps que vous attendez à les mettre en place. La sécurité ne doit pas être une après-cœur et doit être implantée lorsque vous provisionnez votre infrastructure. Une fois que vous avez mis en place une base sécuritaire, vous pouvez commencer à déployer vos services et applications avec certaines assurances qu’ils fonctionnent dans un environnement sécuritaire par défaut.
Bien que disposant d’un environnement de sécurité solide, il est important de se rappeler que la sécurité est un processus en cours et itératif. Toujours assurez-vous de vous demander ce que les conséquences sécuritaires d’une modification pourraient être, et de prendre des mesures pour assurer que vous créerez toujours des paramètres par défaut et des environnements sécuritaires pour votre logiciel.
Source:
https://www.digitalocean.com/community/tutorials/7-security-measures-to-protect-your-servers