La bonne configuration pour protéger un serveur

Pour jouir d’une liberté de configuration maximale, l’hébergement de votre propre serveur reste la solution optimale. Les serveurs racine dédiés (Dedicated Root Servers), qui peuvent être loués auprès de nombreux fournisseurs et qui permettent d’avoir accès au compte racine (root account), constituent une alternative adéquate. Mais les étapes de gestion de base comme l’installation, la structuration et la maintenance du serveur demeurent du ressort du locataire, comme dans le cas de l’auto-hébergement. Avec ce type d’offre de serveur, le fournisseur ne prend généralement en charge qu’une installation initiale du système d’exploitation si cela est nécessaire. 

Indépendamment de la solution d’hébergement choisie, il est recommandé d’être prudent et responsable dans la conception et dans l’utilisation du compte racine. À cet égard, la sécurité joue un rôle essentiel : premièrement, une procédure erronée dans la zone racine est assez difficile à traiter et deuxièmement, une configuration correcte et adaptée constitue la base idéale pour renforcer la sécurité du serveur, sa stabilité et sa performance. Par exemple, pour sécuriser un serveur dédié et le protéger des accès externes, la modification obligatoire du mot de passe n’est que l’une des nombreuses mesures nécessaires pour renforcer la sécurité du serveur.

Installation minimale et mot de passe sécurisé

Avant même de commencer avec les précautions réelles et la configuration de votre serveur en toute sécurité, vous pouvez influencer le potentiel de sécurité futur de votre projet Web. Que vous ayez choisi un système Windows ou Linux, le principe suivant s’applique à l’installation : un serveur ne doit contenir que le logiciel dont il a besoin pour accomplir ses tâches. Ceci s’explique par le fait que chaque application installée constitue un potentiel risque de sécurité, et peut avoir un impact négatif sur la performance. Afin de restreindre la zone d’attaque potentielle pour les cybercriminels, il est conseillé d’installer ou d’activer uniquement les composants systèmes nécessaire, et de n’utiliser que des logiciels supplémentaires vérifiés.

A la fin de l’installation, vous devez d’abord définir un mot de passe racine (système Linux). Par défaut, aucune valeur n’est définie et le compte administrateur est bloqué jusqu’à ce que vous effectuiez une entrée correspondante. Mais en règle générale, le système d’exploitation correspondant vous invite automatiquement après l’installation à créer un compte utilisateur avec un mot de passe, qui fonctionne désormais comme accès racine. Si jamais vous avez loué votre serveur auprès d’un fournisseur et que vous avez reçu un login racine existant, il est recommandé de changer le mot de passe. Pour ce faire, vous pouvez vous connecter à votre serveur via SSH (à partir de Linux) ou PuTTY (à partir d’un système Windows) et saisir la commande suivante dans le terminal approprié pour une connexion racine afin de changer le mot de passe :

passwd

Vous pouvez définir le mot de passe, qui nécessite d’être vérifié. Assurez-vous de choisir un mot de passe aussi long que possible, avec des lettres mais aussi des chiffres et des caractères spéciaux. II peut être intéressant ici d’utiliser un gestionnaire de mots de passe pour le retrouver à tout moment en cas de doute. Ensuite, essayez de vous connecter à la nouvelle connexion racine. Si cela fonctionne comme vous le souhaitez, vous pouvez déconnecter la connexion SSH utilisée au début.

Remarque

si votre système a déjà un mot de passe racine que vous ne connaissez pas, vous pouvez le changer dans le mode recovery (récupération). Pour le démarrer, vous pouvez maintenir la touche Maj enfoncée pendant le processus de démarrage. Via l’entrée des éléments de menu, sélectionnez root (racine). Vous pouvez ainsi opérer automatiquement en tant qu’administrateur et effectuer le changement de mot de passe souhaité.

Changement du port SSH

Pour l’accès au serveur via SSH, le port 22 est dédié par défaut, de sorte qu’il est automatiquement configuré lorsque vous avez réinstallé votre système. Les hackers qui recherchent des systèmes perméables feront donc principalement leurs tentatives d’attaque via ce port avec surtout des tentatives de connexion automatisées. Ainsi, en définissant simplement un port différent pour les connexions distantes cryptés, vous minimisez considérablement le risque d‘accès non désiré. Il suffit pour cela simplement d’ouvrir le fichier de configuration SSH sshd_config avec n’importe quel éditeur de texte. L’exemple de commande de code suivant appelle le fichier à l’aide de l’éditeur Linux nano par défaut :

