13 Mar 2015

Comprendre et installer votre serveur public en toute sécurité

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.

Installation depuis l’interface de votre hébergeur

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.

Les règles d’installation à partir de votre hébergeur :

  • Lorsque vous devez choisir le mot de passe pour le premier accès à votre serveur, générez-vous un mot de passe aléatoire que vous noterez dans un coin. Ce mot de passe devra être temporaire.
  • Une fois que votre serveur est installé, changez tout de suite le mot de passe. Choisissez obligatoirement un mot de passe d’au moins 10 caractères mélangeant les majuscules, minuscules, chiffres et ponctuations.
  • Si vous devez créer un compte standard, respectez les mêmes règles.

Les conséquences si ça n’est pas appliqué à la lettre :

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.

Premier accès et mise en place des sécurités sur votre serveur

Changement de votre mot de passe administrateur

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).

Installation de votre pare-feu

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.

Installation de fail2ban

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.

Configuration de SSH (recommandé)

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.

Ajout d’un compte standard

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.

Configuration d’un accès par certificat

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.

Conclusion

Voilà, votre serveur est prêt à être configuré et mis en production. Notez les points suivants afin de bien garder votre serveur sécurisé :

  • N’ouvrez que les ports requis et préférez toujours ceux qui sont sécurisés (https, pops, imaps,…)
  • Si un utisateur doit s’authentifier quelque part, assurez-vous que la communication sécurisée est en place (direction http vers https sur la page d’authentication par exemple).
  • N’hésitez pas à acheter des certificats d’autorités pour les protocoles fonctionnant avec SSL (https, pops, imaps,…).
  • Ne laissez pas ouvert au monde entier les interfaces d’administration de vos services (backend de wordpress, joola, …).
  • Évitez d’employer ou de laisser installé des outils de configuration web (Phpmyadmin, Webmin, Phpldapadmin, …). Ces outils peuvent contenir de nombreuses failles souvent connues par les attaquants.
  • Choississez des mots de passe aléatoires pour les services nécessitant une authentication même interne (MySQL, LDAP,…)

Tags: