Aller au contenu

Maitrisez le tunneling SSH

Mise à jour :

L’utilisation du tunneling SSH est devenue incontournable pour toute personne soucieuse de sécuriser ses communications réseau, en particulier lorsque des données sensibles transitent par des réseaux non sécurisés. Que vous soyez administrateur système ou développeur, comprendre et maîtriser cette technique vous permettra de créer des connexions sécurisées entre différentes machines, en redirigeant le trafic à travers une connexion chiffrée. De plus, le tunneling SSH est indispensable dans le développement ou l’administration système pour éviter d’ouvrir des flux réseau supplémentaires comme lors de l’analyse des incidents. En centralisant et sécurisant le trafic via un tunnel SSH, vous pouvez diagnostiquer et résoudre les problèmes sans compromettre la sécurité du réseau.

Concepts fondamentaux du tunneling SSH

Pour bien comprendre le tunneling SSH, il est important de se familiariser avec plusieurs concepts clés qui constituent la base de cette technologie. Ces concepts sont essentiels pour exploiter pleinement le potentiel du tunneling SSH dans différents contextes.

  • Redirection de port : La redirection de port est une technique qui consiste à rediriger le trafic réseau d’un port spécifique vers un autre port, souvent sur une machine différente. Cette technique est utilisée pour acheminer le trafic à travers une connexion SSH sécurisée, permettant d’accéder à des services distants ou locaux en toute sécurité.

  • Proxy SOCKS : Le proxy SOCKS est un protocole qui permet de rediriger le trafic d’une application via un serveur intermédiaire. Dans le contexte du tunneling SSH, un proxy SOCKS est utilisé pour acheminer le trafic réseau de manière dynamique, ce qui permet d’accéder à plusieurs services à travers une seule connexion sécurisée.

Fonctionnalités du tunneling SSH

Le tunneling SSH est une méthode puissante qui permet de sécuriser et de rediriger le trafic réseau d’un point à un autre via une connexion SSH chiffrée. Cette technique repose sur trois principales fonctionnalités, chacune offrant des avantages spécifiques en fonction des besoins de l’utilisateur :

  • Redirection de port local : Cette fonctionnalité permet de rediriger le trafic destiné à un port local vers un port spécifique d’un serveur distant via un tunnel SSH sécurisé. Cela peut être utile pour accéder à des services distants comme s’ils étaient hébergés localement.

  • Redirection de port distant : À l’inverse de la redirection de port local, cette méthode permet de rediriger le trafic d’un port sur un serveur distant vers un port local de votre machine. Cela facilite l’accès à des services locaux pour des utilisateurs ou des systèmes distants.

  • Tunneling dynamique : Cette fonctionnalité transforme votre connexion SSH en un proxy SOCKS, capable de rediriger de manière dynamique le trafic réseau vers différents ports ou serveurs. Le tunneling dynamique est particulièrement utile pour des scénarios où plusieurs connexions à des services divers doivent être sécurisées via une seule connexion SSH.

Configuration du tunneling SSH

La configuration du tunneling SSH est une étape clé pour sécuriser vos communications réseau. Nous allons explorer trois types de redirection de port : la redirection de port local, la redirection de port distant et le tunneling dynamique. Dans chaque exemple, nous utiliserons une machine distante appelée bastion qui possède une adresse IP publique, par exemple 203.0.113.10.

Redirection de port local

La redirection de port local permet d’accéder à un service sur une machine distante comme s’il était accessible localement. Cette méthode est particulièrement utile lorsque vous devez accéder à un service qui n’est pas directement accessible depuis votre réseau local.

Supposons que vous souhaitez accéder à une base de données MySQL sur un serveur privé qui n’est pas directement accessible depuis votre réseau. Le serveur MySQL est situé derrière un bastion et écoute sur le port 3306. Vous pouvez configurer une redirection de port local avec la commande suivante :

Terminal window
ssh -L 3307:192.168.1.100:3306 utilisateur@203.0.113.10

