¿Cómo encadenar proxies SOCKS?

10

Prefacio: Lo que estoy buscando son instrucciones explícitas, en el mismo formato que el anterior. Es decir, algo así como ejecutar: "... ejecuta el comando X en la máquina A, luego ordena Y en la máquina B ..."

Tengo un proxy de calcetines que funciona desde mi computadora portátil (máquina A) a la máquina B:

[A]$ ssh -ND 8888 B

Puedo configurar Firefox para usar el proxy SOCKS en el puerto local de A 8888, y la navegación en A funciona. Hasta aquí todo bien.

Pero también tengo un proxy de calcetines entre las máquinas B y C:

[B]$ ssh -ND 8157 C

Entonces puedo navegar en B como si estuviera en C, configurando el proxy de calcetines Firefox de B en 8157.

¿Hay alguna manera de encadenar los dos proxies para que pueda usar Firefox localmente (en A) mientras uso la conexión a C?

Es decir, de alguna manera reenviar todas las solicitudes de calcetines de Firefox desde A hasta C. A y C no pueden verse directamente, pero tengo acceso SSH root completo en todas partes. Todas las máquinas son Debian.

Tenga en cuenta que no quiero reenviar un solo puerto como el puerto 80, pero quiero un proxy SOCK completamente encadenado .

usuario124114
fuente
¿No deberías hacerlo -L 8888:B:8157en [A]?
bdecaf
@bdecaf ¿Además de los comandos dados? ¿En lugar? ¿No hay cambios en la configuración de FireFox?
usuario124114
Solo por [A]. El resto como lo describes.
bdecaf
ssh -L 8888:B:8157falla, requiere un parámetro de nombre de host. ¿Puedes dar una respuesta más completa y completa? Si funciona, lo aceptaré.
user124114
¿B es realmente el nombre de su máquina?
bdecaf

Respuestas:

12

Acabo de confirmar que esto funcionó con algunas máquinas virtuales:

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

De una , se abre un túnel hacia adelante puerto desde 8888 a 8157 de forma local en B -L8888:localhost:8157 . Una vez que haya establecido una conexión con B, el comando remoto ssh -t -D 8157 user@Cse ejecuta, lo que proporciona a su proxy SOCKS a través C . Por lo que he leído, parece que se requiere '-t', aunque todavía tengo que entender por qué.

Tenga en cuenta, este es un comando en el primer anfitrión que invoca ssh dos veces, de A-> B y desde B> C . También puede dividir esto en comandos separados, como se describe a continuación.

Bonificación: por encadenar tres proxies ...

Es decir 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

Tenga en cuenta que para cada salto, necesita un reenviador de coincidencia adicional -Len los hosts anteriores de la cadena.

Referencias

Glallen
fuente
Traducción, línea por línea: - 1. Realice un puerto dinámico hacia adelante desde el host B en 57, exponga el puerto 56 desde B, exponga el puerto 55 desde B. - 2. Realice un puerto dinámico hacia adelante en el puerto 56 desde el host C, exponga puerto 55 desde C - 3. Realice un puerto dinámico hacia adelante en el puerto 55 desde el host D - El resultado final es un proxy Socks de cada host, a través de SSH en cada paso. Los puertos 57 a 55 contendrán proxies con puntos finales en B, C y D.
Ray Foss
¿Tienes algún proxy ssh gratuito? No he encontrado ninguno.
Aemonge
4

La excelente respuesta de Glallen utilizando SSH hará el trabajo. Sin embargo, la forma correcta de lograr esto es usar el proxychainsprograma. ProxyChains es una herramienta poderosa que le permite aprovechar fácilmente varios servidores proxy al mismo tiempo. Por ejemplo, los piratas informáticos lo utilizan para ocultar su identidad mientras realizan ataques por Internet: al encadenar a un grupo de representantes en todo el mundo, resulta prácticamente imposible que cualquier investigador forense rastree el tráfico hasta ellos. No quiere decir que usted sea un hacker malintencionado: funcionará para muchos casos de uso diferentes. ;)

ProxyChains se instala por defecto en algunas distribuciones de Linux (como Kali Linux). En Ubuntu / Debian, por ejemplo, puede instalarlo fácilmente haciendo lo siguiente:

  • sudo apt-get install proxychains

Proxychains busca un archivo de configuración en /etc/proxychains.conf. Una vez que lo tenga instalado, haga una copia de seguridad del archivo de configuración de Proxychains existente (si existe) y cree uno nuevo:

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

Ahora, pegue en esta configuración de ejemplo que he escrito para usted:

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

En este ejemplo, 192.168.1.1es la dirección IP del primer servidor proxy SOCKS, 8888es el puerto en el que escucha el primer proxy SOCKS, 192.168.1.2es la dirección IP del segundo servidor proxy SOCKS, 8157es el puerto en el que escucha el segundo proxy SOCKS, Etcétera.

Ahora, aproveche proxychains haciendo proxychains firefoxdesde la línea de comandos para iniciar Firefox. (Asegúrese de que Firefox esté cerrado primero.) Ahora, cada vez que Firefox realiza una conexión saliente, el programa proxychains encapsulará el tráfico de manera que se enviará a través de todos los servidores que especificó en este archivo de configuración. Para que quede claro, en sus preferencias de Firefox, no debe especificar NINGÚN servidor proxy: los proxychains se encargarán de todo lo que esté detrás de escena.

Tenga en cuenta que, a efectos de resolución de problemas, probablemente debería intentar que funcione con 1 proxy a la vez antes de probar los 3.;)

Referencias

James
fuente
¿Las cadenas de proxy también configuran los proxy para usted? o simplemente ayudarlo a conectarse a los servidores proxy existentes?
glallen
Proxychains solo se conectará a servidores proxy existentes.
James
Si ese es el caso, no estoy de acuerdo con la frase "la forma correcta de ...", ya que la pregunta se refiere específicamente a configurar los servidores proxy para encadenar en múltiples máquinas, no solo dirigir Firefox a servidores proxy existentes. Tal vez: "un método alternativo, una vez que los proxies están en su lugar" sería informativo, sin implicar que usar ssh directo es de alguna manera inadecuado . Buena información de fondo adicional sin embargo. Gracias. Edite y tendrá mi voto a favor.
glallen