Select Page

Vous êtes un geek curieux et avez envie de tester des solutions open source? Jitsi, Bitwarden, Unifi ? Ou carrément un reverse proxy pour gérer plusieurs serveurs derrière une seule adresse IP? La première étape consiste souvent à installer une machine tournant sous Linux, si possible sans interface graphique pour ne pas surcharge le système avec des applications inutiles qui consomment des ressources.

Mais quelle distribution Linux? Comment la sécuriser suffisamment pour ne pas créer une passoire sur Internet? Je vous propose une installation d’Ubuntu 20.04 Serveur, dans sa version LTS (Long Term Support) qui vous garantit des mises à jour de sécurité durant de longues années. De plus, cette distribution est basée sur Debian et garantit la disponibilité de pratiquement toutes les applications en version pré-compilées. Il existe bien entendu de multitudes d’autres distributions Linux tout aussi qualitatives, mais Ubuntu est un bon choix de départ bien équilibré.

Vous êtes prêt à vous lancer? Suivez le guide!

Partie 1: Installation d’Ubuntu 20.04 LTS

Il me faut une machine

Eh oui. Heureusement, il existe de nombreuses possibilités pour faire cette installation. Sur un vieux PC qui traine dans un coin, comme machine virtuelle sur votre ordinateur (sous VMWare, Parallels, VirtualBox, KVM, …) ou dans le cloud (Digital Ocean, AWS, Vultr, Infomaniak, …).
Pour ce tuto, je vais utiliser Proxmox, un serveur de virtualisation basé sur KVM que j’ai déployé dans le Lab Ansam pour faire des tests. Un autre tuto pour installer Proxmox suivra, promis!

Télécharger l’image d’installation

Rendez vous sur le site d’Ubuntu et téléchargez la version .iso du serveur (Option 2: Manual server installation). J’ai choisi la version 64 bits pour processeurs X64, à adapter en fonction de votre hardware. Le téléchargement fait >900 MB.

Création de la machine virtuelle (VM)

Dans Proxmox, il faut tout d’abord uploader l’image iso d’Ubuntu sur le serveur. Ensuite, il faut créer une VM, lui donner un nom, sélectionner l’iso comme disque d’installation, créer un disque local (j’ai fait un disque de 32 GB pour le tuto), lui attribuer un CPU (j’ai choisi 2 coeurs virtuels), de la RAM (4 GB pour cet exemple) et une carte réseau (bridge mode, pour un accès direct au LAN).

Il n’y a plus qu’à cliquer sur “Finish” et la VM sera créée et démarrée.

Installation d’Ubuntu

Comme j’ai coché la case “Start after created”, la machine démarre tout seul et boot sur le disque d’installation.

Je choisi en général l’anglais, car les traductions sont souvent… créatives 😉
Ensuite vient le choix du clavier (Switzerland – French, dans mon cas) et la configuration réseau. Par défaut, Ubuntu obtient une adresse DHCP sur votre réseau. Pour une configuration d’un serveur, je vous conseille une adresse IP fixe (hors de range attribué par le serveur DHCP…) ou une réservation DHCP pour éviter que son IP ne change à chaque reboot.

J’entre donc les configuration IP suivantes pour attribuer à mon serveur l’adresse 192.168.1.200 sur mon réseau. Il faudra bien évidemment adapter votre configuration en fonction de votre réseau (IP, Gateway, DNS, etc).

Sur les écrans suivants, vous pouvez laisser le proxy vide et garder la valeur par défaut pour le serveur d’updates.
Pour le formatage du disque, vous pouvez laisser les valeurs par défaut, ce qui va complètement effacer le disque virtuel. C’est OK, vu qu’on vient de le créer et qu’il n’y a rien dessus.

Finalement, créez votre compte utilisateur avec un mot de passe fort (non, Password1234 n’est pas un mot de passe fort ;-))

Nous y sommes presque: il faut encore installer le serveur SSH (pour pouvoir accéder à la machine ultérieurement via le Terminal) et ne sélectionnez rien des installations optionnelles, à moins de savoir exactement ce qu’il vous faut.

L’installation s’achève tout seul et installe automatiquement les dernières mises à jour. A la fin de l’installation, il faudra redémarrer et enlever le disque d’installation pour éviter que le système ne reboot dessus en lieu et place du disque interne.

Une fois que le système a redémarré, nous allons faire la suite avec le Terminal et ne plus utiliser directement “l’écran” du serveur.

Partie 2: Configuration d’Ubuntu

Le Terminal

Le plus simple et le plus pratique pour gérer un serveur Linux à distance est d’utiliser un terminal et se connecter par SSH.
Sur Mac, c’est simple, le terminal est déjà installé sur votre machine. Il suffit de lancer Spotlight, taper “Terminal” et appuyer sur Entrée. Sur Windows, je vous recommande d’installer PuTTY ou la version de Terminal disponible sur le Windows Store.
Etant sur Mac, je vais utiliser Terminal, mais toutes les commandes fonctionnent de manière identique sur PuTTY ou Terminal Windows.

La configuration des utilisateurs

Comme vous l’avez vu lors de l’installation, nous avons installé un système minimaliste. C’est une règle de base de sécurité: n’installer que ce dont on a besoin. Plus on installe des services inutiles, plus on expose des applications qui peuvent avoir des problèmes de sécurité. Alors si en plus on n’a pas besoin de ces applications, c’est vraiment idiot.

