Foro de elhacker.net

Sistemas Operativos => GNU/Linux => Mensaje iniciado por: DonQuimi en 8 Marzo 2016, 12:56 pm



Título: Tunel SSH
Publicado por: DonQuimi en 8 Marzo 2016, 12:56 pm
Buenos dias!

Hace ya algun tiempo que busco la manera de poder acceder desde mi movil a la pagina de administracion de mi router. Este (un livebox de Orange) NO permite el acceso desde el exterior si no es desde una IP especificada previamente en la pagina de configuracion.

Al pretender acceder desde un movil, logicamente, no puedo especificar una IP en concreto pues esta va canviando con el tiempo.

Ya que tengo en casa un Linux encendido las 24 horas, he pensado en un tunel ssh. Pero no entiendo del todo la sintaxis. Por lo que he entendido, debe ser algo así:

ssh -L 8080:192.168.1.1:80 yomismo@eldominiodemicasa.no-ip.com

Entonces, ahora, que debo hacer en el movil? Por lo que entiendo, la linea anterior redirige el trafico del puerto 80 del router al puerto 8080 de http://eldominiodemicasa.no-ip.com

Pero si yo escribo en el navegador de mi movil http://eldominiodemicasa.no-ip.com:8080 no aparece absolutamente nada. Aún habiendo abierto en el NAT el puerto 8080 para la maquina Linux que me efectua la redireccion...

Evidentemente algo hago mal, y seguro que es una chorrada, pero no se que es.

Alguna pista? Gracias!



Título: Re: Tunel SSH
Publicado por: MinusFour en 8 Marzo 2016, 14:28 pm
No tienes que abrir el puerto 8080 en la maquina del server, pero necesitas tener un servidor SSH escuchando en eldominiodemicasa.no-ip.com. ¿En la página de configuración no puedes especificar un dominio? Así solo tendrías que actualizar tu dominio con la ip de tu movil (aunque si varios dispositivos moviles de tu compañia de telefono tienen una misma ip, es un riesgo que sería mejor no correr).


Título: Re: Tunel SSH
Publicado por: DonQuimi en 9 Marzo 2016, 08:23 am
Gracias por responder,

Respecto a lo que dices de indicar un dominio, no es posible, ya que la pagina de configuración del router ofrece 4 textbox separados por puntos para introducir una IP. Me apunto el dato de que varios dispositivos de un mismo operador pueden tener la misma IP, no lo sabia ;)

Por lo que dices de que no es necesario abrir el puerto 8080, se me genera una duda que, seguro, se debe a mi desconocimiento en el tema:

según lo he entendido yo (y aqui estarà el error) lo que hago con el comando "ssh -L 8080..." es abrir un tunel entre el puerto 8080 de esta maquina, que estara reflejando el contenido del puerto 80 del router, y el telefono movil, que accederia a dicho contenido a través del puerto 8080 de la maquina Linux, previamente habiendo iniciado sesion con algun cliente ssh (tipo juice ssh), e introduciendo en el navegador del telefono  "http://eldominiodemicasa.no-ip.com:8080", no?

Gracias por tu colaboración, ando superperdido en este tema...


Título: Re: Tunel SSH
Publicado por: DonQuimi en 9 Marzo 2016, 08:28 am
Para hacer mas facil la detección del problema, os explico, paso por paso lo que hago:

1.- Introduzcon en la maquina con Linux el comando: ssh -L 8080:192.168.1.1:80 yomismo@eldominiodemicasa.no-ip.com

2.- Abro en el router el puerto 8080, para la IP de la maquina Linux. Por lo que me decia MinusFour, un paso innecesario.

3.- Inicio una sesion ssh desde el smartphone con el usuario anteriormente indicado y usando el puerto 22.

4.- Sin cerrar dicha sesion ssh en el smartphone, voy al navegador y escribo: http://eldominiodemicasa.no-ip.com:8080

I no pasa nada...


Título: Re: Tunel SSH
Publicado por: MinusFour en 9 Marzo 2016, 14:53 pm
Uh, hace mucho que no uso un tunnel SSH. ¿No debería ser http://localhost:8080?


Título: Re: Tunel SSH
Publicado por: DonQuimi en 10 Marzo 2016, 13:48 pm
Si, perdona. Inicialmente lo intenté con localhost:8080, pero al ver que no funcionava probé suerte de la otra manera...

Hoy sigo igual pese a mis intentos... Oye, y no habrá otra manera de hacer esto? Osea, de acceder a la configuración del router con otro metodo que no sea un tunel ssh? Quizas es que no lo he enfocado bien desde el principio...


