7 mesures de sécurité pour protéger vos serveurs

introduction

Lors de la configuration de l’infrastructure, l’obtention de vos applications opérationnelles sera souvent votre principale préoccupation. Cependant, le fait de faire fonctionner vos applications correctement sans répondre aux besoins de sécurité de votre infrastructure pourrait avoir des conséquences dévastatrices à terme.

Dans ce guide, nous parlerons de certaines pratiques de sécurité de base qu'il vaut mieux configurer avant ou pendant la configuration de vos applications.

Clés SSH

Les clés SSH sont une paire de clés cryptographiques qui peuvent être utilisées pour s'authentifier auprès d'un serveur SSH, au lieu de connexions basées sur un mot de passe. Une paire de clés privée et publique est créée avant l'authentification. La clé privée est gardée secrète et sécurisée par l'utilisateur, tandis que la clé publique peut être partagée avec n'importe qui.

SSH Keys diagram

Pour configurer l’authentification de la clé SSH, vous devez placer la clé publique de l’utilisateur sur le serveur dans un répertoire spécial. Lorsque l'utilisateur se connecte au serveur, celui-ci demande la preuve que le client possède la clé privée associée. Le client SSH utilisera la clé privée pour répondre d'une manière qui prouve la propriété de la clé privée. Le serveur laissera ensuite le client se connecter sans mot de passe. Pour en savoir plus sur le fonctionnement des clés SSH, consultez notre articlehere.

Comment améliorent-ils la sécurité?

Avec SSH, tout type d'authentification, y compris l'authentification par mot de passe, est complètement crypté. Toutefois, lorsque les connexions par mot de passe sont autorisées, des utilisateurs malveillants peuvent tenter à plusieurs reprises d’accéder au serveur. Avec la puissance de calcul moderne, il est possible d'accéder à un serveur en automatisant ces tentatives et en essayant les combinaisons successives jusqu'à ce que le bon mot de passe soit trouvé.

La configuration de l'authentification par clé SSH vous permet de désactiver l'authentification par mot de passe. Les clés SSH contiennent généralement beaucoup plus de bits de données qu'un mot de passe, ce qui signifie qu'il y a beaucoup plus de combinaisons possibles qu'un attaquant devrait exécuter. De nombreux algorithmes de clé SSH sont considérés comme insaisissables par le matériel informatique moderne simplement parce qu’ils nécessiteraient trop de temps pour passer en revue les correspondances possibles.

Comment est-ce difficile à mettre en œuvre?

Les clés SSH sont très faciles à configurer et constituent le moyen recommandé de se connecter à distance à tout environnement de serveur Linux ou Unix. Une paire de clés SSH peut être générée sur votre ordinateur et vous pouvez transférer la clé publique sur vos serveurs en quelques minutes.

Pour savoir comment configurer les clés, suivezthis guide. Si vous pensez toujours avoir besoin d'une authentification par mot de passe, envisagez d'implémenter une solution telle quefail2ban sur vos serveurs pour limiter les devinettes de mot de passe.

Pare-feu

Un pare-feu est un logiciel (ou matériel) qui contrôle les services exposés au réseau. Cela signifie bloquer ou restreindre l'accès à tous les ports, à l'exception de ceux qui devraient être accessibles au public.

Firewall diagram

Sur un serveur typique, un certain nombre de services peuvent être exécutés par défaut. Ceux-ci peuvent être classés dans les groupes suivants:

  • Services publics accessibles à tous par Internet, souvent de manière anonyme. Un bon exemple est un serveur Web qui pourrait autoriser l’accès à votre site.

  • Services privés accessibles uniquement à un groupe de comptes autorisés ou à certains emplacements. Un exemple de ceci peut être un panneau de contrôle de base de données.

  • Services internes qui ne devraient être accessibles que depuis le serveur lui-même, sans exposer le service au monde extérieur. Par exemple, il peut s'agir d'une base de données n'acceptant que les connexions locales.

Les pare-feu peuvent garantir que l'accès à votre logiciel est restreint selon les catégories ci-dessus. Les services publics peuvent être laissés ouverts et accessibles à tous et les services privés peuvent être restreints en fonction de différents critères. Les services internes peuvent être complètement inaccessibles au monde extérieur. Pour les ports non utilisés, l'accès est entièrement bloqué dans la plupart des configurations.

