https://github.com/s-damian/ssh-over-ssl
Encapsuler SSH dans SSL/TLS avec stunnel sur Linux
https://github.com/s-damian/ssh-over-ssl
debian linux ssh ssh-tunnel ssh-tunneling ssl stunnel tls ubuntu
Last synced: 2 months ago
JSON representation
Encapsuler SSH dans SSL/TLS avec stunnel sur Linux
- Host: GitHub
- URL: https://github.com/s-damian/ssh-over-ssl
- Owner: s-damian
- Created: 2025-10-10T05:21:36.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2025-10-10T06:26:47.000Z (8 months ago)
- Last Synced: 2025-10-10T08:03:51.587Z (8 months ago)
- Topics: debian, linux, ssh, ssh-tunnel, ssh-tunneling, ssl, stunnel, tls, ubuntu
- Homepage:
- Size: 2.93 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Encapsuler SSH dans SSL/TLS avec stunnel sur Debian / Ubuntu
> Connexions SSH via le port 443 (SSL) à l'aide de Stunnel
- [Introduction](#introduction)
- [Configuration côté serveur](#configuration-côté-serveur-vps-distant)
- [Configuration côté client](#configuration-côté-client-machine-locale)
- [Proxy SOCKS](#proxy-socks-tunnel-ssh-dynamique)
- [Article in English 🇬🇧](#article-in-english-)
## 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
```bash
sudo apt install stunnel4
```
### 2. Créer un certificat SSL
```bash
# 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 :
```bash
sudo nano /etc/stunnel/stunnel.conf
```
Y insérer ce contenu :
```bash
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 :
```bash
sudo nano /etc/default/stunnel4
```
Ajouter/Modifier `ENABLED` à :
```bash
ENABLED=1
```
### 5. Démarrer le service stunnel
```bash
# 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 :
```bash
sudo lsof -i :443
```
Elle doit retourner quelque chose comme :
```bash
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
```bash
sudo apt install stunnel4
```
### 2. Créer la configuration client
```bash
# 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 :
```bash
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 :
```bash
sudo nano /etc/default/stunnel4
```
Ajouter/Modifier `ENABLED` à :
```bash
ENABLED=1
```
### 4. Lancer le tunnelSSL
Dans un terminal :
```bash
sudo stunnel ~/.config/stunnel/ssh-client.conf
```
### 5. Se connecter via SSH à travers le tunnel
Et dans un autre terminal :
```bash
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`) :
```bash
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 :
```bash
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](https://www.damian-freelance.com/blog/ssh-over-ssl-with-stunnel-on-debian)