Comment chaîner des proxys SOCKS?

10

Préface: Ce que je recherche, ce sont des instructions explicites, dans le même format que ci-dessus. Autrement dit, quelque chose comme exécuter: "... exécuter la commande X sur la machine A, puis la commande Y sur la machine B ..."

J'ai un proxy de chaussettes fonctionnel de mon ordinateur portable (machine A) à la machine B:

[A]$ ssh -ND 8888 B

Je peux configurer Firefox pour utiliser le proxy SOCKS sur le port local de A 8888et naviguer sur A works. Jusqu'ici tout va bien.

Mais j'ai aussi un proxy de chaussettes entre les machines B et C:

[B]$ ssh -ND 8157 C

Je peux donc naviguer sur B comme si j'étais sur C, en définissant le proxy de chaussettes Firefox de B sur 8157.

Existe-t-il un moyen de chaîner les deux proxys afin que je puisse utiliser Firefox localement (sur A) tout en utilisant la connexion à C?

Autrement dit, transmettre en quelque sorte toutes les demandes de chaussettes de Firefox de A à C. A et C ne peuvent pas se voir directement, mais j'ai un accès SSH racine complet partout. Toutes les machines sont Debian.

Notez que je ne veux pas transférer un seul port comme le port 80 mais je veux un proxy SOCK entièrement chaîné .

user124114
la source
ne devriez-vous pas simplement faire -L 8888:B:8157sur [A]?
bdecaf
@bdecaf En plus des commandes données? Au lieu? Aucune modification des paramètres de FireFox?
user124114
Juste pour [A]. Le reste comme vous le décrivez.
bdecaf
ssh -L 8888:B:8157échoue, nécessite un paramètre de nom d'hôte. Pouvez-vous donner une réponse plus complète et de bout en bout? Si cela fonctionne, j'accepterai.
user124114
B est-il vraiment le nom de votre machine?
bdecaf

Réponses:

12

Je viens de confirmer que cela fonctionnait avec certaines machines virtuelles:

[A]$ ssh -tt -v -L8888:localhost:8157 user@B ssh -t -D 8157 user@C

De A , vous ouvrez un port tunnel avant de 8888 localement 8157 sur B -L8888:localhost:8157 . Une fois que vous avez établi une connexion à B, la commande à distance ssh -t -D 8157 user@Cest exécuté, ce qui permet à votre proxy SOCKS par C . D'après ce que j'ai lu, «-t» semble être nécessaire, même si je dois encore comprendre pourquoi.

Note, ceci est une commande sur le premier hôte qui invoque ssh deux fois, de A-> B et de B-> C . Vous pouvez également diviser cela en commandes distinctes, comme décrit ci-dessous.

Bonus: pour enchaîner trois mandataires ...

C'est à dire A->B->C->D->Internet

[hostA]$ ssh -2 -C -D 55557 -L 55556:127.0.0.1:55556 -L 55555:127.0.0.1:55555 user@B
[hostB]$ ssh -2 -C -D 55556 -L 55555:127.0.0.1:55555 user@C
[hostC]$ ssh -2 -C -D 55555 user@D

Notez que pour chaque saut, vous avez besoin d'un redirecteur correspondant supplémentaire -Lsur les hôtes précédents de la chaîne.

Références:

glallen
la source
Traduction, ligne par ligne: - 1. Créez un port dynamique en avant de l'hôte B sur 57, exposez le port 56 en B, exposez le port 55 en B. - 2. Créez un port dynamique en avant sur le port 56 depuis l'hôte C, exposez port 55 de C - 3. Créez un port dynamique vers l'avant sur le port 55 de l'hôte D - Le résultat final est un proxy Socks de chaque hôte, via SSH à chaque étape. Les ports 57 à 55 contiendront des proxys avec des points finaux en B, C et D.
Ray Foss
Avez-vous des proxy ssh gratuits? Je n'en ai pas trouvé.
aemonge
4

L'excellente réponse de glallen en utilisant SSH fera le travail. Cependant, la bonne façon d'y parvenir est d'utiliser le proxychainsprogramme. ProxyChains est un outil puissant qui vous permet d'exploiter facilement plusieurs serveurs proxy en même temps. Par exemple, il est utilisé par les pirates informatiques pour cacher leur identité lors de l'exécution d'attaques sur Internet - en enchaînant un tas de procurations à travers le monde, il devient pratiquement impossible à tout enquêteur judiciaire de retracer le trafic jusqu'à eux. Cela ne veut pas dire que vous êtes un pirate malveillant - cela fonctionnera pour de nombreux cas d'utilisation différents. ;)

ProxyChains est installé par défaut sur certaines distributions Linux (comme Kali Linux). Sur Ubuntu / Debian, par exemple, vous pouvez facilement l'installer en faisant:

  • sudo apt-get install proxychains

Proxychains recherche un fichier de configuration dans /etc/proxychains.conf. Une fois que vous l'avez installé, sauvegardez le fichier de configuration Proxychains existant (s'il existe) et créez-en un nouveau:

  • mv /etc/proxychains.conf /etc/proxychains-backup.conf
  • nano /etc/proxychains.conf

Maintenant, collez cet exemple de configuration que j'ai écrit pour vous:

strict_chain

proxy_dns

tcp_read_time_out 15000
tcp_connect_time_out 8000

[ProxyList]
socks4          192.168.1.1     8888
socks4          192.168.1.2     8157
socks4          192.168.1.3     6969

Dans cet exemple, 192.168.1.1est l'adresse IP du premier serveur proxy SOCKS, 8888est le port que le premier proxy SOCKS écoute, 192.168.1.2est l'adresse IP du deuxième serveur proxy SOCKS, 8157est le port que le deuxième proxy SOCKS écoute, et ainsi de suite.

Maintenant, tirez parti des proxychains en le faisant à proxychains firefoxpartir de la ligne de commande pour lancer Firefox. (Assurez-vous que Firefox est fermé en premier.) Maintenant, chaque fois que Firefox établit une connexion sortante, le programme proxychains encapsulera le trafic de sorte qu'il sera mandaté via tous les serveurs que vous avez spécifiés dans ce fichier de configuration. Pour être clair, dans vos préférences Firefox, vous ne devez spécifier AUCUN serveur proxy - les proxychains s'occuperont de tout dans les coulisses.

Notez que, à des fins de dépannage, vous devriez probablement essayer de le faire fonctionner en utilisant 1 proxy à la fois avant d'essayer les 3.;)

Références:

James
la source
Les chaînes de proxy configurent-elles également les proxys pour vous? ou simplement vous aider à vous connecter aux proxys existants?
glallen
Les chaînes proxy se connectent uniquement aux serveurs proxy existants.
James
Si tel est le cas, je ne suis pas d'accord avec l'expression "la bonne façon de ..." car la question concerne spécifiquement la configuration des proxy pour le chaînage sur plusieurs machines, et pas seulement la direction de Firefox vers les proxy existants. Peut-être - "une autre méthode, une fois les procurations en place" serait informative, sans impliquer que l'utilisation de ssh droit est en quelque sorte incorrecte . De bonnes informations de fond supplémentaires cependant. Merci. Modifiez et vous aurez mon vote positif.
glallen