Título: Re: Tunel SSH
Publicado por: MinusFour en 10 Marzo 2016, 14:44 pm
Hay varias formas, puedes montar un reverse proxy con nginx por ejemplo:

https://www.nginx.com/resources/admin-guide/reverse-proxy/

Pones en un PC nginx, haces el proxy pass a 192.168.1.1 en cualquier path y necesitas configurar tu NAT para que puedas acceder al nginx desde fuera, de forma que:

Client-> Nginx -> Servidor HTTP del router

Aunque lo que estás haciendo con SSH debería funcionar.


Título: Re: Tunel SSH
Publicado por: DonQuimi en 11 Marzo 2016, 13:11 pm
Gracias por el consejo.

He estado investigando sobre nginx y me ha parecido una solución mucho mas elegante, ya que no requiere que abra un extremo del tunel ssh en el smartphone. Simplemente escribo la direccion con el puerto correspondiente y listo.

De momento he conseguido acceder al router, con este contenido en el fichero que hay dentro de "sites-available":

Código:
server{
        listen 8080;
        server_name eldominiodemicasa.no-ip.com;

        location / {
                proxy_pass http://192.168.1.1:80;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $http_host;
                }
        }

Ahora, el "problemilla" es que en la barra de direcciones del navegador del smartphone, de vez en cuando, desaparece el numero de puerto al hacer click en algun link y claro, da error. Pero por el momento, volviendo a introducir el numero de puerto dentro de su espacio correspondiente en la url, se dirige bien a link indicado.

Seguire investigando a ver porque ocurre esto y como solucionarlo...

Gracias por la ayuda! (Quizas se podria renombrar el tema, o moverlo a otro sitio, al no tratar en este momento sobre ssh tunneling?)


Título: Re: Tunel SSH
Publicado por: MinusFour en 11 Marzo 2016, 15:27 pm
No es necesario que uses el puerto 8080, puedes usar el mismo puerto que tu página. A menos que por alguna razón tu router no te deje. La verdad no es que este pasando con los links, hasta donde tengo entendido las urls relativas se tienen que reescribir con el mismo puerto. A menos que esten usando urls absolutas (pero te deberían cambiar la dirección a 192.168.1.1 y no solo el puerto a menos que nginx este cambiando los links?).


Título: Re: Tunel SSH
Publicado por: DonQuimi en 14 Marzo 2016, 08:36 am
No me he explicado bien, creo. El puerto 80 quiero dejarlo libre para un servidor apache que tengo en la misma maquina, de aqui que utilize el puerto 8080.

Por otro lado, cuando digo que me varia el link, quiero decir lo siguiente: yo pongo en el navegador del smartphone: eldominiodemicasa.no-ip.com:8080 y, efectivamente, nginx me redirige a la pagina de mi router. Todo bien hasta aqui.

Ahora, cuando hago login con el usuario y password (convenientemente modificado el que viene por defecto), nginx me dirige a eldominiodemicasa.no-ip.com/index.stm.

Es decir, en este punto, se pierde el ":8080". Si escribo manualmente este puerto en la barra de direcciones, y actualizo, entonces ya me entra a la configuración, ya que el login se ha efectuado antes correctamente y la sesión aún esta iniciada. Pero es algo engorroso tener que ir introduciendo manualmente el numero de puerto cada vez que hago click en un link.

Creo que lo solucionaria canviando algo en la configuración de nginx, no? Por lo que he entendido, utilizando "http_post" en el "proxy_set_header" deberia respetarse el puerto indicado... pero no es así.

Gracias!


Título: Re: Tunel SSH
Publicado por: MinusFour en 14 Marzo 2016, 14:19 pm
No me he explicado bien, creo. El puerto 80 quiero dejarlo libre para un servidor apache que tengo en la misma maquina, de aqui que utilize el puerto 8080.

Por otro lado, cuando digo que me varia el link, quiero decir lo siguiente: yo pongo en el navegador del smartphone: eldominiodemicasa.no-ip.com:8080 y, efectivamente, nginx me redirige a la pagina de mi router. Todo bien hasta aqui.

Ahora, cuando hago login con el usuario y password (convenientemente modificado el que viene por defecto), nginx me dirige a eldominiodemicasa.no-ip.com/index.stm.

Es decir, en este punto, se pierde el ":8080". Si escribo manualmente este puerto en la barra de direcciones, y actualizo, entonces ya me entra a la configuración, ya que el login se ha efectuado antes correctamente y la sesión aún esta iniciada. Pero es algo engorroso tener que ir introduciendo manualmente el numero de puerto cada vez que hago click en un link.

Creo que lo solucionaria canviando algo en la configuración de nginx, no? Por lo que he entendido, utilizando "http_post" en el "proxy_set_header" deberia respetarse el puerto indicado... pero no es así.

