Logo
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 :

  1. Securiser l'acces SSH avec des cles (et une passphrase)
  2. Desactiver completement le mot de passe SSH
  3. Acheter un nom de domaine sur Cloudflare
  4. 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.

Code securite SSH
La securite SSH passe par les cles cryptographiques

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_ed25519 a 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

  1. Creer un compte sur cloudflare.com
  2. Aller dans Domain Registration > Register Domain
  3. 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.
Cloudflare dashboard
Cloudflare : DNS + Tunnel + Protection DDoS

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
Chaque hostname pointe 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.

Partager :

Laisser un commentaire

Les champs marqués d'un astérisque (*) sont obligatoires !