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