SSH, des tunnels pour tous les services
Cet article est le dernier d'une série de quatre :
- SSH, pour se connecter en ligne de commande à un ordinateur distant
- SSH, se connecter sans mot de passe à l'aide de la cryptographie
- Reverse SSH, pour se connecter à un ordinateur distant protégé par un pare-feu
- 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é.
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.