nano /etc/ssh/sshd_config

Il faut rechercher la ligne appropriée et remplacer le port 22 par un numéro de votre choix. Cependant, il est nécessaire de prendre en compte le fait qu’il existe plusieurs ports standards pour d’autres services (comme le port 80 pour HTTP) que vous ne devriez pas utiliser si possible pour cette raison. Ainsi, il est recommandé de jeter d’abord un coup d’œil à la liste des ports logiciels (RCP et UDP), maintenue par l’IANA (Internet Assigned Numbers Authority) et disponible sur sa page d’accueil officielle. Vous pouvez aussi afficher la liste dans le fichier /etc/services.

Remarque

pour que les changements dans sshd_config deviennent actifs, il est nécessaire de redémarrer le service SSH. Sous Debian, ceci s’opère avec la commande « /etc/init.d/ssh restart ». En tant qu’utilisateur Ubuntu, vous pouvez redémarrer le service en utilisant « service ssh restart ».

Désactiver la connexion SSH pour les utilisateurs root

Pour sécuriser votre serveur, il est aussi conseillé de bloquer la connexion directe SSH pour le compte racine. Sinon, un attaquant qui s’est emparé du mot de passe pourrait utiliser le compte « root » pour accéder à distance au serveur et bloquer la connexion directe SSH. Avant de pouvoir réaliser cette tâche, vous avez toutefois besoin d’au moins un compte utilisateur supplémentaire en plus de l’utilisateur root, qui peut se connecter au serveur afin de ne pas être complètement bloqué hors du système. Si vous n’avez pas encore créé de profil utilisateur correspondant, vous pouvez utiliser la commande suivante :

useradd -g users -d /home/nutzer1 -m -s /bin/bash nutzer1

Vous créez ainsi le compte utilisateur utilisateur1, qui est ajouté au groupe users (-g). De plus, le répertoire personnel /home/utilisateur1 est affecté à ce profil utilisateur (-d). La commande (-s /bin/bash) spécifie le bash shell comme shell par défaut. Vous pouvez ensuite définir un mot de passe sécurisé pour ce nouveau compte login :

passwd nutzer1

À présent, vous pouvez tester si la connexion fonctionne avec le compte utilisateur créé et l’utiliser seulement en cas de succès avec le projet actuel (en vous bloquant hors du compte racine). Pour cela, il est nécessaire d’ouvrir à nouveau le fichier de configuration SSH sshd_config, que vous pouvez ouvrir avec l’éditeur de votre choix. Il suffit de rechercher l’entrée « PermitRootLogin yes » et de la remplacer par « PermitRootLogin no ». Vient ensuite le redémarrage du service SSH via la commande suivante :

/etc/init.d/ssh restart (alternativ: service ssh restart)

L’accès à distance au compte racine n’est plus possible. Il vous suffit de vous connecter à l’aide des profils utilisateurs que vous avez créés et de modifier à tout moment le compte racine (après connexion) à l’aide de la commande, si vous en avez à nouveau besoin:

su

La ligne AllowGroups dans le fichier de configuration permet également de spécifier quels utilisateurs sont autorisés à se connecter au serveur via SSH. Pour cela, il vous suffit simplement de créer un groupe (addgroup) et d’y ajouter les utilisateurs souhaités (adduser). Vous complétez ensuite le nom du groupe sélectionné dans sshd_config (par exemple AllowGroups ssh_utilisateur).

Remarque

une alternative confortable pour le verrouillage de la connexion racine est l’option d’interdire complètement la connexion utilisateur avec un mot de passe et d’utiliser à la place l’authentification à clé publique avec des clefs SSH.

Notifications par email pour vous avertir des connexions SSH

Cependant, en cas  d’accès SSH à votre serveur, vous devriez garder un œil sur toutes les activités distantes par la suite. Vous pouvez ainsi déterminer si vous avez sécurisé correctement le service SSH de votre serveur. En outre, la surveillance de ces activités signifie que vous êtes averti à un stade précoce par une bonne surveillance des connexions établies en cas d’accès non autorisé et vous permet de prendre les contre-mesures appropriées. Il suffit pour cela d’un simple script shell qui envoie automatiquement un email de notification à votre adresse à chaque fois qu’une connexion à distance à votre serveur est effectuée. 