Comment améliorent-ils la sécurité?

Les pare-feu sont une partie essentielle de toute configuration de serveur. Même si vos services eux-mêmes implémentent des fonctionnalités de sécurité ou sont limités aux interfaces sur lesquelles vous souhaitez les exécuter, un pare-feu constitue une couche supplémentaire de protection.

Un pare-feu correctement configuré restreindra l'accès à tout sauf aux services spécifiques dont vous avez besoin pour rester ouverts. L'exposition de quelques logiciels seulement réduit la surface d'attaque de votre serveur et limite le nombre de composants vulnérables à l'exploitation.

Comment est-ce difficile à mettre en œuvre?

Il existe de nombreux pare-feu disponibles pour les systèmes Linux, dont certains ont une courbe d'apprentissage plus abrupte que d'autres. En règle générale, toutefois, la configuration du pare-feu ne devrait prendre que quelques minutes et ne devrait se faire que lors de la configuration initiale de votre serveur ou lorsque vous apportez des modifications aux services proposés sur votre ordinateur.

Un choix simple est leUFW firewall. D'autres options sont d'utiliseriptables ou lesCSF firewall.

VPN et réseau privé

Les réseaux privés sont des réseaux uniquement disponibles pour certains serveurs ou utilisateurs. Par exemple, les réseaux privés DigitalOcean activentisolated communication between servers in the same account or team within the same region.
Un VPN, ou réseau privé virtuel, est un moyen de créer des connexions sécurisées entre des ordinateurs distants et de présenter la connexion comme s'il s'agissait d'un réseau privé local. Cela permet de configurer vos services comme s’ils se trouvaient sur un réseau privé et de connecter des serveurs distants via des connexions sécurisées.

VPN diagram

Comment améliorent-ils la sécurité?

Utiliser des réseaux privés plutôt que publics pour la communication interne est presque toujours préférable, étant donné le choix entre les deux. Toutefois, étant donné que d'autres utilisateurs du centre de données peuvent accéder au même réseau, vous devez toujours mettre en œuvre des mesures supplémentaires pour sécuriser la communication entre vos serveurs.

L'utilisation d'un réseau privé virtuel est un moyen efficace de définir un réseau privé que seuls vos serveurs peuvent voir. La communication sera entièrement privée et sécurisée. D'autres applications peuvent être configurées pour transmettre leur trafic sur l'interface virtuelle exposée par le logiciel VPN. De cette manière, seuls les services destinés à être consommés par les clients sur Internet public doivent être exposés sur le réseau public.

Comment est-ce difficile à mettre en œuvre?

Utiliser des réseaux privés dans un centre de données doté de cette fonctionnalité est aussi simple que d’activer l’interface lors de la création de votre serveur et de configurer vos applications et votre pare-feu pour utiliser le réseau privé. N'oubliez pas que les réseaux privés du centre de données partagent un espace avec d'autres serveurs utilisant le même réseau.

En ce qui concerne le VPN, la configuration initiale est un peu plus complexe, mais la sécurité accrue en vaut la peine dans la plupart des cas d'utilisation. Chaque serveur sur un réseau privé virtuel doit disposer des données de sécurité et de configuration partagées nécessaires pour établir la connexion sécurisée installée et configurée. Une fois le VPN opérationnel, les applications doivent être configurées pour utiliser le tunnel VPN. Pour en savoir plus sur la configuration d'un VPN pour connecter en toute sécurité votre infrastructure, consultez nosOpenVPN tutorial.

Infrastructure à clé publique et cryptage SSL / TLS

L'infrastructure à clé publique, ou PKI, fait référence à un système conçu pour créer, gérer et valider des certificats permettant d'identifier des personnes et de chiffrer des communications. Les certificats SSL ou TLS peuvent être utilisés pour authentifier différentes entités. Après authentification, ils peuvent également être utilisés pour établir une communication cryptée.

SSL diagram

Comment améliorent-ils la sécurité?

L'établissement d'une autorité de certification et la gestion des certificats pour vos serveurs permettent à chaque entité de votre infrastructure de valider l'identité des autres membres et de chiffrer leur trafic. Cela peut empêcher les attaques intercepteurs lorsqu'un attaquant imite un serveur de votre infrastructure pour intercepter le trafic.

