Skip to content

Encapsuler SSH dans SSL/TLS avec stunnel sur Debian / Ubuntu

Notifications You must be signed in to change notification settings

s-damian/ssh-over-ssl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 

Repository files navigation

Encapsuler SSH dans SSL/TLS avec stunnel sur Debian / Ubuntu

Connexions SSH via le port 443 (SSL) à l'aide de Stunnel

Introduction

Certains réseaux (pays, entreprises, universités, Wi-Fi publics) bloquent les connexions SSH sortantes sur le port 22, tout en autorisant le trafic HTTPS sur le port 443.

stunnel permet d’encapsuler une connexion SSH dans une couche SSL/TLS, la rendant indiscernable du trafic HTTPS classique.

Cas d'usage typiques

  • Accéder à vos serveurs depuis un réseau restrictif.
  • Maintenir l'accès SSH depuis un Wi-Fi public filtré.
  • Contourner les limitations de certains FAI.
  • Sécuriser davantage vos connexions SSH avec une couche SSL supplémentaire.

Avantages

  • Permet de contourner les firewalls qui bloquent le port SSH (22).
  • Utilise le port 443 (HTTPS) généralement autorisé.
  • Double chiffrement : SSL + SSH, pour une sécurité renforcée.
  • Simple et rapide à mettre en place (sans changer votre configuration SSH existante).

🔄 Schéma du flux

┌─────────────────┐          ┌─────────────────┐
│  Client         │          │  Serveur        │
│  (localhost)    │          │  (VPS)          │
└────────┬────────┘          └────────┬────────┘
         │                            │
         │  1. SSH → localhost:2200   │
         │     ↓                      │
         │  stunnel client            │
         │     ↓                      │
         │  2. SSL/TLS → VPS:443 ────→│
         │                            │
         │                     stunnel serveur
         │                            ↓
         │                     3. SSH → localhost:22
         │                            │
         │  ←──────────────────────────
         │     Connexion établie

Tunnel SSH via SSL avec stunnel - Tutoriel pour Linux

Ce tutoriel couvre l'installation et la configuration complète de stunnel4, côté serveur et côté client, sur des systèmes Linux Debian / Ubuntu.

Notes :

  • Le serveur distant sera aussi surnommé VPS.
  • Dans ce tutoriel, nous utiliserons l'utilisateur root pour le serveur distant (VPS).

Configuration côté serveur (VPS distant)

1. Installer stunnel

sudo apt install stunnel4

2. Créer un certificat SSL

# Créer un certificat avec une clé RSA de 2048 bits et remplir les champs demandés.
cd ~
openssl genrsa -out stunnel.key 2048
openssl req -new -x509 -key stunnel.key -out stunnel.crt -days 3650

# Réponses suggérées :
# Country Name: FR
# Common Name: l'IP publique ou le nom de domaine de votre serveur (facultatif)

# Fusionner la clé et le certificat :
cat stunnel.crt stunnel.key > stunnel.pem
sudo mv stunnel.pem /etc/stunnel/stunnel.pem

# Sécuriser les permissions :
sudo chmod 600 /etc/stunnel/stunnel.pem
sudo chown root:root /etc/stunnel/stunnel.pem

Vous disposez maintenant du fichier : /etc/stunnel/stunnel.pem

3. Configurer stunnel pour tunneliser le port 443 (HTTPS) vers le port SSH (22)

Créer le fichier de configuration :

sudo nano /etc/stunnel/stunnel.conf

Y insérer ce contenu :

pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel.pem

[ssh]
accept = 443
connect = 127.0.0.1:22

Explication :

  • accept = 443 : stunnel écoute sur le port 443 (HTTPS).
  • connect = 127.0.0.1:22 : dès qu'une connexion SSL est reçue, elle est redirigée vers le port SSH local (22).

4. Activer stunnel

Modifier le fichier :

sudo nano /etc/default/stunnel4

Ajouter/Modifier ENABLED à :

ENABLED=1

5. Démarrer le service stunnel

# Démarrer le service :
sudo systemctl start stunnel4.service

# L'activer au démarrage du serveur :
sudo systemctl enable stunnel4

# Vérifier son statut :
sudo systemctl status stunnel4.service

6.Vérifier que stunnel écoute bien sur le port 443

Utilisez la commande suivante :

sudo lsof -i :443

Elle doit retourner quelque chose comme :

COMMAND  PID USER FD   TYPE DEVICE SIZE/OFF NODE NAME
stunnel4 771 root 9u  IPv4   5542      0t0  TCP *:https (LISTEN)

Configuration côté client (machine locale)

1. Installer stunnel

sudo apt install stunnel4

2. Créer la configuration client

# Si dossier `~/.config/stunnel` n'existe pas encore, faire :
mkdir ~/.config/stunnel

# Créer le fichier :
nano ~/.config/stunnel/ssh-client.conf

Y insérer ce contenu :

client = yes
foreground = yes

[ssh]
accept = 127.0.0.1:2200
connect = IP_PUBLIQUE_DU_SERVEUR:443

Important : Remplacez IP_PUBLIQUE_DU_SERVEUR par l'adresse IP public de votre serveur.

3. Activer stunnel

Modifier le fichier :

sudo nano /etc/default/stunnel4

Ajouter/Modifier ENABLED à :

ENABLED=1

4. Lancer le tunnelSSL

Dans un terminal :

sudo stunnel ~/.config/stunnel/ssh-client.conf

5. Se connecter via SSH à travers le tunnel

Et dans un autre terminal :

ssh -p 2200 root@localhost

PS : Si sur votre serveur, l'authentification par mot de passe est désactivée, utilisez votre clé privée SSH (avec l'option -i) :

ssh -p 2200 -i /YOUR_PATH/.ssh/id_rsa_YOUR_FILE root@localhost

Proxy SOCKS (tunnel SSH dynamique)

Cette partie est réservée pour les utilisateurs qui souhaitent utiliser Proxy SOCKS.

Utiliser SSH pour créer un proxy SOCKS5 via le tunnel SSL

Une fois le tunnel SSL/TLS établi, vous pouvez créer un proxy SOCKS5 pour router l'ensemble de votre trafic Internet (navigation web, applications) à travers votre serveur distant (VPS).

  • Étape 1 : Lancer stunnel dans un terminal (si pas déjà fait).

  • Étape 2 : Créer le tunnel SSH avec proxy SOCKS :

Dans un second terminal :

ssh -D 1040 -C -q -p 2200 -i /YOUR_PATH/.ssh/id_rsa_YOUR_FILE root@localhost

Explication des options :

  • -D 1040 : Crée un proxy SOCKS5 local sur le port 1040.
  • -C : Active la compression des données SSH (pour économiser de la bande passante).
  • -q : Mode silencieux (supprime les messages locaux).
  • -p 2200 : Se connecte au tunnel stunnel local.
  • -i ... : Spécifie la clé privée SSH à utiliser.
  • root@localhost : Utilisateur et hôte (le tunnel écoute sur localhost).

Important : Ces deux terminals doivent rester ouvert tant que vous utilisez le proxy.

  • Étape 3 : Configurer votre navigateur (Firefox par exemple).

Article in English 🇬🇧

📝 You can read the English version of the article on my blog:

Tunnel SSH Connections Over SSL Using Stunnel

About

Encapsuler SSH dans SSL/TLS avec stunnel sur Debian / Ubuntu

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published