Un script correspondant (ici : /opt/shell-login.sh), que vous pouvez facilement créer vous-même, ne doit contenir pour ce faire que le code suivant :

#!/bin/bash

echo "Login auf $(hostname) am $(date +%Y-%m-%d) um $(date +%H:%M)"
echo "Benutzer: $USER"
echo
finger

Ajoutez ensuite au fichier /etc/profile la ligne suivante :

/opt/shell-login.sh | mailx -s "SSH-Log-in auf IHR-HOSTNAME" mailadresse@example.com

Avec cette entrée, vous vous assurez que le script soit exécuté et en cas de connexion réussie, vous recevrez un email de notification à l’adresse désirée. La condition préalable est d’affecter le script au droit 755, ce que vous pouvez faire avec la commande suivante :

chmod 755 /opt/shell-login.sh
Remarque

si un utilisateur établit une connexion SSH à l’aide d’un programme comme WinSCP qui n’effectue pas de connexion complète, le script shell décrit ici n’envoie pas d’email !

Désactivation des ports inutilisés

Les ports ouverts ne posent généralement pas de risque de sécurité particulier. De plus, ils sont parfois nécessaires pour la communication avec les différents services et applications ; il est même obligatoire que certains ports soient activés par défaut, comme les ports 80 et 443 pour les connexions HTTP ou HTTPS, ou encore le port SSH que vous avez sélectionné. Si vous avez réalisé une installation système minimale avec un petit nombre d’applications tierces, le nombre de ports supplémentaires requis est limité. Ces interfaces ouvertes ne deviennent un risque que si les programmes comportent des lacunes en matière de sécurité et que les pirates en profitent. Plus le nombre d’applications est élevé, plus le danger potentiel augmente.

Pour cette raison, il est donc logique de protéger votre serveur contre de telles attaques, en bloquant tous les ports ouverts inutiles. Presque tous les systèmes d’exploitation actuels ont déjà pour cela installé par défaut l’outil approprié avec le logiciel de filtrage de paquets iptables. L’outil permet en effet de créer des règles fixes pour réguler le trafic, y compris la possibilité de définir les ports souhaités ou indésirables. Vous trouverez une brève introduction au programme de filtrage avec des instructions pour configurer un pare-feu rudimentaire pour votre système dans notre tutoriel sur ce thème.

Mises à jour régulières du logiciel

De base, aucun logiciel n’est exempt des vulnérabilités de sécurité mentionnées dans la section précédente. Cependant, les cybercriminels doivent d’abord découvrir la mauvaise programmation exploitable avant de pouvoir lancer une attaque. Généralement, les vulnérabilités connues sont comblées en très peu de temps à l’aide de la publication des mises à jour. En s’informant régulièrement des nouvelles mises à jour du système d’exploitation et des programmes installés, et en les effectuant en temps voulu, vous assurerez la meilleure protection possible à votre serveur. Presque tous les systèmes de serveur permettent de télécharger et d’installer automatiquement des mises à jour de sécurité importantes et en arrière-plan.

Par exemple, si vous souhaitez sécuriser un serveur Windows avec des mises à jour automatiques, vous pouvez définir des politiques spécifiques pour le processus de mise à jour dans « Windows Update ». De cette façon, vous pouvez configurer la fréquence et la date de vérification des mises à jour, si vous voulez que les mises à jour soient installées et enfin quand le système doit être redémarré. Il existe des scripts spécifiques pour les systèmes Linux comme apt-listchanges ou apticron, qui vous informent quotidiennement sur les nouveaux progiciels disponibles et les téléchargent. D’autres scripts comme unattended-upgrades se chargent de l’installation automatique.

Remarque

assurez-vous de garder une trace des mises à jour qui sont effectuées, même avec un processus automatisé. De cette façon, vous pouvez mieux comprendre et réagir aux erreurs résultant du processus de mises à jour.

Sécuriser les serveurs Windows et Linux contre les attaques par force brute

Les hackers qui veulent accéder à votre serveur ou aux applications qui sont exécutées sur celui-ci ont à la base plusieurs options pour attaquer. L’un des types d’attaques les plus simples et les plus courants est la méthode dite par force brute. Dans ce cas, le pirate essaie d’accéder aux mots de passe à l’aide d’un outil qui essaie une option de connexion après l’autre. Cependant, plus vous avez été prévoyant et prudent dans l’attribution de vos mots de passe, moins il est probable que cette méthode soit efficace. Gardez à l'esprit que, surtout si vous offrez un service avec une option d'enregistrement, vous devez supposer que tous les utilisateurs ne seront pas aussi consciencieux et prudents qu’il est recommandé.

