Comment puis-je accéder à distance à un site intranet à partir d'un réseau externe via un tunnel SSH?

J'ai récemment installé FreeIPA sur un système interne accessible à la maison. Je voudrais gérer cette interface Web à partir de réseaux qui sont externes à mon réseau local, mais en même time, je ne veux pas avoir à exposer cette interface Web à l'Internet public. Est-il possible d'y accéder via un tunnel SSH?

NOTE: je suis familier avec la configuration d'un tunnel en utilisant ssh & c'est -L switch comme ceci:

 $ ssh -L 12345:ipa.local.net:80 mysshserver 

Cependant, cette approche ne fonctionnera pas dans ce scénario car l'access à FreeIPA nécessite que vous utilisiez le nom d'hôte réel du server en plus d'être en mesure d'accéder à l'interface user Web en utilisant les deux ports 443 et 80.

Y at-il un autre moyen d'accomplir cela au-delà de ssh -L ?

L'exécution de tunneling SSH peut être un peu déroutante avec toute la terminologie, mais il existe une fonctionnalité complémentaire à -L , qui vous permet d'assigner des ports de manière «dynamic» en atsortingbuant une socket localement, au lieu d'un seul port.

De la page de manuel:

 -D [bind_address:]port Specifies a local ``dynamic'' application-level port forwarding. This works by allocating a socket to listn to port on the local side, optionally bound to the specified bind_address. Whenever a connection is made to this port, the connection is forwarded over the secure channel, and the application protocol is then used to determine where to connect to from the remote machine. Currently the SOCKS4 and SOCKS5 protocols are supported, and ssh will act as a SOCKS server. Only root can forward privileged ports. Dynamic port forwardings can also be specified in the configuration file. 

En allouant un socket, tout le trafic peut être apathé vers le site distant, y compris les requêtes DNS.

Comment l'utiliser

Pour commencer, vous devrez ouvrir une connection à votre réseau local (via son adresse IP publique sur Internet) comme ceci:

 $ ssh -D 1234 myserver 

Remarque: Cela suppose que vous avez la possibilité de SSH dans un server accessible via votre adresse IP Internet publique.

Une fois que c'est configuré, dans un autre terminal, vous devrez configurer votre browser Web pour utiliser ce tunnel. NOTE: Ce type de tunnel vous fournit une socket, donc pour vous y connecter, vous devez requestr à votre browser web de proxy tout son trafic via cette socket. Ceci est généralement montré comme une connection de type SOCKS ou SOCKS v5 pour votre proxy.

Un exemple

Dans cet exemple, je vais montrer comment vous pouvez le faire en utilisant Chromium, via la CLI:

 $ ./Chromium --proxy-server="socks5://localhost:1234" 

Ici, je lance Chromium et le pointe vers le tunnel SSH que nous avons configuré précédemment sur le port 1234 de notre hôte local. Et si je tente ensuite de visiter une URL pour un server configuré sur mon LAN, je suis dirigé vers ce dernier :

ss # 1

Proxying avec d'autres browsers

Tous les principaux browsers fournissent cette fonctionnalité et il est largement couvert sur d'autres sites SE tels que SuperUser:

  • Comment puis-je modifier les parameters du proxy pour Google Chrome?
  • Comment configurer les parameters proxy dans Firefox?

Vous pouvez même utiliser les extensions des différents browsers qui vous permettent de ne sélectionner que certains trafics, tout en vous permettant de router tout le rest sur votre connection normale à Internet.

Par exemple, vous pouvez utiliser ProxySwitchy! avec Chrome pour faire exactement cela:

ss # 2

ss # 3