Ton serveur tourne, le pare-feu est actif. Mais pour l'instant, il n'est accessible que depuis ton salon. On va changer ca.
Ce qu'on a fait dans la Partie 1
Si tu debarques, on a installe Ubuntu Server 24.04 LTS sur un vieux PC, configure une IP fixe, active le pare-feu et Fail2ban. Tu peux lire la Partie 1 ici.
Maintenant on va :
- Securiser l'acces SSH avec des cles (et une passphrase)
- Desactiver completement le mot de passe SSH
- Acheter un nom de domaine sur Cloudflare
- Rendre le serveur accessible depuis n'importe ou grace a Cloudflare Tunnel
Phase 1 — Securiser SSH avec des cles
Le mot de passe, c'est bien pour commencer. Mais n'importe qui peut tenter de le deviner (attaques brute force). Les cles SSH sont quasiment impossibles a craquer.
Generer une paire de cles (sur ton PC client)
Sur ton ordinateur principal (pas le serveur) :
ssh-keygen -t ed25519 -C "[email protected]"
- Appuyer sur Entree pour le chemin par defaut (
~/.ssh/id_ed25519) - Mettre une passphrase — c'est un mot de passe qui protege ta cle privee
Pourquoi utiliser une passphrase ?
La passphrase est une couche de securite supplementaire :
- Si quelqu'un vole ton PC, il ne peut pas utiliser ta cle sans la passphrase
- C'est comme un mot de passe pour ta cle privee
- Tu la tapes une seule fois par session (ton OS la garde en memoire avec ssh-agent)
- Sans passphrase : quiconque a acces a ton fichier
~/.ssh/id_ed25519a acces a ton serveur
Recommandation : mets toujours une passphrase. Choisis quelque chose de long mais facile a retenir pour toi (ex: une phrase). Tu peux utiliser ssh-agent pour ne pas la retaper a chaque connexion.
Pour ajouter ta cle a l'agent SSH (ne retaper la passphrase qu'une fois) :
# Demarrer l'agent
eval $(ssh-agent -s)
# Ajouter ta cle (tape la passphrase une fois)
ssh-add ~/.ssh/id_ed25519
Copier la cle publique vers le serveur
ssh-copy-id [email protected]
Tester la connexion avec la cle :
ssh [email protected]
Si tu arrives directement (ou qu'on te demande seulement la passphrase, pas le mot de passe du serveur) : ca marche.
Desactiver le login par mot de passe
Maintenant qu'on a les cles, on desactive le mot de passe pour que personne ne puisse bruteforcer :
sudo nano /etc/ssh/sshd_config
Modifier (ou ajouter) ces lignes :
# Desactiver le mot de passe
PasswordAuthentication no
# Desactiver le login root (normalement deja fait)
PermitRootLogin no
# Activer l'authentification par cle
PubkeyAuthentication yes
# Desactiver les methodes d'auth faibles
ChallengeResponseAuthentication no
UsePAM no
Redemarrer SSH :
sudo systemctl restart ssh
ATTENTION : fais ca APRES avoir verifie que ta cle fonctionne. Sinon tu te bloques dehors. Si ca arrive, connecte-toi avec un ecran + clavier directement sur le serveur et remets PasswordAuthentication yes.
Verifier que la securite est en place
# Depuis un autre PC (ou ton telephone), essayer avec mot de passe
ssh -o PubkeyAuthentication=no [email protected]
# Doit afficher : Permission denied (publickey)
# Verifier les parametres actifs
sudo sshd -T | grep -i 'passwordauthentication\|permitrootlogin\|pubkeyauthentication'
Phase 2 — Acheter et configurer un nom de domaine
Pour acceder a ton serveur par un nom (genre monsite.com) au lieu d'une IP, il te faut un domaine.
Acheter sur Cloudflare
- Creer un compte sur cloudflare.com
- Aller dans Domain Registration > Register Domain
- Chercher ton domaine et l'acheter (les .com sont autour de 10 USD/an)
Pourquoi Cloudflare ? Prix coutant (pas de marge), DNS ultra rapide, et surtout Cloudflare Tunnel est integre nativement.
Phase 3 — Cloudflare Tunnel : ton serveur accessible partout
C'est la partie magique. Cloudflare Tunnel cree un tunnel chiffre entre ton serveur et Cloudflare. Resultat :
- Pas besoin d'ouvrir des ports sur ta box (pas de port forwarding)
- IP dynamique ? Aucun probleme — le tunnel est sortant
- HTTPS automatique et gratuit (certificat SSL gere par Cloudflare)
- Protection DDoS incluse
- CG-NAT compatible — ca marche meme si CanalBox ne te donne pas d'IP publique dediee
Installer cloudflared sur le serveur
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb
Authentifier cloudflared
cloudflared tunnel login
Ca affiche un lien. Copie-le, ouvre-le dans un navigateur, connecte-toi a ton compte Cloudflare et autorise le domaine.
Creer un tunnel
cloudflared tunnel create mon-serveur
Note l'ID du tunnel qui s'affiche (genre a1b2c3d4-...).
Configurer le tunnel
sudo mkdir -p /etc/cloudflared
sudo nano /etc/cloudflared/config.yml
Contenu :
tunnel: a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx
credentials-file: /root/.cloudflared/a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json
ingress:
- hostname: mondomaine.com
service: http://localhost:8000
- hostname: app.mondomaine.com
service: http://localhost:3000
- service: http_status:404
Chaquehostnamepointe vers un service local. Tu peux en avoir autant que tu veux. Le dernier (http_status:404) est le fallback obligatoire.
Ajouter les DNS et lancer le service
# Ajouter les entrees DNS automatiquement
cloudflared tunnel route dns mon-serveur mondomaine.com
cloudflared tunnel route dns mon-serveur app.mondomaine.com
# Installer et lancer comme service systemd
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
# Verifier
sudo systemctl status cloudflared
Tester
Ouvre https://mondomaine.com dans un navigateur depuis ton telephone (en 4G, pas en Wi-Fi). Si ca charge : ton serveur est accessible au monde entier.
Phase 4 — Acces SSH distant via Cloudflare (bonus)
Tu peux aussi tunneler SSH pour te connecter a ton serveur depuis n'importe ou. Ajouter dans /etc/cloudflared/config.yml :
- hostname: ssh.mondomaine.com
service: ssh://localhost:22
Sur ton PC client, ajouter dans ~/.ssh/config :
Host mon-serveur
HostName ssh.mondomaine.com
User ton_utilisateur
ProxyCommand cloudflared access ssh --hostname %h
Puis simplement :
ssh mon-serveur
Et tu es connecte a ton serveur depuis n'importe ou dans le monde, sans ouvrir le port 22 sur ta box.
Recapitulatif securite
Voici toutes les couches de securite qu'on a mises en place :
- Login root desactive
- Authentification par cle SSH uniquement (mot de passe desactive)
- Passphrase sur la cle privee (protection en cas de vol du PC)
- Pare-feu UFW actif (seuls les ports necessaires sont ouverts)
- Fail2ban (ban automatique des IP suspectes)
- Cloudflare Tunnel (aucun port ouvert sur la box, zero surface d'attaque)
- HTTPS automatique (chiffrement des donnees en transit)
- Protection DDoS Cloudflare
Dans la Partie 3, on installe Docker et Coolify — la plateforme qui va te permettre de deployer n'importe quel projet en quelques clics.
Des questions ? Un truc qui coince ? Laisse un commentaire.