Une deuxième règle de sécurité sur Linux est de ne pas utiliser au quotidien l’utilisateur root (super utilisateur sur Linux qui a tous les droits). Il vaut mieux se servir d’un utilisateur standard et faire une escalation de droits au moment où on a besoin à l’aide de la commande “sudo”.

Une troisième règle est de ne pas se contenter d’un couple “username/password” pour se logguer sur le système, mais d’y adjoindre une clé privée. Ainsi, si quelqu’un trouve votre username et password, il faudra encore qu’il ait votre clé privée pour pouvoir se connecter.

Les deux premières règle de sécurité étant déjà appliquées en n’installant que le strict nécessaire et en créant un nouvel utilisateur, nous allons sécuriser notre Ubuntu et appliquer la règle no 3.

Création d’une paire de clés publique et privée

Le plus simple est de faire ça directement sur votre poste Mac, Windows ou Linux. Je vais le faire sur Mac avec le Terminal, mais c’est rigoureusement avec le Terminal Windows ou Linux.
Ouvrez donc le Terminal sur votre poste. Tapez la commande suivante pour lancer la génération des clés:

ssh-keygen

Laissez l’emplacement par défaut (/Users/<votreutilisateur>/.ssh/id_rsa). Si vous le désirez, pour renforcer encore plus la sécurité, vous pouvez également ajouter un mot de passe à la clé. Dans mon cas, je vais laissez vide.
Le générateur a maintenant généré les clés qui sont stockées dans le dossier choisi.

Dans votre dossier utilisateur sur votre poste de travail (/Users/<votreutilisateur>/.ssh/id_rsa), il y a maintenant votre clé publique et votre clé privée (id_rsa.pub et id_rsa)

Votre clé privée doit être impérativement conservée de manière sécurisée et rester sur votre poste. En revanche, il faut copier la clé publique sur le serveur afin qu’il puisse vous authentifier.

Pour ce faire, nous allons nous connecter par SSH sur le serveur et ajouter votre clé publique. Ouvrez le terminal et tapez:

ssh [votreutilisateur]@[IP du serveur]

Choisissez de faire confiance et entrez votre mot de passe utilisateur.

Il faut maintenant aller copier/coller votre clé publique dans la liste des clés autorisées.
Commencez par ouvrir votre clé publique avec un éditeur de texte sur votre poste local. Sélectionnez toute la clé dans le presse-papier.

Sur le serveur (dans le Terminal), exécutez la commande suivante pour ouvrir la liste des clés autorisées:

sudo nano /home/<votreutilisateur>/.ssh/authorized_keys

Positionnez le curseur sur la première ligne libre sous “ssh-rsa AAAA…” et collez votre clé publique. Sauvez (Ctrl-O) et quittez (Ctrl – X). Votre clé sera maintenant reconnue par le serveur.

On peut faire un petit test. Ouvrez une nouvelle fenêtre du Terminal et tapez:

ssh -i /Users/<votreutilisateur>/.ssh/id_rsa [votre utilisateur]@[IP du serveur]

C’est la commande qu’il faudra dorénavant utiliser pour se connecter: le terminal se connecte par SSH, avec votre clé privée, au nom de votre utilisateur, sur votre serveur. Si tout va bien, il va vous connecter directement par SSH (sans mot de passe si vous n’avez pas mis de mot de passe à votre clé).

Sécurisation du serveur SSH

Pour le moment, votre serveur SSH accepte les connexions SSH des utilisateurs avec et sans clé. Nous allons configurer le serveur SSH pour ne pas accepter les connexions sans clé autorisée ni en tant que root.

Allons donc dans la configuration de SSH:

sudo nano -w /etc/ssh/sshd_config

Cela ouvre la config SSH.
Trouvez la ligne “PermitRootLogin” et assurez-vous qu’elle soit sur “no”.
Ensuite, allez à la ligne “PasswordAuthentication” et assurez-vous qu’elle soit sur “no”
Enregistrez et quittez nano (Ctrl-O, Ctrl-X).

Votre SSH est maintenant configuré de manière plus stricte. Il suffit de recharger les configurations pour appliquer les modifications (attention, n’exécutez pas cette commande si votre connexion avec la clé a échoué. Vous n’arriverez plus à vous connecter et serez bon pour tout réinstaller…):

sudo systemctl reload sshd

Allez, encore 2-3 petites configurations pour avoir un système vraiment huilé, et on y est

Mise à jour du serveur

Dernière règle de sécurité: soyez à jour avec les patches. Pour cela tapez:

sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y

Cette commande se décompose de la manière suivante:
sudo: escalation de privilège nécessaire pour mettre à jour le système. Tapez le même mot de passe que celui utilisé pour vous logguer
apt update: va se connecter au serveur d’update pour voir s’il y a des nouveaux packages disponibles.
apt upgrade: installe les mises à jour disponibles
-y: vous fait gagner du temps, répond oui à tout 😉
Pour installer les mises à jour majeures, vous pouvez aussi utiliser apt dist-upgrade.

Configuration de la time zone

Configuration NTP

Configuration du “autoremove”