Heureusement, aucun logiciel complexe et coûteux n’est nécessaire pour se protéger contre de telles attaques : comme chaque tentative de connexion est enregistrée, traitée et enregistrée dans des fichiers journaux par votre serveur, des outils d’analyse simples peuvent vous aider. Fail2ban (Linux-/POSIX-Systeme) ou RdpGuard (Windows) vérifient les fichiers journaux pertinents, détectent les comportements inhabituels et permettent de bloquer l’adresse IP des utilisateurs suspects. Vous pouvez individuellement régler le nombre de tentatives infructueuses et l’imposition d’un verrouillage ou la durée de la validité.

Remarque

vous pouvez aussi aller plus loin et configurer une authentification à deux facteurs pour vous connecter à votre serveur afin de sécuriser encore davantage la connexion. Dans cette procédure, en plus de la saisie du mot de passe, un autre composant est nécessaire pour la connexion et il doit être en possession propre pour l’utiliser (liste TAN, smartphone, carte à puce, etc.)

Configurer et sécuriser le serveur : définir les outils de surveillance dès le départ

Si vous souhaitez réaliser la sécurisation d’un serveur, les mesures répertoriées contre les attaques externes sont importantes. Cependant, il est tout aussi important de s’assurer que l’interaction entre le matériel et le logiciel fonctionne sans accroc. Ce n’est en aucun cas une tâche ponctuelle qui se termine après le démarrage réussi de votre environnement serveur : il s’agit au contraire une tâche sur le long terme qu’il ne faut jamais perdre de vue. Ceci est contraignant, c’est pourquoi il est recommandé d’utiliser dès le départ des outils d’aide qui surveillent tous les processus sur votre serveur et alertent en cas d’évènements suspects.

Monit est l’un des programmes de ce type pouvant être configuré facilement et rapidement. Il peut être facilement installé dans de nombreuses distributions Linux via l’administration des paquets. L’application open source (licence GNU-AGPL) surveille les processus, fichiers, Cloud, hôtes, programmes ou scripts. De plus, les ressources systèmes comme le CPU, la mémoire et l’utilisation absolue peuvent aussi être surveillées. Dans le fichier de configuration du moniteur, vous pouvez définir des valeurs ou des évènements qui conduisent à une notification par email. Si vous avez besoin de plus de détails, le logiciel de surveillance Nagios est vivement recommandé. Il est plus complexe mais reste open source dans sa version de base, et peut être étendu par différents plugins. À l’aide d’une machine virtuelle, il est également possible de l’utiliser sur une plateforme Windows.

De l’intérêt de réaliser des sauvegardes

Avec les suggestions de configurations recommandées, vous pouvez augmenter de manière significative la sécurité du serveur. Les différents paramétrages pour le processus de connexion et la restriction du compte racine confèrent à votre serveur un très haut niveau de sécurité en combinaison avec des mises à jour continues, des outils de surveillance et des logiciels de sécurité obligatoires. Cependant, même la meilleure configuration et maintenance dédiée ne peuvent assurer une protection totale du serveur. Les erreurs de programmes, les pannes matérielles ou la négligence personnelle peuvent facilement entrainer la perte de données dans le pire des cas. Il s’agit donc donc d’établir une stratégie de sauvegarde appropriée qui vous permettra, dans un tel scénario, de récupérer les fichiers.

Vous avez l’embarras du choix en ce qui concerne les outils puissants pour vous aider non seulement à créer des copies de sauvegarde mais aussi pour pouvoir les importer : une application gratuite qui doit être cependant mentionnée est le programme de synchronisation rsync, qui porte le nom du protocole du même nom et reste disponible en différentes versions pour presque toutes les plateformes courantes (MacOs, Windows, Linux). Cet outil permet de maintenir à jour la copie des données de votre serveur en reprenant toutes les modifications apportées à l’original en temps réel. La sauvegarde générale du serveur inclut également la sauvegarde des bases de données au programme obligatoire.

Remarque

pour une protection de sauvegarde la plus sûre possible, il est recommandé que le répertoire de sauvegarde soit situé sur un support de stockage externe (disque dur portable, autre serveur, etc.) et non sur le serveur que vous souhaitez sauvegarder.