Gracias!

Honestamente, no se que este pasando. Verifica las peticiones HTTP que estas recibiendo de tu router (lo puedes hacer desde las herramientas de desarrollador de tu navegador en la sección de Red). Ahi debes poder revisar las peticiones que fallan.

Lo único que se me ocurre quizas es que hagas:

Código:
proxy_redirect http://192.168.1.1:80/ http://$host:$server_port/;

Pero esta configuración aplica solo para redirects no para los links.


Título: Re: Tunel SSH
Publicado por: DonQuimi en 15 Marzo 2016, 09:08 am
He probado la configuración que me indicavas para las redirecciones, pero no parece haberle gustado tampoco a nginx.

Respecto a revisar las peticiones del router. Cuelgo un par de imagenes con las peticiones que se generan cuando hago click en el boton de login. (He ocultado el nombre de mi dominio, espero no os importe, es por precaución, no por desconfianza).

En primer lugar, se observa como, al llamar al programa login.exe mediante el metodo POST, en la cabecera de la petición aparece el puerto 8080, tanto en el campo "Host", como en el "Referer", pero en la cabecera de la respuesta, este ya desaparece:

(https://dl.dropboxusercontent.com/u/17197139/1.png)

En segundo lugar, se observa como se genera otra petición, por metodo GET, que ya no incluye el numero de puerto en el campo "Host", aunque si en el "Referer".

(https://dl.dropboxusercontent.com/u/17197139/2.png)

Llegados a este punto, mis escasos conocimientos de informatica creo que se han agotado. Pido disculpas por las molestias, aunque ganas de aprender no me faltan!



Título: Re: Tunel SSH
Publicado por: MinusFour en 15 Marzo 2016, 16:29 pm
Tengo la ligera sospecha que tu servidor está regresando tu hostname en Location incorrectamente. Yo probaría con usar:

Código:
proxy_set_header Host 192.168.1.1

Si esto no funciona, revisa nuevamente Location en las cabeceras de Respuesta de la primera petición.


Título: Re: Tunel SSH
Publicado por: DonQuimi en 16 Marzo 2016, 11:21 am
Nada, he probado con tus indicaciones y tampoco. Al hacer la peticion GET, por algún motivo, se pierde el dato del puerto asociado.

Lo que si que he notado es que, una vez dentro del apartado de configuración del router, cuando he insertado de nuevo el puerto manualmente en la barra de direcciones, las distintas peticiones por metodo GET funcionan perfectamente, respetando el puerto asociado en el Host. Es algo curioso.

Tampoco es algo que me haya pasado solamente a mi. Buscando en google "nginx missing port", veo que hay mas gente que ha tenido este problema:


http://www.redmine.org/boards/2/topics/36256 (http://www.redmine.org/boards/2/topics/36256)
http://serverfault.com/questions/363159/nginx-proxy-pass-redirects-ignore-port (http://serverfault.com/questions/363159/nginx-proxy-pass-redirects-ignore-port)

Pero por algun motivo, las soluciones que plantean no me funcionan...


Título: Re: Tunel SSH
Publicado por: DonQuimi en 16 Marzo 2016, 12:03 pm
Solucionado!

No se si he resuleto el problema, o solamente lo he parcheado. Los que sabeis de esto direis. Lo que he hecho es (aparte de leer mucha documentacion) añadir la siguiente linea:

Código:
proxy_redirect http://eldominiodemicasa.no-ip.com/index.stm http://eldominiodemicasa.no-ip.com:8080/index.stm

Con esto ya accedo normalmente a la pàgina del router y funciona todo correctamente.

También, ahora que ya se como funciona esto, he añadido otro redirect para que, al cerrar la sesion, me dirija nuevamente a la pàgina de inicio:

Código:
proxy_redirect http://eldominiodemicasa.no-ip.com/login.stm http://eldominiodemicasa.no-ip.com:8080;

Cuelgo el contenido entero del fichero de dentro de sites-available, por si a alguien le interesa:

Código:
server{
        listen 8080;
        server_name eldominiodemicasa.no-ip.com;

        location /{
                proxy_pass http://192.168.1.1:80;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_redirect http://eldominiodemicasa.no-ip.com/index.stm http://eldominiodemicasa.no-ip.com:8080/index.stm;
                proxy_redirect http://eldominiodemicasa.no-ip.com/login.stm http://eldominiodemicasa.no-ip.com:8080;
                }
        }

Así por lo menos queda en algún sitio recogida esta información, ya que yo no fuí capaz de encontrar en ningún sitio como hacerlo para acceder remotamente a un router que no permite esta opción...