SSH, des tunnels pour tous les services

Miniature reverse SSH pour HTTP

Cet article est le dernier d'une série de quatre :

  1. SSH, pour se connecter en ligne de commande à un ordinateur distant
  2. SSH, se connecter sans mot de passe à l'aide de la cryptographie
  3. Reverse SSH, pour se connecter à un ordinateur distant protégé par un pare-feu
  4. SSH, des tunnels pour tous les services

Dans le précédent article, nous avons vu comment créer un tunnel SSH pour se connecter en ligne de commande à un ordinateur distant ; comment relier le port d'une machine externe au port SSH de la machine à contacter, et ainsi contourner la protection d'un pare-feu empêchant, a priori, une telle connexion. L'objet de cet article est de montrer que cette méthode peut être généralisée à l'usage de biens d'autres services que la seule connexion en ligne de commande.

Nous allons considérer ici le cas d'un serveur web installé derrière un pare-feu empêchant toute connexion directe. Nous allons ouvrir un tunnel entre le port 22280 de SERVEUR_A et le port 80 de SERVEUR_B — port par défaut d'un serveur web — grâce au SSH inversé.

Connexion au serveur web par SSH inversé, via SERVEUR_A
Connexion au serveur web par SSH inversé, via SERVEUR_A

La procédure à suivre est la même que dans l'article précédent. Seule la configuration du service autossh diffère.

Configuration de SERVEUR_B

Se connecter à SERVEUR_B en tant que super-utilisateur :

su -

Créer un service systemd pour le tunnel SSH dédié au service HTTP :

vim /etc/systemd/system/autossh_http.service

Et y coller ceci :

[Unit]
Description=Keep a tunnel open on port 80
After=network.target

[Service]
User=USER_B
ExecStart=/usr/bin/autossh -o ServerAliveInterval=60 -NR 22280:localhost:80 JAIL_USER@IP_SERVEUR_A
Restart=on-failure

[Install]
WantedBy=multi-user.target

Activer le service au démarrage du système, et le démarrer :

systemctl --now enable autossh_http.service

Se déconnecter :

exit

Se connecter au serveur web

Si un site web est effectivement disponible sur SERVEUR_B, alors il peut désormais être consulté via tout navigateur web, à l'adresse suivante : http://IP_SERVEUR_A:22280.

De la même manière, il est possible d'opérer ainsi pour tout autre service hébergé par le serveur !

Article sous licence Creative Commons BY-SA 3.0 France.

Vus : 300
Publié par Cyprien Pouzenc : 27