Fermer la porte publique

SSH retiré d'internet et gardé sur le tunnel seulement, vérifié depuis l'extérieur, prouvé après un redémarrage, avec le chemin du retour écrit avant d'en avoir besoin. Le seul port ouvert du serveur est désormais celui de WireGuard, qui ne répond rien à qui n'a pas de clé.

intermédiaire~15 min de manipulation
#wireguard#ssh#ufw#firewall#debian#ovh#security

Pas encore validée de bout en bout — sois le premier.Signaler un problème

Brouillon — pas encore exécuté de bout en bout. Cette page est écrite mais son auteur ne l'a pas encore déroulée sur une vraie machine. Des commandes peuvent être fausses : lis avant de lancer, et dis-nous ce qui casse.

En un coup d'œilUne seule porte, et elle est muette
Ton VPS
UDP TCP /tcp ✕
Ton Macssh
Les robots d'internetscans
Pare-feu/udp
wg0
sshd: via wg0

Depuis internet, seul ${WG_PORT}/udp est ouvert, et il ne répond à personne sans clé. SSH s'atteint en ${WG_SERVER_ADDR}:${SSH_PORT}, dans le tunnel. La console KVM est le chemin du retour.

Le tunnel marche : SSH n'a plus besoin d'être sur internet. Cette page ouvre SSH sur l'interface du tunnel, retire la règle publique, vérifie depuis l'extérieur que la porte est vraiment fermée, et redémarre le serveur pour prouver que tout revient seul. Avant de fermer, elle range le chemin du retour : la console KVM, et une copie de tes clés.

Avant de commencer

Vérification
$ssh  echo via-wireguard
Retour attendu
via-wireguard

Ranger le chemin du retour

Après cette page, deux choses ouvrent le serveur : ton Mac (sa clé WireGuard et sa clé SSH), et la console KVM de l'espace client OVH. Vérifie la seconde maintenant, et fais une copie de la première.

Puis range dans ton gestionnaire de mots de passe :

  • la clé SSH (le fichier privé, déjà chiffré par sa phrase de passe) ;
  • la configuration du tunnel, exportée depuis l'app WireGuard du Mac (menu Tunnels ou File → Export Tunnels to Zip…).

Prendre un snapshot

Ouvrir SSH sur le tunnel seulement

Dans ta session ssh , autorise SSH sur l'interface wg0, puis retire la règle publique :

Serveur·
$sudo ufw allow in on wg0 to any port proto tcp
$sudo ufw delete allow /tcp
$sudo ufw status verbose

ufw status doit maintenant montrer deux règles (plus leurs jumelles (v6)) : /udp ALLOW IN Anywhere et /tcp on wg0 ALLOW IN Anywhere.

Vérifier depuis l'extérieur

Depuis ton Mac, essaie la porte publique : elle ne doit pas répondre. Puis repasse par le tunnel :

Mac
$nc -z -G 5 >/dev/null 2>&1 && echo "porte publique : ENCORE OUVERTE" || echo "porte publique : fermée"
$ssh echo via-wireguard
Vérification
$nc -z -G 5   >/dev/null 2>&1 && echo open || echo closed
Retour attendu
closed

Retirer le raccourci vps

ssh vps ne mène plus nulle part. Retire son bloc de ~/.ssh/config, en gardant une copie :

Mac
$cp ~/.ssh/config ~/.ssh/config.bak
$awk '/^Host[[:space:]]/ { skip = ($2 == "vps") } !skip' ~/.ssh/config.bak > ~/.ssh/config

Prouver que ça survit à un redémarrage

Un réglage qui ne survit pas à un redémarrage finira par te verrouiller dehors, la nuit d'une mise à jour automatique. Redémarre maintenant, pendant que tu regardes :

Macte posera une question
Commande sensible — redémarre ou éteint la machine. Vérifie avant d'exécuter.
$ssh -t sudo systemctl reboot

Attends une minute, puis :

Vérification
$ssh  systemctl is-active wg-quick@wg0
Retour attendu
active

Si le tunnel casse

Rentrer par la console KVM et rouvrir SSH le temps de réparer

Dans l'espace client OVH, ouvre la console KVM, connecte-toi en avec ton mot de passe. Rouvre la porte publique :

Serveur·
$sudo ufw allow /tcp

Tu peux maintenant entrer depuis ton Mac par l'adresse publique, avec ta clé, et diagnostiquer confortablement :

Mac
$ssh -p -i -o IdentitiesOnly=yes @

Côté serveur, sudo systemctl status wg-quick@wg0, sudo wg show et journalctl -u wg-quick@wg0 disent presque toujours ce qui ne va pas. Une fois ssh revenu, referme : sudo ufw delete allow ${SSH_PORT}/tcp.

Si tu as perdu le Mac

Sur le nouvel ordinateur, importe le tunnel exporté et la clé SSH rangés plus haut : tout remarche, rien à toucher côté serveur. Révoque ensuite l'ancien Mac, puisque sa clé WireGuard existe encore quelque part : génère une nouvelle paire dans l'app, remplace PublicKey dans le bloc # mac de /etc/wireguard/wg0.conf, sudo systemctl restart wg-quick@wg0, et retire l'ancienne clé SSH de ~/.ssh/authorized_keys.

Sans copie des clés, il reste la console KVM : rouvre la porte publique comme ci-dessus, puis ajoute la nouvelle clé SSH publique dans ~/.ssh/authorized_keys. La taper dans la console est pénible (et sensible à la disposition du clavier) ; le mode rescue d'OVH permet de modifier le fichier depuis un autre système.

Ce qui reste visible

Vu d'internet, ton serveur répond maintenant au ping, et à rien d'autre. Le port /udp est ouvert, mais muet pour qui n'a pas de clé.

Terminé

QuoiAvantAprès cette page
Ports ouverts sur internet/tcp, /udp/udp seulement, muet sans clé
SSHjoignable par tout internetseulement par le tunnel, ssh
Après un redémarragenon testéprouvé
Chemin du retourconsole KVMconsole KVM, clés rangées, marche arrière en une commande

Le serveur est désormais une cave : seuls tes appareils y entrent. La suite de la série y installe ce qui doit y vivre, en écoutant uniquement sur .

Tout a fonctionné ?

Si tu as suivi cette page jusqu'au bout sur une vraie machine, dis-le. Ta validation est datée et enregistre ta stack : le prochain lecteur sur le même chemin sait que ça marche toujours.

Cette copie est en lecture seule. Pour dire que ça marche, ou que ça ne marche pas, ouvre une issue

Seuls tes choix de stack sont enregistrés, jamais tes valeurs. Le pseudo reste sur ce navigateur.