web-dev-qa-db-fra.com

Tunneling SSH sur SSL

Sur l’un de mes systèmes, il existe un pare-feu qui interdit toute sortie, à moins que http (s) ...

Certains utilisateurs doivent ssh mais ils ne le peuvent pas. J'ai d'abord essayé d'exécuter ssh sur le port 443, mais sans succès.

Je l'ai googlé et j'ai trouvé que je pouvais le faire en utilisant stunnel, qui nécessite une configuration, alors comment faire cela?

1
Maythux

Cette configuration est faite en deux parties. La première partie est effectuée sur le serveur SSH distant. La deuxième partie est faite sur la machine locale.

Instructions côté serveur:

Commencez par installer le stunnel:

Sudo apt-get install stunnel4

Faire le certificat SSL (pour 365 jours):

openssl genrsa 1024 > stunnel.key
openssl req -new -key stunnel.key -x509 -days 365 -out stunnel.crt
cat stunnel.crt stunnel.key > stunnel.pem
Sudo mv stunnel.pem /etc/stunnel/

Configurez stunnel sur le tunnel 443 (https) à 22 (ssh):

Créez un fichier de configuration pour répondre aux besoins d'utilisation de SSH sur SSL.

gksu gedit /etc/stunnel/stunnel.conf

Écrivez ces:

pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel.pem
[ssh] accept = public_ip:443
connect = 127.0.0.1:22

La configuration ci-dessus indique à stunnel où trouver le certificat que nous avons généré et où accepter et transférer les connexions. Dans ce cas, stunnel écoutera sur le public_ip sur le port 443 (https) et redirigera les connexions vers localhost sur 22 (ssh).

Pour démarrer le service Stunnel, nous devons l’activer dans/etc/default/stunnel4. Modifiez la ligne ACTIVE de 0 à 1.

Enfin, nous pouvons démarrer le service et passer à la configuration du client:

Sudo service stunnel4 start

Vous pouvez vérifier que stunnel écoute maintenant en utilisant la commande netstat:

netstat -natp | grep :443

Instructions côté client:

Commencez par installer le paquet stunnel:

Sudo apt-get install stunnel4

Faire le certificat SSL (pour 365 jours):

openssl genrsa 1024 > stunnel.key
openssl req -new -key stunnel.key -x509 -days 365 -out stunnel.crt
cat stunnel.crt stunnel.key > stunnel.pem
Sudo mv stunnel.pem /etc/stunnel/

Créer un fichier de configuration:

gksu gedit /etc/stunnel/stunnel.conf

Écrivez ces:

pid = /var/run/stunnel.pid
cert = /etc/stunnel/stunnel.pem
[ssh] accept = 127.0.0.1:2200
connect = remote_ip:443

Pour démarrer le service Stunnel, nous devons l’activer dans/etc/default/stunnel4. Modifiez la ligne ACTIVE de 0 à 1.

Démarrer le service.

Sudo service stunnel4 start

Faire le lien

Avec le service stunnel fonctionnant maintenant sur le serveur et le client, nous sommes prêts à établir la connexion sécurisée. Désormais, lorsque vous vous connecterez à votre ordinateur local sur le port 2200, il établira une connexion avec l'adresse IP distante du port 443, créera une connexion SSL sécurisée et se connectera au port 22 à l'autre extrémité. Vos connexions SSH chiffrées sont maintenant encapsulées dans une connexion SSL chiffrée utilisant le port 443.

ssh localhost -p 2200

Sources: lien1lien2

3
Maythux

stunnel convient pour les paramètres permanents, mais si vous souhaitez une solution plus ad hoc, vous pouvez concaténer 2 tunnels.

Par exemple, vous voulez que l'hôte A accède au port 443 sur l'hôte B mais qu'il soit bloqué par un pare-feu, vous essayez donc de créer un tunnel à partir de l'hôte C qui peut accéder à la fois aux ports A 22 et 443.

ssh -R 443:B:443 root@A ne fonctionnera pas sous Ubuntu ou sous une distribution qui désactive le compte root ou l'accès ssh root.

ssh -R 443:B:443 other_user@A ne fonctionnera pas car seul root peut configurer un port d'écoute sur A, même si l'utilisateur "other_user" dispose de l'autorisation Sudo.

ssh -R 1443:B:443 other_user@A Permettra à A d'accéder à B: 443 en utilisant 127.0.0.1:1443. C'est bien, mais parfois vous ne pouvez pas changer le port (le numéro de port est peut-être codé en dur dans une application).
Dans ce cas, vous pouvez ajouter un autre tunnel de A: 443 à A: 1443 en utilisant ssh -L 443:127.0.0.1:1443 127.0.0.1 en plus du tunnel A-> C-> B précédent.

2
Pere Cortada