Security

Guide de Configuration et Hardening d'un VPS

Guide complet pour sécuriser votre serveur Linux, configurer SSH et mettre en place un pare-feu de base.

Santiago Bugnón

Santiago Bugnón

CTO @ Nebula Solutions

|2026-02-18·8 min de lecture
Guide de Configuration et Hardening d'un VPS

Guide de Configuration et Hardening d'un VPS

Référence de base : [Ubuntu Server Guide](https://ubuntu.com/server/docs), [CIS Benchmarks](https://www.cisecurity.org/cis-benchmarks), [SSH Hardening - Mozilla](https://infosec.mozilla.org/guidelines/openssh)

Nota

Note : tout au long du document il y a des utilisateurs et des textes d'exemple que vous devrez remplacer par votre propre nom d'utilisateur ou vos options personnalisées.

Données du serveur d'exemple

Ces données sont celles que votre fournisseur VPS vous donne lors de la création de l'instance serveur.

ChampValeur
IP`203.0.113.42`
Utilisateur`root`
Mot de passe`Xk9#mP2@vL5nQw`
`203.0.113.x` est une plage réservée pour la documentation (RFC 5737), ce n'est pas une vraie IP.

Première connexion :

ssh [email protected]

Étape 1 - Mettre à jour le système

apt update && apt upgrade -y

Nota

Pourquoi ? Un serveur nouvellement créé a des paquets obsolètes depuis l'image de base. Mettre à jour ferme les vulnérabilités connues avant de faire quoi que ce soit d'autre. C'est la première étape de tout guide de hardening sérieux (CIS, NIST).

Étape 2 - Créer un utilisateur non privilégié avec sudo

adduser santikz
usermod -aG sudo santikz

Pour ne pas demander le mot de passe lors de l'utilisation de sudo :

visudo

Ajouter à la fin du fichier :

santikz ALL=(ALL) NOPASSWD:ALL

(créez un utilisateur avec n'importe quel nom de votre choix, ex : admin, dev, sysadmin, marcelo, etc…)

Nota

Pourquoi ? Toujours opérer en tant que `root` est une mauvaise pratique. Si quelqu'un compromet votre session, il a le contrôle total du système. Un utilisateur non privilégié limite le rayon d'action d'un attaquant. `NOPASSWD` dans sudo est un équilibre entre sécurité et confort acceptable dans les environnements dev où l'authentification par clé est déjà utilisée.

Étape 3 - Générer des clés SSH et configurer l'accès par clé publique

Comment fonctionnent les clés SSH

SSH utilise la cryptographie asymétrique : deux clés mathématiquement liées sont générées. La clé privée reste sur votre machine locale et n'en sort jamais. La clé publique est copiée sur le serveur. Quand vous essayez de vous connecter, le serveur vous envoie un défi chiffré avec votre clé publique ; seul celui qui possède la clé privée correspondante peut le résoudre. Si ça correspond, vous entrez, sans besoin de taper un mot de passe. Cela élimine le risque que quelqu'un intercepte ou devine votre mot de passe, puisqu'il ne voyage jamais sur le réseau. `ed25519` est l'algorithme actuellement recommandé par Mozilla et NIST : plus court, plus rapide et plus sécurisé que le traditionnel RSA.

Générer les clés (sur votre machine locale, pas sur le serveur)

# Linux / macOS
ssh-keygen -t ed25519 -f ~/.ssh/myserver

# Windows (PowerShell)
ssh-keygen -t ed25519 -f C:\Users\santikz\.ssh\myserver

Cela génère deux fichiers :

  • `myserver` - clé privée (ne jamais partager, ne jamais uploader sur git)
  • `myserver.pub` - clé publique (celle-ci va sur le serveur)
  • Atención

    Note : donnez un nom descriptif au fichier pour pouvoir différencier les clés de différents serveurs.

    Copier la clé publique sur le serveur avec SCP

    D'abord on copie le fichier `.pub` sur le serveur en utilisant `scp` (ssh copy). À ce stade on utilise encore le mot de passe car on n'a pas encore configuré l'accès par clé :

    # Linux / macOS
    scp ~/.ssh/myserver.pub [email protected]:/home/santikz/
    
    # Windows (PowerShell)
    scp C:\Users\tuusuario\.ssh\myserver.pub [email protected]:/home/santikz/

    Ajouter la clé publique à authorized_keys (sur le serveur)

    Se connecter au serveur et exécuter :

    ssh [email protected]
    mkdir -p ~/.ssh
    cat ~/myserver.pub >> ~/.ssh/authorized_keys
    rm ~/myserver.pub

    Le fichier `authorized_keys` est la liste des clés publiques que le serveur accepte pour l'authentification. L'opérateur `>>` ajoute la clé à la fin du fichier sans effacer les existantes, ce qui permet d'avoir plusieurs clés (par exemple, de différents membres de l'équipe).

    Vérifier les permissions sur le serveur

    SSH est strict avec les permissions de ces fichiers. S'ils sont mal configurés, il rejette la clé même si tout le reste est correct.

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

    Configurer le fichier SSH local

    Ce fichier permet de définir des alias pour se connecter sans écrire utilisateur, IP et clé à chaque fois.

    Linux / macOS - fichier : `~/.ssh/config`

    Host myserver
        User santikz
        HostName 203.0.113.42
        IdentityFile ~/.ssh/myserver

    Windows - fichier : `C:\Users\tuusuario\.ssh\config`

    Host myserver
        User santikz
        HostName 203.0.113.42
        IdentityFile C:\Users\tuusuario\.ssh\myserver

    Avec ça vous pourrez vous connecter simplement avec :

    ssh myserver

    Si le login par clé publique ne fonctionne pas

    Vérifier qu'il est activé sur le serveur :

    sudo nano /etc/ssh/sshd_config

    S'assurer que ces lignes existent et ne sont pas commentées :

    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys

    Étape 4 - Configurer SSH : désactiver le mot de passe et le login root

    sudo nano /etc/ssh/sshd_config

    Trouver et modifier (ou ajouter) ces lignes :

    PermitRootLogin no
    PasswordAuthentication no
    ChallengeResponseAuthentication no
    UsePAM no

    Redémarrer SSH :

    sudo systemctl restart sshd
    **Avant de fermer votre session actuelle**, ouvrez un second terminal et vérifiez que vous pouvez vous connecter avec la clé. Si quelque chose échoue et que vous fermez la session, vous serez verrouillé hors du serveur.

    Nota

    Pourquoi ? Désactiver le login `root` via SSH est l'une des premières étapes de toute checklist de hardening. Désactiver les mots de passe élimine le vecteur d'attaque le plus courant : force brute et credential stuffing. À partir de là, seule la bonne clé privée peut entrer.

    Importante

    Note : ceci désactive le login SSH par mot de passe, ce qui signifie que si on perd la clé privée on perdra l'accès au serveur, il faut donc sécuriser la clé avec une sauvegarde. Si vous vous sentez incertain, laissez le login root et le login par mot de passe activés, mais définissez un mot de passe long et sécurisé pour root.

    Étape 5 - Installer Fail2Ban

    sudo apt install fail2ban -y
    sudo systemctl enable fail2ban
    sudo systemctl start fail2ban

    Configuration de base (créer un fichier de surcharge) :

    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    sudo nano /etc/fail2ban/jail.local

    Vérifier que la section `[sshd]` est activée :

    [sshd]
    enabled = true
    maxretry = 5
    bantime = 3600
    findtime = 600

    Redémarrer :

    sudo systemctl restart fail2ban

    Voir les IPs bannies :

    sudo fail2ban-client status sshd

    Nota

    Pourquoi ? Même si on a désactivé le login par mot de passe, le port SSH reste exposé aux scanners automatisés qui essaient des milliers de connexions. Fail2Ban surveille les logs système et bannit automatiquement les IPs qui dépassent le nombre de tentatives échouées. Réduit le bruit dans les logs et protège contre les attaques par énumération.

    Étape 6 - Configurer le Pare-feu avec UFW

    sudo apt install ufw -y
    **Important :** Autoriser SSH **avant** d'activer le pare-feu sinon vous serez bloqué.
    sudo ufw allow 22/tcp   # SSH
    sudo ufw allow 80/tcp   # HTTP
    sudo ufw allow 443/tcp  # HTTPS

    Activer :

    sudo ufw enable

    Voir le statut :

    sudo ufw status verbose

    Nota

    Pourquoi ? Un serveur nouvellement créé a tous les ports exposés à internet. UFW (Uncomplicated Firewall) est le frontend standard pour `iptables` sur Ubuntu. La règle est simple : seul ce qui est explicitement autorisé est ouvert. Cela réduit drastiquement la surface d'attaque.

    Étapes optionnelles

    Docker

    Suivre le guide officiel, il est le plus à jour et varie selon la version d'Ubuntu :

    https://docs.docker.com/engine/install/ubuntu/

    Après l'installation, ajouter votre utilisateur au groupe docker pour ne pas avoir à utiliser sudo à chaque fois :

    sudo usermod -aG docker santikz
    newgrp docker

    Outils de surveillance et utilitaires

    sudo apt install -y htop btop tmux curl git wget unzip
    OutilÀ quoi il sert
    `htop`Moniteur de processus interactif
    `btop`Moniteur de ressources moderne (CPU, RAM, réseau)
    `tmux`Multiplexeur de terminal, maintient les sessions SSH actives
    `curl`Faire des requêtes HTTP depuis le terminal
    `git`Contrôle de version
    `wget`Télécharger des fichiers depuis le terminal

    Partager

    LinkedInX / Twitter
    Santiago Bugnón

    Écrit par

    Santiago Bugnón

    CTO @ Nebula Solutions

    SecurityLinuxDevOps

    Articles connexes

    Guide de Configuration et Hardening d'un VPS | Nebula Solutions