Dans cet exemple :

  • 3307 est le port local sur votre machine où vous accéderez à la base de données.
  • 192.168.1.100 est l’adresse IP du serveur MySQL dans le réseau privé.
  • 3306 est le port sur lequel MySQL écoute sur le serveur privé.
  • utilisateur@203.0.113.10 correspond aux informations de connexion SSH au bastion.

Désormais, en utilisant localhost:3307, vous pouvez accéder à la base de données MySQL comme si elle était exécutée localement.

Redirection de port distant

La redirection de port distant fonctionne de manière inverse à la redirection de port local. Elle permet de rendre un service local accessible depuis une machine distante. Cela est utile lorsque vous souhaitez que d’autres machines puissent accéder à un service qui s’exécute sur votre machine locale via un bastion.

Imaginons que vous ayez un serveur web local exécuté sur le port 8080 et que vous souhaitiez le rendre accessible via le bastion. Vous pouvez configurer une redirection de port distant avec la commande suivante :

Terminal window
ssh -R 8080:localhost:8080 utilisateur@203.0.113.10

Dans cet exemple :

  • 8080 est le port sur le bastion que les utilisateurs distants peuvent utiliser pour accéder à votre serveur web local.
  • localhost:8080 correspond à votre serveur web local que vous souhaitez rendre accessible.

Une fois cette redirection établie, toute personne qui accède à http://203.0.113.10:8080 sera redirigée vers votre serveur web local.

Tunneling dynamique

Le tunneling dynamique est un peu plus flexible que les redirections de port locales ou distantes. Il vous permet de créer un proxy SOCKS, qui peut être utilisé pour rediriger tout le trafic réseau à travers un bastion. Cela est particulièrement utile pour sécuriser votre navigation web ou pour accéder à des services réseau sans modifier la configuration de chaque service.

Pour créer un tunnel dynamique, vous pouvez utiliser la commande suivante :

Terminal window
ssh -D 1080 utilisateur@203.0.113.10

Dans cet exemple :

  • 1080 est le port local sur votre machine que vous utiliserez comme proxy SOCKS.

Une fois ce tunnel configuré, vous pouvez configurer votre navigateur ou toute autre application réseau pour utiliser localhost:1080 comme proxy SOCKS. Tout le trafic sera alors chiffré et redirigé à travers le bastion, offrant ainsi un accès sécurisé aux services distants.

Conclusion

Ces trois méthodes de tunneling SSH permettent de sécuriser et de rediriger le trafic réseau selon vos besoins spécifiques. Que vous ayez besoin d’accéder à des services distants de manière sécurisée, de rendre un service local accessible à des utilisateurs distants, ou de sécuriser l’ensemble de votre trafic réseau, le tunneling SSH offre une solution flexible et puissante. En maîtrisant ces configurations, vous pourrez mieux protéger vos données et gérer efficacement les ressources réseau.

Sécurité et bonnes pratiques

Le tunneling SSH est un outil puissant pour sécuriser les communications réseau, mais pour en tirer le meilleur parti, il est essentiel de suivre certaines bonnes pratiques de sécurité. Sans une configuration et une gestion adéquates, même les technologies les plus sûres peuvent présenter des vulnérabilités.

Utilisation de clés SSH au lieu de mots de passe

L’un des moyens les plus efficaces pour sécuriser vos connexions SSH est d’utiliser des clés SSH plutôt que des mots de passe pour l’authentification. Les clés SSH sont non seulement plus sécurisées, mais elles permettent également d’automatiser les connexions SSH de manière sûre.

Pour générer une paire de clés SSH, vous pouvez utiliser la commande suivante sur votre machine locale :

Terminal window
ssh-keygen -t rsa -b 4096 -C "votre_email@example.com"

Cette commande génère une paire de clés SSH avec un chiffrement RSA de 4096 bits. La clé publique doit ensuite être copiée sur le bastion ou tout autre serveur SSH auquel vous vous connectez régulièrement :

Terminal window
ssh-copy-id utilisateur@203.0.113.10

Une fois les clés SSH configurées, assurez-vous de désactiver l’authentification par mot de passe sur vos serveurs SSH en modifiant le fichier de configuration SSH /etc/ssh/sshd_config :

