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
Article précédent Article suivant
Français
English
Ajouter un commentaire