- Contexte
- Etape 1 : Premiere connexion en root
- Etape 2 : Mettre a jour le systeme
- Etape 3 : Creer un utilisateur non-root
- Etape 4 : Configurer l'authentification par cle SSH
- Etape 5 : Desactiver l'authentification par mot de passe
- Etape 6 : Configurer le pare-feu UFW
- Etape 7 : Configurer fail2ban
- Etape 8 : Mises a jour automatiques de securite
- Etape 9 : Configurer le fuseau horaire
- Erreurs courantes
- Verification
- Temps estime
Securiser le VPS
Contexte
Un VPS neuf est expose a Internet avec un acces root par mot de passe. C'est une cible facile. Cette section blinde le serveur AVANT d'installer quoi que ce soit. Chaque commande est a executer dans l'ordre.
Etape 1 : Premiere connexion en root
Depuis votre poste local :
$ ssh root@VOTRE_IP_VPS
Acceptez l'empreinte SSH si c'est la premiere connexion.
Etape 2 : Mettre a jour le systeme
# apt update && apt upgrade -y
# apt install -y curl wget git ufw fail2ban unattended-upgrades
Etape 3 : Creer un utilisateur non-root
Ne travaillez JAMAIS en root au quotidien. Creez un utilisateur dedie :
# adduser deploy
Repondez aux questions (mot de passe fort, le reste peut etre vide).
Donnez-lui les droits sudo :
# usermod -aG sudo deploy
Etape 4 : Configurer l'authentification par cle SSH
Sur votre machine LOCALE (pas le VPS), generez une cle si vous n'en avez pas :
$ ssh-keygen -t ed25519 -C "votre-email@example.com"
Copiez la cle publique sur le VPS :
$ ssh-copy-id deploy@VOTRE_IP_VPS
Testez la connexion sans mot de passe :
$ ssh deploy@VOTRE_IP_VPS
Si ca marche, passez a l'etape suivante. Si non, ne desactivez PAS le mot de passe.
Etape 5 : Desactiver l'authentification par mot de passe
IMPORTANT : Ne faites cette etape QUE si la connexion par cle SSH fonctionne. Sinon vous serez bloque hors du serveur.
Editez la configuration SSH :
$ sudo nano /etc/ssh/sshd_config
Modifiez (ou ajoutez) ces lignes :
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Redemarrez SSH :
$ sudo systemctl restart sshd
Gardez votre session actuelle ouverte et testez dans un NOUVEAU terminal :
$ ssh deploy@VOTRE_IP_VPS
Etape 6 : Configurer le pare-feu UFW
Politique par defaut : tout bloquer en entree, tout autoriser en sortie.
$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing
Autoriser SSH (sinon vous perdez l'acces) :
$ sudo ufw allow ssh
Activer le pare-feu :
$ sudo ufw enable
Verifier l'etat :
$ sudo ufw status verbose
Resultat attendu :
Status: active
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
IMPORTANT : N'ouvrez PAS d'autres ports. Tous les services (Vault, PostgreSQL, OpenClaw) seront accessibles uniquement via Tailscale, pas via l'IP publique.
Etape 7 : Configurer fail2ban
fail2ban bloque les IP qui tentent trop de connexions SSH :
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
$ sudo nano /etc/fail2ban/jail.local
Trouvez la section [sshd] et assurez-vous qu'elle contient :
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
Redemarrez fail2ban :
$ sudo systemctl restart fail2ban
$ sudo systemctl enable fail2ban
Etape 8 : Mises a jour automatiques de securite
$ sudo dpkg-reconfigure -plow unattended-upgrades
Selectionnez "Yes" pour activer les mises a jour automatiques.
Verifiez la configuration :
$ cat /etc/apt/apt.conf.d/20auto-upgrades
Resultat attendu :
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
Etape 9 : Configurer le fuseau horaire
$ sudo timedatectl set-timezone Europe/Paris
$ timedatectl
Erreurs courantes
- Se bloquer hors du serveur : Toujours tester la connexion SSH par cle AVANT de desactiver le mot de passe. Gardez une session ouverte pendant les changements SSH.
- Oublier d'autoriser SSH dans UFW avant de l'activer : Vous perdez l'acces. La plupart des fournisseurs offrent une console VNC de secours.
- Ne pas installer fail2ban : Les bots scannent en permanence. Sans fail2ban, vous verrez des milliers de tentatives de connexion par jour.
Verification
$ sudo ufw status
$ sudo systemctl status fail2ban
$ sudo systemctl status sshd
$ cat /etc/ssh/sshd_config | grep -E "PermitRoot|PasswordAuth"
Resultats attendus : - UFW actif, seul le port 22 ouvert - fail2ban actif - sshd actif - PermitRootLogin no, PasswordAuthentication no
Temps estime
20 minutes.
Proposer une modification sur GitHub