Chaque serveur peut être configuré pour faire confiance à une autorité de certification centralisée. Ensuite, tout certificat signé par l'autorité peut être implicitement approuvé. Si les applications et les protocoles que vous utilisez pour communiquer prennent en charge le cryptage TLS / SSL, il s'agit d'un moyen de crypter votre système sans la surcharge d'un tunnel VPN (qui utilise également souvent SSL en interne).

Comment est-ce difficile à mettre en œuvre?

La configuration d'une autorité de certification et la configuration du reste de l'infrastructure à clé publique peuvent nécessiter beaucoup d'effort initial. En outre, la gestion des certificats peut créer une charge administrative supplémentaire lorsque de nouveaux certificats doivent être créés, signés ou révoqués.

Pour de nombreux utilisateurs, la mise en place d'une infrastructure à clé publique à part entière sera d'autant plus utile que leurs besoins en infrastructure augmentent. Sécuriser les communications entre les composants utilisant VPN peut constituer une bonne mesure d’espacement jusqu’à ce que vous atteigniez un point où l’ICP valait les coûts d’administration supplémentaires.

Audit de service

Jusqu'à présent, nous avons discuté de certaines technologies que vous pouvez mettre en œuvre pour améliorer votre sécurité. Cependant, une grande partie de la sécurité consiste à analyser vos systèmes, à comprendre les surfaces d'attaque disponibles et à verrouiller les composants du mieux possible.

L'audit de service est un processus permettant de déterminer quels services sont exécutés sur les serveurs de votre infrastructure. Souvent, le système d'exploitation par défaut est configuré pour exécuter certains services au démarrage. L'installation de logiciels supplémentaires peut parfois générer des dépendances également démarrées automatiquement.

Service auditing diagram

L'audit de service est un moyen de savoir quels services sont exécutés sur votre système, quels ports ils utilisent pour la communication et quels protocoles sont acceptés. Ces informations peuvent vous aider à configurer les paramètres de votre pare-feu.

Comment améliore-t-il la sécurité?

Les serveurs lancent de nombreux processus à des fins internes et pour gérer des clients externes. Chacun de ceux-ci représente une surface d'attaque étendue pour les utilisateurs malveillants. Plus vous utilisez de services, plus il y a de chances que votre logiciel accessible soit vulnérable.

Une fois que vous avez une bonne idée des services réseau en cours d'exécution sur votre ordinateur, vous pouvez commencer à analyser ces services. Voici quelques questions que vous voudrez vous poser:

  • Ce service devrait-il fonctionner?

  • Le service fonctionne-t-il sur des interfaces dont il n'a pas besoin? Devrait-il être lié à une seule adresse IP?

  • Les règles de votre pare-feu sont-elles structurées de manière à permettre le trafic légitime à ce service?

  • Les règles de votre pare-feu bloquent-elles le trafic qui n’est pas légitime?

  • Avez-vous une méthode pour recevoir des alertes de sécurité concernant les vulnérabilités de chacun de ces services?

Ce type d’audit de service doit être une pratique courante lors de la configuration d’un nouveau serveur dans votre infrastructure.

Comment est-ce difficile à mettre en œuvre?

Faire un audit de service de base est incroyablement simple. Vous pouvez découvrir quels services écoutent les ports sur chaque interface en utilisant la commandenetstat. Voici un exemple simple montrant le nom du programme, le PID et les adresses utilisées pour écouter le trafic TCP et UDP:

sudo netstat -plunt

Vous verrez une sortie qui ressemble à ceci:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      887/sshd
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      919/nginx
tcp6       0      0 :::22                   :::*                    LISTEN      887/sshd
tcp6       0      0 :::80                   :::*                    LISTEN      919/nginx

Les principales colonnes auxquelles vous devez faire attention sontProto,Local Address etPID/Program name. Si l'adresse est0.0.0.0, le service accepte les connexions sur toutes les interfaces.

Audit de fichiers et systèmes de détection d'intrusion

L'audit de fichier est le processus de comparaison du système actuel avec un enregistrement des fichiers et des caractéristiques de fichier de votre système lorsqu'il est dans un état connu. Ceci est utilisé pour détecter les modifications éventuellement autorisées sur le système.

File audit diagram

