Acceder a sitios restringidos con GNU/Linux mediante SSH.

Es muy común, sobre todo en las empresas, que hayan cierto sitios a los que se le restringe el acceso por algún determinado motivo (a veces absurdo, otras no), como pueden ser sitios de descarga, webmails y demás.

Por lo general, estas restricciones se hacen bloqueando el dominio del sitio en cuestión, añadiendo además, restricciones a determinados puertos ¿Qué hacemos entonces si necesitamos obtener alguna información de forma inmediata?

Normalmente los usuarios de Windows hacen uso de programas como Putty (el cual también está disponible en GNU/Linux), o YourFreedom, pero existe otra forma un poco más segura de poder acceder a los sitios que tenemos denegados, usando SSH y Sock5.

Para este ejemplo, estoy contando con que tenemos abiertos los puertos 80, 3128 (usado normalmente para la navegación) y el 9122, y veremos dos casos reales. No es mi objetivo con este artículo, explicar de forma detallada que es SSH, Sock5 y como funcionan, eso lo dejaremos para otra ocasión. Veremos dos ejemplos:

– Conectándonos a otra PC por SSH usando su dirección IP.
– Conectándonos a otra PC por SSH usando un dominio (via DNS).

¿Qué necesitamos?

– Un ordenador con acceso a Internet al que podamos acceder por SSH.
– SSH instalado como es lógico.
– Corkscrew (por si estamos por detrás de un proxy).

Abrimos un terminal y ponemos (en el caso de Debian):

$ sudo aptitude install ssh corkscrew

OK.. ya instalé ¿Cómo me conecto?

Es muy simple. Abrimos un terminal y ponemos ssh -p 443 usuario@ip_del_ordenador_con_internet:

ssh -p 9122 -D 1080 elav@192.168.1.1

El parámetro -p como es lógico, se usa para establecer por cual puerto nos vamos a conectar. Así de simple. Ahora, abrimos las preferencias del navegador (en mi caso Firefox) y en las Opciones de Red, marcamos únicamente la opción de usar Servidor Socks y ponemos:

127.0.0.1:1080

Con esto es suficiente para navegar.

¿Qué pasa si estamos detrás de un proxy?

Se puede dar el caso de que estemos por detrás de un servidor proxy muy restrictivo o que simplemente nuestro ISP no nos permita conectarnos mediante una dirección IP, por lo cual tenemos que hacerlo por DNS. Aquí es donde entra a jugar Corkscrew. Para usar esta aplicación lo único que debemos hacer es crear con nuestro editor favorito un fichero dentro de la carpeta .ssh en nuestro /home, llamado config:

$ vim ~/.ssh/config

y adentro le ponemos algo como esto:

host dominio.net
user tu_usuario
hostname dominio.net
port 9122
proxycommand corkscrew IP_Proxy 3128 %h %p
DynamicForward 1080
Compression yes
LocalForward 8888 localhost:8888

