Vous venez de provisionner un VPS et vous souhaitez le sécuriser avant d'y déployer vos applications ? Dans cet article, nous allons voir comment configurer un accès SSH par clé privée, changer le port d'écoute, activer un pare-feu avec UFW et installer Fail2ban pour bloquer les tentatives d'intrusion.

Lorsqu'un VPS est livré par un hébergeur, il est accessible par défaut via SSH sur le port 22 avec une authentification par mot de passe. C'est une configuration fonctionnelle mais peu sécurisée : les bots scannent en permanence ce port et tentent des attaques par force brute. Voici comment corriger ça proprement.

1. Générer une paire de clés SSH

La première étape consiste à générer une paire de clés sur votre machine locale, et non sur le serveur.

ssh-keygen -t ed25519 -C "votre-label@vps" -f ~/.ssh/vps_mon-hebergeur

Cette commande génère deux fichiers :

  • ~/.ssh/vps_mon-hebergeur → la clé privée, à ne jamais partager
  • ~/.ssh/vps_mon-hebergeur.pub → la clé publique, à déposer sur le serveur Lors de la génération, une passphrase vous sera demandée. Il est fortement recommandé d'en définir une.

Stocker la passphrase dans le trousseau macOS

Si vous êtes sur Mac, vous pouvez éviter de saisir la passphrase à chaque connexion en la stockant dans le Keychain :

ssh-add --apple-use-keychain ~/.ssh/vps_mon-hebergeur

2. Copier la clé publique sur le VPS

ssh-copy-id -i ~/.ssh/vps_mon-hebergeur.pub johndoe@acme.test

Si ssh-copy-id n'est pas disponible, manuellement :

cat ~/.ssh/vps_mon-hebergeur.pub | ssh johndoe@acme.test \
  "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

3. Configurer ~/.ssh/config en local

Pour simplifier vos connexions, créez ou éditez le fichier ~/.ssh/config sur votre machine locale :

Host mon-vps
    HostName acme.test
    User johndoe
    Port 2222
    IdentityFile ~/.ssh/vps_mon-hebergeur
    IdentitiesOnly yes
    UseKeychain yes
    AddKeysToAgent yes

Vous pourrez ensuite vous connecter simplement avec :

ssh mon-vps

4. Sécuriser la configuration SSH du serveur

Connectez-vous au VPS et éditez le fichier de configuration SSH :

sudo nano /etc/ssh/sshd_config

Modifiez ou vérifiez ces directives :

Port 2222
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Directive Valeur Rôle
Port 2222 Change le port d'écoute
PasswordAuthentication no Désactive l'auth par mot de passe
PermitRootLogin no Interdit la connexion root directe
PubkeyAuthentication yes Active l'auth par clé

Redémarrez SSH :

sudo systemctl restart sshd

⚠️ Avant de fermer votre session, ouvrez un second terminal et vérifiez que la connexion par clé fonctionne bien.

Pour vérifier le port d'écoute actif :

sudo ss -tlnp | grep sshd

5. Installer et configurer UFW

UFW (Uncomplicated Firewall) est le gestionnaire de pare-feu recommandé sur Debian/Ubuntu. Installez-le si ce n'est pas déjà fait :

sudo apt update && sudo apt install -y ufw

Configurez les règles de base :

# Bloquer tout le trafic entrant par défaut
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Autoriser SSH sur le port custom
sudo ufw allow 2222/tcp

# Autoriser HTTP et HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Activer le pare-feu
sudo ufw enable

⚠️ Ajoutez toujours la règle SSH avant d'activer UFW, sous peine de perdre l'accès au serveur.

Vérifiez l'état du pare-feu :

sudo ufw status verbose

6. Installer et configurer Fail2ban

Fail2ban analyse les logs du système et bannit automatiquement les adresses IP qui génèrent trop d'échecs d'authentification.

sudo apt install -y fail2ban

Créez un fichier de configuration local — on ne modifie jamais directement le .conf d'origine, qui peut être écrasé lors des mises à jour :

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

Modifiez les paramètres globaux dans la section [DEFAULT] :

[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5

Ajoutez la jail SSH à la fin du fichier en précisant votre port custom :

[sshd]
enabled  = true
port     = 2222
filter   = sshd
maxretry = 3
bantime  = 24h

Activez et démarrez Fail2ban :

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Vérifier l'état de Fail2ban

# État général
sudo fail2ban-client status

# Détail de la jail SSH
sudo fail2ban-client status sshd

Récapitulatif

En suivant ces deux parties, votre VPS dispose d'une sécurité minimale opérationnelle :

  • Authentification par clé SSH uniquement (mot de passe désactivé)
  • Connexion root désactivée
  • Port SSH custom pour limiter les scans automatisés
  • Pare-feu UFW avec politique de refus par défaut
  • Fail2ban pour bannir automatiquement les IPs malveillantes C'est une base solide avant de passer à l'étape suivante : l'installation de Docker et le déploiement de vos applications en conteneurs.

Ressources

Previous Post Next Post


Add a comment