PasswordAuthentication no

Cela réduit considérablement le risque de compromission via des attaques par force brute sur les mots de passe.

Limitation des utilisateurs autorisés

Pour renforcer la sécurité de vos serveurs SSH, il est conseillé de limiter les utilisateurs qui sont autorisés à se connecter via SSH. Cela peut être fait en utilisant la directive AllowUsers dans le fichier de configuration SSH /etc/ssh/sshd_config.

Par exemple, pour n’autoriser que les utilisateurs admin et deploy à se connecter via SSH, vous pouvez ajouter la ligne suivante :

AllowUsers admin deploy

Cette simple configuration peut réduire la surface d’attaque en limitant le nombre de comptes susceptibles d’être ciblés par des tentatives de connexion non autorisées.

Utilisation de la redirection de port uniquement lorsque nécessaire

Bien que le tunneling SSH soit extrêmement utile, il est important de ne pas laisser des redirections de port inutilisées ouvertes. Les tunnels inutilisés peuvent représenter une faille de sécurité potentielle. Pour minimiser les risques, assurez-vous de fermer les tunnels SSH une fois que vous avez terminé de les utiliser.

Vous pouvez terminer une session SSH (et fermer tous les tunnels associés) en utilisant la commande exit ou en fermant simplement le terminal.

Surveillance des connexions SSH

Il est important de surveiller les connexions SSH actives sur vos serveurs pour détecter toute activité suspecte. Vous pouvez utiliser la commande suivante pour afficher les connexions SSH en cours sur un serveur :

Terminal window
who

Pour une surveillance plus avancée, envisagez de mettre en place des outils de détection d’intrusion comme Fail2ban ou crowdsec, qui peuvent détecter et bloquer automatiquement les tentatives de connexion suspectes ou répétées.

Configuration du pare-feu pour restreindre les connexions SSH

Une autre bonne pratique consiste à configurer un pare-feu pour restreindre les connexions SSH à partir d’adresses IP spécifiques. Cela limite les risques d’attaques provenant d’adresses IP non autorisées.

Par exemple, si vous utilisez ufw comme pare-feu sur un serveur Ubuntu, vous pouvez autoriser uniquement une adresse IP spécifique à se connecter via SSH :

Terminal window
sudo ufw allow from 198.51.100.0 to any port 22

Cette commande permet uniquement à l’adresse IP 198.51.100.0 d’accéder au port SSH (22).

Activation de la journalisation avancée

Pour garder une trace des connexions SSH et des actions effectuées via SSH, il est important d’activer une journalisation avancée. Cela vous permet de retracer les actions en cas de comportement suspect ou de brèche de sécurité.

Modifiez les options de journalisation dans le fichier /etc/ssh/sshd_config pour augmenter le niveau de détail des journaux SSH :

LogLevel VERBOSE

Cette configuration permet de capturer plus d’informations sur les connexions et les tentatives de connexion, ce qui peut être utile lors d’une analyse post-incident.

Mise à jour régulière des logiciels SSH

Enfin, comme pour tout logiciel, il est essentiel de garder votre serveur SSH et les outils associés à jour. Les nouvelles versions de SSH incluent souvent des correctifs de sécurité importants et il est donc indispensable de les appliquer dès qu’elles sont disponibles.

Sur un serveur basé sur Ubuntu ou Debian, vous pouvez mettre à jour vos paquets SSH avec la commande suivante :

Terminal window
sudo apt-get update && sudo apt-get upgrade

Sur les systèmes basés sur CentOS ou Red Hat, utilisez :

Terminal window
sudo yum update openssh

Conclusion

Le tunneling SSH est bien plus qu’un simple outil pour rediriger du trafic réseau ; il représente une méthode essentielle pour sécuriser les communications, protéger les données sensibles et faciliter l’accès à des services et ressources distants de manière sécurisée. Que vous soyez développeur, administrateur système ou responsable de la sécurité, maîtriser le tunneling SSH est une compétence indispensable dans le contexte actuel où les menaces de sécurité informatique sont omniprésentes.

Plus loin