Comment sécuriser un VPS Linux dès sa première utilisation ?
Sécuriser un VPS est essentiel. Cet article vous guidera, étape par étape, pour sécuriser votre VPS à l’aide d’une liste de commandes.
Mettre à jour le système
Un VPS fraîchement installé peut avoir des paquets obsolètes ou vulnérables. Les mises à jour corrigent des failles de sécurité.
Nous a commençons par mettre à jour la liste des paquets :
sudo apt update
Ensuite, nous allons mettre à jour les paquets (ou programmes) déjà installés sur le VPS afin d’appliquer les dernières améliorations et correctifs de sécurité :
sudo apt upgrade -y
L'option -y
évite les confirmations !
Créer un nouveau utilisateur
Nous ne nous connecterons pas avec l’utilisateur root
. Nous allons plutôt créer un nouvel utilisateur. On va donner le nom perruche
.
sudo adduser perruche
On vous demandera des informations en rapport avec ce nouvel utilisateur.
Changing the user information for perruche
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
Maintenant, nous allons ajouter perruche
au groupe sudo
ce qui permettra d’exécuter des commandes avec des droits administrateur via sudo
.
sudo usermod -aG sudo perruche
Pourquoi ne pas utiliser root
tout simplement ?
Il peut sembler bizarre de ne pas utiliser root
, mais de créer un utilisateur qui a les droits sudo
(donc root
au final).
Le but est de réduire les risques liés à une utilisation directe du compte root
(connu de tous), tout en conservant la possibilité d’effectuer des tâches administratives. Cela permet de rendre le serveur plus difficile à compromettre.
Utiliser l'utilisateur crée
Pour changer de compte, vous pouvez taper la commande suivante :
sudo su --login perruche
Se connecter via SSH
SSH est souvent utilisé pour se connecter à un VPS.
Pour atteindre cet objectif, utilisez la commande suivante (insérez l'IP correspondant à votre VPS) :
ssh perruche@<ip_du_serveur>
Modifier la configuration de SSH
Changer le port SSH
Nous allons renforcer la sécurité de la configuration SSH en changeant le port SSH par défaut. Actuellement, le port SSH est configuré sur 22
, mais nous allons le modifier pour 2200
.
Pour cela nous allons modifier un fichier : /etc/ssh/sshd_config
!
sudo nano /etc/ssh/sshd_config
Nous allons décommenter la ligne du port et la modifier par 2200
.
# ...
# possible, but leave them commented. Uncommented options override the
# default value.
Include /etc/ssh/sshd_config.d/*.conf
Port 2200
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
#HostKey /etc/ssh/ssh_host_rsa_key
# ...
On sauvegarde les modification et on redémarre SSH :
sudo systemctl restart ssh
Si on essaye de ce connecter avec cette commande à partir d'une autre machine, cela ne va pas fonctionner :
ssh perruche@<ip_du_serveur>
❌ ssh: connect to host <ip_du_serveur> port 22: Connection refused
Il faut ajouter une option qui spécifie le numéro de port :
ssh perruche@<ip_du_serveur> -p 2200
La connexion fonctionne bien maintenant. 😁
Interdire les connexions SSH root par mot de passe
Si vous le souhaitez, vous pouvez interdire les connexions SSH root
par mot de passe en modifiant cette directive dans le fichier de configuration /etc/ssh/sshd_config
. Pour cela décommentez : PermitRootLogin prohibit-password
.
# ...
# default value.
Include /etc/ssh/sshd_config.d/*.conf
Port 2200
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
# Ciphers and keying
#RekeyLimit default none
# Logging
#SyslogFacility AUTH
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m
PermitRootLogin prohibit-password
#StrictModes yes
# ...
N'oubliez pas de redémarrer SSH :
sudo systemctl restart ssh
Authentification par clé SSH
L'objectif est de renforcer la sécurité en remplaçant l'authentification par mot de passe par une authentification par clé SSH.
📌 Conseil : changer les mots de passe pour qu'il soit très long. En effet, si l’on utilise une clé SSH, on ne l’utilisera jamais.
Générer une paire de clés SSH [Machine locale]
Sur la machine locale (ordinateur; pas le VPS), insèrez la commande qui suit :
ssh-keygen -t ed25519
L'option -t ed25519
est un algorithme sûr et rapide. 🔒
Normalement, vous devriez voir le message suivant :
Generating public/private ed25519 key pair.
Enter file in which to save the key (/<chemin>/.ssh/id_ed25519):
Appuyer sur Entrée pour accepter l'emplacement.
Ensuite, le terminal va vous proposer une phrase secrète pour protéger votre clé. C'est facultatif mais fortement recommandé.
Enter passphrase (empty for no passphrase):
❓ Pourquoi utiliser une phrase secrète avec une clé SSH si on veut éviter les mots de passe ?
La phrase secrète protège localement votre clé privée, stockée sur votre ordinateur. Elle ne transite jamais sur le réseau, contrairement à un mot de passe SSH classique.
Comme elle est utilisée uniquement sur votre machine (votre ordinateur), elle peut être plus simple, tout en restant utile en cas de vol ou d’accès non autorisé. 😉
Vous allez recevoir deux informations :
- La clé privée, à conserver précieusement sur votre ordinateur. Elle ne doit jamais être partagée.
- La clé publique, à copier sur le VPS pour autoriser la connexion.
Ces deux clés sont générés et copiés dans la machine locale :
- Clé privée : ~/.ssh/id_ed25519
- Clé publique : ~/.ssh/id_ed25519.pub
Copier la clé publique dans le VPS
Dans votre machine locale, tapez la commande suivante :
sudo ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2200 perruche@<ip_du_serveur>
Il va vous demander le mot de passe cette fois, mais pas les prochaines fois.
Se connecter au serveur
Connectez-vous au serveur et il vous demandera la phrase secrète qu’une seule fois par session :
ssh perruche@<ip_du_serveur> -p 2200
Activer un pare-feu avec UFW
UFW est un pare-feu qui contrôle les ports ouverts. Il bloque tout sauf ce que vous autorisez, ce qui réduit les attaques.
Installer UFW
sudo apt install ufw
Vérifier que UFW est installé
Pour s’assurer que l’installation de UFW s’est bien déroulée, on peut vérifier le numéro de version.
ufw version
Normalement, vous devriez voir un numéro de version :
ufw 0.36.1
Copyright 2008-2021 Canonical Ltd.
Configurer UFW
Bloquer toutes les connexions entrantes
Nous allons bloquer toute les connexions entrantes. Par la suite, nous débloquerons seulement les ports que nous avons besoins.
sudo ufw default deny incoming
Nous avons bloqué tout le trafic, mais le pare-feu UFW n’est pas encore activé. Par conséquent, notre VPS ne prend pas en compte le blocage.
Pour vérifier, tapez la commande suivante :
sudo ufw status
# Status: inactive
Activer UFW
Pour activer UFW, vous pouvez utiliser cette commande :
sudo ufw enable
# Firewall is active and enabled on system startup
Vérifions :
sudo ufw status
# Status: active
Ça marche ! 👌
Étant donné que tous les ports entrant sont actuellement bloqués, le port 2200 que nous avons configuré pour SSH est également inaccessible.
On peut le vérifier en essayant d'accéder à notre VPS depuis notre machine locale.
# ssh: connect to host ... port 2200: Connection timed out
Cela ne fonctionnera plus, ce qui est normal. Cela indique que notre pare-feu fonctionne correctement.
Pour faire en sort que la commande SSH fonctionne de nouveau, il faut ouvrir le port 2200
.
Débloquer un port (autoriser une connexion)
Nous allons débloquer le port 2200
de notre VPS grâce à cette commande :
sudo ufw allow 2200/tcp
# Rule added
# Rule added (v6)
La nouvelle règle est automatiquement prise en compte.
Pour vérifier, connectez-vous de nouveau à partir de votre machine locale et cela devrait fonctionner à nouveau.
Liste des règles UFW
On peut lister les règles UFW.
sudo ufw status
Cette commande permet de vérifier l’état d’activation d’UFW et d’afficher la liste des règles.
# To Action From
# -- ------ ----
# 2200/tcp ALLOW Anywhere
# 2200/tcp (v6) ALLOW Anywhere (v6)
Et les connexions sortantes ? 😐
Automatiquement, les connexions sortantes sont toutes autorisées. Cela permet au système de fonctionner correctement :
- apt update
- ping
- curl
- navigateur web (on en a pas besoin dans un VPS) 🙂↔️
Vous pouvez également bloquer les connexions sortantes, mais il faudra ensuite veiller à autoriser les ports nécessaires au bon fonctionnement des services.
Comprendre la différence entre connexions entrantes et sortantes !
Les connexions entrantes et sortantes représentent deux directions dans le réseau.
Une connexion sortante est initiée depuis votre ordinateur ou serveur vers l’extérieur. Par exemple, lorsque vous ouvrez Firefox et accédez à un site web, votre machine établit une connexion sortante vers ce site (par exemple, www.exemple.com).
Une connexion entrante vient de l’extérieur vers votre machine. Par exemple, si vous avez un serveur web ou SSH installé et qu’un utilisateur tente de s’y connecter, il s’agit d’une connexion entrante. Les pare-feux (comme UFW) permettent de contrôler ces deux types de connexions pour renforcer la sécurité.
En général, certaines connexions entrantes (comme SSH) sont autorisées, tandis que les connexions sortantes sont laissées libres pour que le système fonctionne normalement (mise à jour, navigation, etc.).