Tunnels SSH : Configuration et cas d’utilisation pratiques
Secure Shell (SSH) est un protocole très répandu qui permet une communication sécurisée et cryptée entre ordinateurs. Au-delà de son utilisation traditionnelle pour se connecter à des systèmes distants, SSH offre également de puissantes capacités de tunneling, qui vous permettent de transférer en toute sécurité le trafic entre les réseaux et les systèmes. Cette technique est connue sous le nom de tunnel SSH et peut s’avérer précieuse pour divers cas d’utilisation pratiques, tels que l’accès à des services restreints ou le contournement de pare-feux.
Dans cet article, nous verrons comment fonctionnent les tunnels SSH, comment les configurer et comment les utiliser pour différents scénarios dans des applications réelles.
Qu’est-ce qu’un tunnel SSH ?
Un tunnel SSH est une méthode de transmission de données arbitraires via une connexion SSH cryptée entre deux systèmes. Essentiellement, il vous permet d’acheminer en toute sécurité le trafic réseau d’une machine à l’autre en créant un tunnel à travers lequel les données voyagent.
Les tunnels SSH peuvent être utilisés de trois manières principales :
- Transfert de port local
- Redirection de port à distance
- Redirection de port dynamique
Chacune de ces méthodes a ses propres cas d’utilisation, et nous les aborderons en détail ci-dessous.
1. Transfert de port local
Le transfert de port local est la forme la plus couramment utilisée de tunnel SSH. Elle permet de transférer le trafic d’un port local de votre machine vers un service distant via une connexion SSH.
Fonctionnement de la redirection de port local
Lorsque vous créez un tunnel SSH local, le trafic envoyé vers un port spécifique de votre machine locale est transféré vers le serveur SSH, qui l’envoie ensuite vers la destination souhaitée (par exemple, une base de données ou un serveur web).
Exemple de cas d’utilisation : Accès à une base de données distante
Imaginez que vous ayez besoin d’accéder à une base de données sur un serveur distant, mais que le port de la base de données soit bloqué par un pare-feu. Au lieu d’ouvrir le port publiquement, vous pouvez utiliser le transfert de port local pour accéder à la base de données en toute sécurité.
Commande pour le transfert de port local
Dans cet exemple :
- -L 5432:localhost:5432 : Spécifie le transfert de port local. Le premier 5432 est le port de votre machine locale, localhost:5432 fait référence à la base de données distante.
- user@remote-server : Se connecte au serveur SSH distant.
Vous pouvez désormais accéder à la base de données distante depuis votre machine locale en vous connectant à localhost:5432.
2. Transfert de port à distance
Le transfert de port à distance vous permet de transférer le trafic d’un serveur distant vers une machine locale. Cette fonction est utile lorsque vous souhaitez exposer un service fonctionnant sur votre machine locale à un serveur distant ou à ses utilisateurs.
Comment fonctionne la redirection de port à distance ?
Avec la redirection de port à distance, tout le trafic qui atteint un port spécifié sur la machine distante sera redirigé vers un port de votre machine locale. Cette configuration est souvent utilisée lorsque vous devez exposer au serveur distant un service qui n’est accessible que sur votre réseau local.
Exemple de cas d’utilisation : exposition d’une application Web locale à un serveur distant
Imaginez que vous développez une application web localement sur votre machine et que vous voulez la montrer à un collègue sur un serveur distant. Au lieu de déployer l’application, vous pouvez utiliser la redirection de port à distance pour permettre l’accès à votre application locale.
Commande pour le transfert de port à distance
Dans cet exemple :
- -R 8080:localhost:3000 : spécifie le transfert de port à distance. Le port 8080 de la machine distante sera transféré vers localhost:3000 sur votre machine locale, où l’application web est exécutée.
- user@remote-server : Se connecte au serveur SSH distant.
Désormais, n’importe qui sur le serveur distant peut accéder à votre application web via http://remote-server:8080.
3. Redirection dynamique des ports
La redirection dynamique de port transforme votre client SSH en serveur proxy SOCKS, ce qui vous permet d’acheminer le trafic de votre machine locale vers n’importe quelle destination via le tunnel SSH. Cette fonction est particulièrement utile lorsque vous souhaitez faire passer l’ensemble du trafic (comme la navigation sur le web) par une connexion sécurisée.
Fonctionnement du transfert dynamique de port
Avec la redirection dynamique de port, le client SSH écoute sur un port local et redirige tout le trafic sortant vers le serveur SSH. Cette configuration vous permet d’utiliser le serveur SSH comme proxy pour votre connexion internet, en contournant les pare-feu et en sécurisant le trafic.
Exemple de cas d’utilisation : contourner les restrictions du réseau
Imaginez que vous êtes sur un réseau Wi-Fi public et que certains sites web ou services sont bloqués. Vous pouvez utiliser la redirection dynamique de port pour contourner ces restrictions et accéder à l’internet en toute sécurité via votre serveur SSH.
Commande pour la redirection dynamique de port
Dans cet exemple :
- -D 8080 : Spécifie la redirection dynamique des ports. Votre machine locale agira comme un proxy SOCKS sur le port 8080.
- user@remote-server : Se connecte au serveur SSH distant.
Une fois le tunnel activé, vous pouvez configurer votre navigateur ou toute autre application pour qu’elle utilise localhost:8080 comme proxy SOCKS, ce qui vous permet d’acheminer en toute sécurité l’ensemble du trafic via le serveur distant.
Configuration des tunnels SSH à l’aide d’un fichier de configuration
Si vous utilisez fréquemment des tunnels SSH, vous pouvez simplifier le processus en créant un fichier de configuration SSH. Le fichier de configuration vous permet de définir des raccourcis pour vos connexions SSH et vos paramètres de transfert de port, ce qui facilite la configuration des tunnels sans avoir à saisir de longues commandes à chaque fois.
Exemple de fichier de configuration SSH
Ajoutez la configuration suivante à ~/.ssh/config :
Vous pouvez maintenant configurer une redirection de port local vers la base de données distante à l’aide de just :
Exemples pratiques de tunnel SSH
1. Sécuriser le trafic Web grâce à un proxy SOCKS
Si vous travaillez dans un environnement restreint et que vous devez accéder à des sites web bloqués, vous pouvez configurer la redirection dynamique de port pour acheminer l’ensemble de votre trafic via un serveur SSH sécurisé.
Configurez ensuite votre navigateur pour qu’il utilise localhost:9090 comme proxy SOCKS.
2. Accès à un service interne distant
Supposons que vous ayez besoin d’accéder à un service interne qui n’est disponible que sur un réseau privé distant. Vous pouvez utiliser la redirection de port local pour vous connecter en toute sécurité à ce service à partir de votre machine locale.
Cela vous permettra d’accéder au service interne à l’adresse http://localhost:8080.
3. Exposer un serveur de développement local
Si vous souhaitez partager un serveur de développement local avec des collègues sur un serveur distant, utilisez la redirection de port à distance :
Les collègues du serveur distant peuvent désormais accéder à votre application locale à l’adresse http://remote-server:4000.
Considérations relatives à la sécurité
Bien que les tunnels SSH offrent des canaux de communication sécurisés et cryptés, il est important de respecter les meilleures pratiques en matière de sécurité :
- Utiliser une authentification forte : Utilisez toujours des mots de passe forts ou une authentification basée sur une clé SSH pour sécuriser votre serveur SSH.
- Limitez l’accès aux ports transférés : Limitez l’accès aux ports transférés à l’aide de règles de pare-feu ou de configurations SSH afin d’empêcher tout accès non autorisé.
- Surveillez les connexions SSH : Surveillez régulièrement les journaux de connexion SSH afin de détecter toute activité inhabituelle ou tentative d’accès non autorisé.
Conclusion
Le tunnel SSH est un outil polyvalent qui offre des moyens sécurisés de transférer le trafic et d’accéder à des services à travers les réseaux. Que vous cherchiez à accéder à des services restreints, à contourner des pare-feu ou à exposer des ressources internes en toute sécurité, les tunnels SSH constituent une solution puissante et flexible. En maîtrisant le transfert de port local, distant et dynamique, vous pouvez renforcer la sécurité de votre réseau et étendre votre capacité à accéder à des systèmes distants et à les gérer efficacement.