03-comment-je-travaille/vps/01-provisionement.md

Provisionnement serveur — Ubuntu brut vers serveur durci

Point de départ : accÚs root SSH livré par OVH sur une Ubuntu fraßche. Point d'arrivée : serveur durci, accÚs SSH sécurisé sur port custom, pare-feu actif.


1. AccĂšs initial et mise Ă  jour

OVH fournit un accÚs root par mot de passe ou clé SSH sur le port 22.

ssh root@<IP_VPS>
apt update && apt upgrade -y
apt install -y curl wget git vim ufw fail2ban unattended-upgrades

2. Créer un utilisateur non-root

Ne jamais travailler en root. Créer un utilisateur ubuntu avec droits sudo.

adduser ubuntu
usermod -aG sudo ubuntu

# Copier les clés SSH du root vers le nouvel utilisateur
rsync --archive --chown=ubuntu:ubuntu ~/.ssh /home/ubuntu

Se reconnecter en ubuntu et vérifier sudo -l avant de continuer.


3. SSH — port custom et durcissement

Changer le port dans sshd_config

sudo nano /etc/ssh/sshd_config

Modifier ou ajouter :

Port 9501
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
MaxAuthTries 3

⚠ PiĂšge Ubuntu 24.04+ — SSH socket-activĂ©

Sur Ubuntu 24.04 et supérieur, openssh-server est socket-activé : c'est ssh.socket qui écoute, pas ssh.service. Le port est lu depuis sshd_config par un générateur systemd (sshd-socket-generator) qui crée automatiquement /run/systemd/generator/ssh.socket.d/addresses.conf.

Ce qu'il ne faut JAMAIS faire :

# NE PAS créer d'override manuel sur ssh.socket
# /etc/systemd/system/ssh.socket.d/override.conf  ← DANGER
# Conflit avec le gĂ©nĂ©rateur → ssh.socket plante → lock-out total au reboot

La bonne recette :

# 1. Poser le port dans sshd_config (le générateur le lit)
sudo nano /etc/ssh/sshd_config   # Port 9501

# 2. Recharger le générateur et redémarrer le socket
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
# (pas ssh.service — c'est le socket qui gĂšre l'Ă©coute)

# 3. Vérifier que le port 9501 est bien écouté
sudo ss -tlnp | grep 9501

Si on se retrouve lock-out (accĂšs console OVH) :

rm /etc/systemd/system/ssh.socket.d/override.conf
systemctl daemon-reload && systemctl restart ssh.socket

Ouvrir le nouveau port avant de fermer l'ancien

# Ouvrir le nouveau port
sudo ufw allow 9501/tcp comment 'SSH custom'

# Tester la connexion sur le nouveau port depuis un autre terminal !
ssh -p 9501 ubuntu@<IP_VPS>

# Seulement aprĂšs validation : fermer le 22
sudo ufw delete allow ssh
sudo ufw delete allow 22/tcp

4. UFW — pare-feu

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 9501/tcp comment 'SSH'
sudo ufw allow 80/tcp  comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enable
sudo ufw status verbose

Résultat attendu :

To                         Action      From
--                         ------      ----
9501/tcp                   ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere

5. Fail2ban — blocage brute-force

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime  = 3600
findtime = 600
maxretry = 3

[sshd]
enabled  = true
port     = 9501
logpath  = /var/log/auth.log
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Surveiller :

sudo fail2ban-client status sshd
sudo journalctl -u fail2ban -f

6. Mises à jour de sécurité automatiques

unattended-upgrades applique automatiquement les patches de sécurité sans intervention.

sudo dpkg-reconfigure --priority=low unattended-upgrades
# Répondre "Oui"

# Vérifier la configuration
cat /etc/apt/apt.conf.d/50unattended-upgrades

S'assurer que la ligne Unattended-Upgrade::Automatic-Reboot est Ă  "false" (un VPS de prod ne redĂ©marre pas automatiquement — intervention manuelle pour les reboots noyau).


7. Clé SSH depuis Windows (WSL)

Générer une clé ED25519 cÎté client :

ssh-keygen -t ed25519 -C "ubuntu@poseidon" -f ~/.ssh/poseidon_ed25519

Copier la clé publique sur le serveur :

ssh-copy-id -i ~/.ssh/poseidon_ed25519.pub -p 9501 ubuntu@<IP_VPS>

Configurer ~/.ssh/config cÎté client :

Host poseidon
    HostName 192.168.1.50   # ou IP VPS
    User ubuntu
    Port 9501
    IdentityFile ~/.ssh/poseidon_ed25519
ssh poseidon   # connexion directe

État attendu à l'issue

  • AccĂšs SSH sur port 9501 uniquement, par clĂ©, sans root
  • Pare-feu actif (80, 443, 9501 seuls ports ouverts)
  • Fail2ban en Ă©coute sur le journal SSH
  • Mises Ă  jour de sĂ©curitĂ© automatiques

Étape suivante : 02-stack-web.md

Assistant documentaire

Posez une question sur la documentation. Les rĂ©ponses citent leurs sources — un clic ouvre le document Ă  gauche.

Loading…
Loading the web debug toolbar…
Attempt #