avec SSH uniquement: accès Web en tunnel inverse via le proxy ssh SOCKS

15

De temps en temps, je dois me connecter à un serveur dont l'accès est très restreint.
Seul le SSH entrant est autorisé par le pare-feu DMZ.
Les connexions HTTP sortantes sont bloquées.

Je cherche un moyen facile de tunneler l'accès Web via ma session SSH, donc je peux installer les mises à jour et les logiciels via yum / apt-get. Idéalement, je voudrais éviter d'installer des logiciels / services supplémentaires dans la zone protégée.

Que faites-vous dans une telle situation?

SSH a l' -D <port>option proxy SOCKS. Mais malheureusement, ce n'est que dans un sens du client au serveur et il n'y a pas d'option inverse.

Kaii
la source

Réponses:

26

J'ai finalement réussi à accomplir cela avec sshseulement:

  1. démarrer un proxy SOCKS local sur votre ordinateur client (à l'aide de ssh -D)
  2. se connecter au serveur distant et configurer une redirection de port inverse ( ssh -R) vers votre proxy SOCKS local
  3. configurer le logiciel serveur pour utiliser le proxy transféré

1. Démarrez le proxy de chaussettes local en arrière-plan

Connectez-vous à localhost via SSH et ouvrez le proxy SOCKS sur le port 54321.

$ ssh -f -N -D 54321 localhost

-f exécute SSH en arrière-plan.

Remarque: Si vous fermez le terminal où vous avez démarré la commande, le processus proxy sera tué. N'oubliez pas de nettoyer après vous-même en fermant la fenêtre du terminal lorsque vous avez terminé ou en tuant le processus vous-même!

2. se connecter au serveur distant et configurer la redirection de port inverse

Liez le port distant 6666 au port local 54321. Cela rend votre proxy de chaussettes local disponible pour le site distant sur le port 6666.

$ ssh root@target -R6666:localhost:54321

3. configurer le logiciel serveur pour utiliser le proxy transféré

Configurez simplement yum, apt, curl, wget ou tout autre outil prenant en charge SOCKS pour utiliser le proxy 127.0.0.1:6666.

Voilá! Tunnelage heureux!


4. facultatif: configurez le logiciel serveur pour utiliser le proxy transféré

J'ai trouvé que l'installation proxychainssur le serveur cible rend les choses beaucoup plus faciles.

Il permet à n'importe quel logiciel d'utiliser le proxy SOCKS (même telnet), en utilisant une LD_PRELOADastuce pour rediriger les requêtes TCP et DNS de commandes arbitraires vers un proxy.

Configuration /etc/proxychains.confpour utiliser le proxy de chaussettes transféré:

[ProxyList]
# SSH reverse proxy
socks5  127.0.0.1 6666

Tunnel outils arbitraires (qui utilisent TCP) avec proxychains:

$ proxychains telnet google.com 80
$ proxychains yum update
$ proxychains apt-get update
Kaii
la source
3

Les versions plus récentes de SSH permettent d'utiliser l'option très simple de ssh-R <[bind_address:]port>. Utiliser uniquement le port sur l'hôte et peut-être l'adresse de liaison, mais ne pas spécifier le port côté client créera un proxy SOCKS inversé.

Ceci est également indiqué dans les pages de manuel des nouvelles versions SSH:

[...] si aucune destination explicite n'a été spécifiée, ssh agira comme un proxy SOCKS 4/5 et transmettra les connexions aux destinations demandées par le client SOCKS distant.

Vous pouvez tester cela avec curl en vous connectant à un simple "Donnez-moi mon IP" -API comme http://ifconfig.io .

$ curl ifconfig.io

contre

$ curl --socks5 localhost:<PORT> ifconfig.io

Richard Metzler
la source
2
Il serait utile de mentionner dans quel numéro de version cette fonctionnalité a été introduite.
kasperd
beaucoup plus simple, merci!
Kaii
1
@kasperd: OpenSSH 7.6 , publié le 03/10/2017. Vérifiez le 3ème point sous Nouvelles fonctionnalités
MestreLion