Explicando un poco esto. En el parámetro host ponemos la URL del servidor al que nos vamos a conectar (el cual tiene que tener SSH disponible por el 9122, como vimos en este post. En el parámetro proxycommand después de corkscrew ponemos la IP de nuestro proxy o el FQDN, por ejemplo: proxy.dominio.net y el puerto que se usa para navegar.

Ahora solo tenemos que abrir un terminal y poner:

ssh usuario@dominio.net

Ahora, un último detalle. Es posible que se necesite modificar un parámetro en la configuración de Firefox si no tuviésemos conexión. Abrimos una pestaña y tecleamos about:config. Prometemos que no meteremos nuestras manazas en las configuraciones y buscamos:

network.dns.disablePrefetch

Y si está en false lo ponemos en true.


16 comentarios

  1.   Christopher dijo

    Excelente, solamente me gustaría tener un servidor para poder hacerlo de forma funcional y no sólo la práctica entre 2 computadoras en mi red local :)…

  2.   Christopher dijo

    Una duda, ¿No se podrá navegar a desdelinux.net desde https?

    1.    KZKG^Gaara dijo

      Nop, en estos momentos no se puede. Tendríamos que comprar un certificado SSL, y cuesta unos 60$ al mes o al año, dinero que no tenemos 🙁 … lo siento amigo.

      1.    Annubis dijo

        ¿Y porqué no un certificado auto firmado?

        1.    KZKG^Gaara dijo

          No conozco mucho al respecto, pero si nosotros mismos generamos un certificado, luego el navegador de ustedes les dirá que el sitio es no confiable y eso… 🙁

          1.    Hugo dijo

            Si mal no recuerdo me parece haber visto alguna vez certificados limitados en unos 15 USD anuales, claro que esto depende en gran medida del proveedore de hospedaje. Pero francamente, para un blog (público por naturaleza) no veo la necesidad de navegación por HTTPS salvo quizás para garantizar que la información que vemos sea realmente la original y no parte de un ataque tipo man-in-the-middle (o el deseo puede ser también una señal de que nos estamos volviendo un poco paranoicos) 😉

  3.   Cesar dijo

    en el servidor sock, te faltó un punto en 127.0.0.1:1080

    1.    elav <° Linux dijo

      Gracias. Ahora mismo lo corrijo.

  4.   auroszx dijo

    Pues tengo que decirlo, SSH se ve muy interesante…

    1.    KZKG^Gaara dijo

      jejeje sí, no sabes la de maravillas que se puede hacer solo con una conexión SSH 😀

  5.   Hugo dijo

    Quizas sea posible eliminar corkscrew de la ecuación, al menos para Firefox.

    En “about:config”, establecer la entrada network.proxy.socks_remote_dns a verdadero, lo cual en el caso de un proxy socks v5 hace que las peticiones DNS también se realicen por el proxy socks.

    Mi enlace no tiene grandes restricciones, asi que no se esto si funcionará. Prueben y reporten. 😉

    Otra sugerencia que he visto por ahi es utilizar -4D en lugar de -D para crear el proxy solo en una dirección ipv4. Con esto aparentemente se optimiza un poco la conexión.

    Por último: si no se desea ejecutar ningún comando remoto, se podría utilizar al final el parámetro -N (así evitamos meter los cascos), y para desconectar solo habría que dar un Ctrl+C.

    1.    elav <° Linux dijo

      Gracias por la sugerencia Hugo, tendría que probar. Por cierto, con toda esta combinación también uso Screen 😀

      1.    Hugo dijo

        Yo también lo uso, aunque mediante byobu. De hecho, hay ocasiones en que se me ha formado tremendo reguero porque he tenido accesos a hosts en los cuales había tenido acceso a otros hosts en los cuales a su vez también había tenido acceso a otros, etc Como casi en todos usaba byobu, al rato he terminado cerrandolo todo porque se me hacía difícil saber desde donde estaba accediendo a donde, jejeje.

    2.    KZKG^Gaara dijo

      Hugo sobre lo del tiempo, llámame de tu casa a mi celular para devolverte la llamada 😉

    3.    M. dijo

      Además de -4D (para optimizar la conexión) y -N (para decirle a SSH que solamente vamos a forwardear puertos) podemos agregar llaves seguras a ambos lados de la conexión y un & al final de la línea de invocación SSH para iniciar un túnel de forma automatizada.

      Suponiendo que tenemos configurados correctamente los archivos:
      ~/.ssh/
      authorized_keys2
      id_rsa
      id_rsa.pub
      en las máquinas involucradas en la conexión, la instrucción final sería:

      $ ssh -p 9122 -4D 1080 -N elav@192.168.1.1 &

      puediendo agregarla a nuestro /etc/rc.local para asegurarnos que la conexión se establezca automáticamente cada vez que se inicia el sistema.
      Más todavía, usando pm-suspend y eth-tool podemos configurar el /etc/rc.local para que despierte a la máquina que va a hacer de proxy a través de internet y se conecte automáticamente a ella y luego la deje nuevamente en stand-by cuando cerremos nuestro sistema…

      Happy nerding 😀

      1.    elav <° Linux dijo

        Excelente aporte.. Gracias 😀

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.