Un système de détection d'intrusion, ou IDS, est un logiciel qui surveille un système ou un réseau à la recherche d'activités non autorisées. De nombreuses implémentations IDS basées sur l'hôte utilisent l'audit de fichier pour vérifier si le système a été modifié.

Comment améliorent-ils la sécurité?

Semblable à l'audit de niveau de service ci-dessus, si vous voulez vraiment sécuriser un système, il est très utile de pouvoir effectuer des audits au niveau des fichiers de votre système. Cela peut être effectué périodiquement par l'administrateur ou dans le cadre d'un processus automatisé dans un IDS.

Ces stratégies sont parmi les seuls moyens d’être absolument sûr que votre système de fichiers n’a pas été altéré par un utilisateur ou un processus quelconque. Pour de nombreuses raisons, les intrus souhaitent souvent rester cachés afin de pouvoir continuer à exploiter le serveur pendant une période prolongée. Ils pourraient remplacer les fichiers binaires par des versions compromises. Effectuer un audit du système de fichiers vous indiquera si l’un des fichiers a été modifié, ce qui vous permettra d’avoir confiance en l’intégrité de l’environnement de votre serveur.

Comment est-ce difficile à mettre en œuvre?

L'implémentation d'un IDS ou la réalisation d'audits de fichiers peuvent être un processus assez intensif. La configuration initiale implique d'informer le système d'audit de toutes les modifications non standard apportées au serveur et de définir les chemins à exclure pour créer une lecture de base.

Cela rend également les opérations quotidiennes plus impliquées. Cela complique les procédures de mise à jour car vous devrez revérifier le système avant d'exécuter les mises à jour, puis recréer la base de référence après l'exécution de la mise à jour afin de détecter les modifications apportées aux versions du logiciel. Vous devrez également décharger les rapports vers un autre emplacement afin qu'un intrus ne puisse pas modifier l'audit pour couvrir ses traces.

Bien que cela puisse augmenter votre charge d’administration, la possibilité de vérifier votre système par rapport à une copie réputée bonne est l’un des seuls moyens de s’assurer que les fichiers n’ont pas été modifiés à votre insu. Certains systèmes populaires d'audit / de détection d'intrusions de fichiers sontTripwire etAide.

Environnements d'exécution isolés

Isoler les environnements d'exécution fait référence à toute méthode dans laquelle des composants individuels sont exécutés dans leur propre espace dédié.

Isolated environments diagram

Cela peut signifier séparer vos composants d'application discrets sur leurs propres serveurs ou faire référence à la configuration de vos services pour qu'ils fonctionnent dans des environnements ou des conteneurschroot. Le niveau d’isolement dépend fortement des exigences de votre application et des réalités de votre infrastructure.

Comment améliorent-ils la sécurité?

Isoler vos processus dans des environnements d’exécution individuels augmente votre capacité à isoler tous les problèmes de sécurité pouvant survenir. De la même manière quebulkheads et les compartiments peuvent aider à contenir les brèches de coque dans les navires, la séparation de vos composants individuels peut limiter l'accès d'un intrus à d'autres éléments de votre infrastructure.

Comment est-ce difficile à mettre en œuvre?

Selon le type de confinement que vous choisissez, l'isolement de vos applications peut être relativement simple. En conditionnant vos composants individuels dans des conteneurs, vous pouvez rapidement obtenir une certaine isolation, mais notez que Docker ne considère pas sa conteneurisation comme une fonctionnalité de sécurité.

La configuration d'un environnementchroot pour chaque pièce peut également fournir un certain niveau d'isolation, mais ce n'est pas non plus une méthode d'isolation infaillible car il existe souvent des moyens de sortir d'un environnementchroot. Le transfert de composants vers des machines dédiées constitue le meilleur niveau d'isolation. Dans de nombreux cas, il peut s'avérer le plus simple, mais peut coûter plus cher pour les machines supplémentaires.

Conclusion

Les stratégies décrites ci-dessus ne sont que certaines des améliorations que vous pouvez apporter pour améliorer la sécurité de vos systèmes. Il est important de reconnaître que, même s’il vaut mieux tard que jamais, l’efficacité des mesures de sécurité diminue lorsque vous attendez plus longtemps pour les mettre en œuvre. La sécurité ne peut pas être une réflexion après coup et doit être mise en œuvre dès le début aux côtés des services et des applications que vous fournissez.