Ce guide a pour objectif de vous permettre d’installer un serveur GNU Debian disponible en public, en évitant des erreurs simples, qui permettraient à une personne ou un script mal intentionné, de pénétrer dans votre système.
Cette partie s’applique bien entendu, si c’est votre hébergeur qui s’occupe de l’installation de base de votre système. Ce guide s’applique avec GNU Debian, mais le principe peut très bien s’appliquer avec d’autres systèmes.
Si vous ne respectez pas les règles ci-dessus, vous autoriserez un attaquant à rentrer trop facilement dans votre système, qui pourrait utiliser le brute-force. Cette technique consiste à essayer tout les mots de passe simple à l’aide d’un script. De plus, si vous ne changez pas le mot de passe une fois installé, vous prenez le risque que quelqu’un de mal intentionné, chez votre hébergeur, l’utilise pour se connecter à votre serveur. Le mot de passe d’installation initial est, en effet, très souvent stocké chez votre hébergeur, au moins de manière temporaire. C’est pourquoi il faut le changer au plus vite.
Voila, votre serveur est installé, et vous avez un accès SSH dessus. Comme expliqué ci-dessus, la première chose à faire est de changer le mot de passe administrateur. Authentifiez-vous, via votre client SSH, sur votre serveur en tant que root, puis tapez la commande suivante :
passwd root
Tapez ensuite votre nouveau mot de passe deux fois. Attention à toujours bien choisir un mot de passe compliqué (10 caractères en mélangeant les majuscules, minuscules, chiffres et ponctuations).
Tant que votre système n’a pas de pare-feu, vous n’êtes pas à l’abri d’une attaque via un service ouvert sur votre serveur. Pour cela, configurez un pare-feu. Nous allons utiliser ici ufw (uncomplicated firewall), qui est, comme son nom l’indique, très simple à configurer. Première étape, installez le paquet :
apt-get install ufw
Ensuite, autorisez le port ssh :
ufw allow ssh/tcp
Et enfin activez le pare-feu :
ufw enable
Validez par y afin de l’activer. ufw vous préviens en effet, qu’en cas de mauvaise configuration, vous pourriez perdre l’accès au serveur.
Fail2ban est un complément au pare-feu fonctionnant conjointement à ufw en permettant de banir l’adresse IP d’un attaquant, s’il tente plus de 5 fois un mauvais mot de passe. Son installation est simple et SSH est configuré par défaut.
apt-get install fail2ban
Une fois installé, le service est automatiquement activé. Vous pourrez voir, à tout moment, l’état des clients bloqués grâce à la commande :
fail2ban-client status ssh
Vous verrez ainsi, combien d’adresse IP ont été bloquées depuis le départ, et combien sont actuellement bloquées. Vous pouvez bien sur configurer d’autres services que SSH. Je vous invite à regarder la documentation pour plus d’informations.
Si vous êtes paranoiaque (ce que je vous conseille, avec un serveur public), vous pouvez également suivre les règles suivantes afin de garantir un maximum la sécurité de votre serveur.
L’accès par SSH avec le compte root n’est pas conseillé, car ça donne un point de départ à un éventuel attaquant. En créant un compte standard pour l’accès à votre serveur, vous minimisez les risques, car l’attaquant devra connaitre également votre identifiant avant de pouvoir se connecter à votre serveur.
Créez donc un compte standard :
adduser `identifiant de votre choix`
Désactivez la possibilité de se connecter avec root depuis SSH, modifiez le fichier de configuration avec nano /etc/ssh/sshd_config
, et ajoutez ou décommentez la ligne suivante :
PermitRootLogin no
Redémarrez SSH pour prendre en compte le changement :
service ssh restart
Vous pouvez également installer sudo, mais c’est moins sécurisé, puisque vous aurez besoin de deux mots de passe pour avoir l’accès root.
L’accès par certificat est une méthode encore plus sécurisée pour accéder à votre serveur. En effet, même en connaissant tous les mots de passe de votre serveur, un attaquant ne pourra s’y connecter.
La création d’un certificat est composé de deux fichiers ou clés - une publique et une privée - et doit être impérativement créée depuis votre poste client et jamais sur le serveur. Par poste client,j’entends le PC avec lequel vous effectuez vos connexions distantes. Créez la paire de clés à l’aide de :
ssh-keygen
Validez les choix par défaut, et choisissez un mot de passe pour votre clé privée. Ainsi, si quelqu’un arrive à copier les fichiers contenant vos clés, cette personne devra également connaitre le mot de passe pour les utiliser.
Copiez ensuite votre clé publique sur le serveur (ou les serveurs) avec :
ssh-copy-id `identifiant de votre serveur`@`ip ou nom d'hôte de votre serveur`
Enfin testez l’accès à votre serveur avec :
ssh `identifiant de votre serveur`@`ip ou nom d'hôte de votre serveur`
Magique, il ne vous demande même plus le mot de passe du serveur (uniquement le mot de passe de votre clé).
Note : une fois connecté avec votre compte normal, tapez
su
pour avoir l’accès root.
Maintenant, vous pouvez désactiver l’accès SSH par mot de passe, et activer uniquement l’accès par certificat. Modifiez la configuration de SSH avec la commande nano /etc/ssh/sshd_config
et ajoutez la ligne :
PasswordAuthentication no
Redémarrez SSH pour prendre en compte le changement :
service ssh restart
Attention : une fois cette méthode d’authentification en place, sauvegardez bien vos clés, privée et publique en lieu sûr. Pour exporter vos clés, copiez simplement les fichiers
~/.ssh/id_rsa
et~/.ssh/id_rsa.pub
.
Voilà, votre serveur est prêt à être configuré et mis en production. Notez les points suivants afin de bien garder votre serveur sécurisé :