domingo, 24 de febrero de 2013

Acceso ssh a través de webproxy

para conectar con nuestro Raspberry desde el curro, escuela ...

Buenos días, el objetivo de hoy es configurar nuestro Raspberry para que sea accesible por SSH (que ya lo es) y además poder hacerlo a través de un proxy web. Esto es necesario es muchas oficinas, universidades, bibliotecas ... que obligan a pasar todo el tráfico de internet a través de un proxy y permitiendo únicamente navegación web.

Empezamos instalando:
apt-get install libapache2-mod-proxy-html apache2 shellinabox
a2enmod proxy_http
del archivo /etc/default/shellinabox cambiamos la línea:
SHELLINABOX_ARGS="--no-beep"
por esta otra
SHELLINABOX_ARGS="--no-beep --disable-ssl"
al final del archivo /etc/apache2/sites-enabled/000-default añadimos:
ProxyRequests Off
<Proxy>
        Order deny,allow
        Allow from all
</Proxy>

<Location /shell/>
        ProxyPass http://localhost:4200/
        ProxyPassReverse http://localhost:4200/
</Location>
y reiniciamos:
/etc/init.d/shellinabox restart
/etc/init.d/apache2 restart
ahora hacemos un NAT en nuestro router, del puerto 80 hacia la ip del RaspberryPi y listo, podemos acceder vía web al servidor ssh de nuestro Raspberry.
Dedicado al Borre y al Porti.

32 comentarios:

  1. Gracias Juan Mol, me va perfectamente para poder acceder desde el trabajo donde tengo webproxy y no me permiten Puty.
    ¿Hay alguna manera que no cierre la session tan rapido?

    ResponderEliminar
    Respuestas
    1. Pues la verdad es que no veo ninguna opción o parámetro para ajustar ese tiempo. Viendo un poco por ahí, veo que hay una variable que se llama AJAX_TIMEOUT que parece que es la que buscamos, pero hay que cambiarla en el código fuente de shellinabox, así que si te animas ... ;)

      Eliminar
    2. sé que ha pasado tiempo, pero quizá te pueda ayudar este artículo... http://muyraspi.blogspot.com.es/search?q=/etc/ssh/sshd_config

      Eliminar
  2. Hola, perdonad que os consulte algo tan obvio, pero... tengo un raspbian recién instalado en mi raspberry, he hecho apt-get update y apt-get upgrade, sin embargo no me encuentra los repositorios para instalar el software de las primeras líneas.
    Es algún repositorio concreto? o con el repositorio que viene por defecto ya podrías isntalarlo?

    gracias.

    ResponderEliminar
    Respuestas
    1. pega aqui el contenido de tu /etc/apt/sources.list y te cuento

      Eliminar
  3. Hola, al editar el archivo 000-default añadiendo lo que sugieres, al reiniciar apache2, me da el siguiente error:

    Syntax error on line 32 of /etc/apache2/sites-enabled/000-default:
    Invalid command 'ProxyRequests', perhaps misspelled or defined by a module not included in the server configuration
    Action 'configtest' failed.
    The Apache error log may have more information.
    failed!

    El error.log no dice nada. Se te ocurre que podría ser? gracias!

    ResponderEliminar
    Respuestas
    1. ¿seguro seguro segurísimo que tienes instalado el paquete libapache2-mod-proxy-html ? ¿Y has ejecutado el a2enmod proxy_http ?

      Eliminar
  4. perfecto! tenía instalado el paquete pero no lo había ejecutado. gracias por los tutoriales!

    ResponderEliminar
  5. Hola Juan,

    Recientemente he llegado a tu blog y me parece muy interesante. Siento abordarte de esta manera, pero existe alguna forma de comunicarnos en privado.

    Un saludo y mucho ánimo

    Ignacio

    ResponderEliminar
  6. Se me olvidó indicar la direccion de correo:
    gomago1709@gmail.com

    Saludos

    ResponderEliminar
    Respuestas
    1. si preguntas aqui mismo, puede que le sirva a alguien mas. De todas formas puedes escribirme a rsppi.blog@gmail.com

      Eliminar
  7. Hola Juan,

    Increible el Post.

    Una pregunta tonta, en la configuración del NAT, se ha de poner como Puerto externo el 80, y como puerto interno el 22?

    un saludo

    ResponderEliminar
    Respuestas
    1. no es una pregunta tonta. Tienes que llegar al puerto del apache, desde internet. Así que como puerto externo el 80 y como interno el 80 ;)

      Eliminar
    2. Muchas Gracias:).

      Bueno al final en ese puerto no me funcionaba, y tras mirar el fichero /etc/default/shellinabox, he visto que por defecto shellinabox escucha en el 4200, así que lo modifique a ese puerto y genial.

      Espero q sirva al resto.

      Eliminar
    3. noooooooooooo ... si haces nat del puerto 4200, no estaremos consiguiendo la finalidad del post. La idea es acceder por puerto 80 para poder conectar desde la oficina, universidad o cibercafe, atravesando un proxy web. Hacer un nat de cualquier puerto no tiene misterio ;)

      Eliminar
    4. ¿No sería lo mismo si como puerto externo le pongo el 80 y como puerto interno el 4200?

      Eliminar
    5. que si hombre, si soluciones hay miles :) las dos soluciones que das son validas, con la que pongo en el post, permite ademas tener otros servicios detras del puerto 80, tan solo añadiendo más locations en Apache.

      Eliminar
    6. Vale, perfecto.

      Es lo que pasa al iniciarse x estos mundos:)

      Muchas Gracias.:)

      Eliminar
  8. porque lo instalas junto con apache?

    Francisco.

    ResponderEliminar
  9. Lo pregunto, porque al mí a menos sin tener apache me lo sirve bajo el protocolo https

    Francisco.

    ResponderEliminar
  10. Hola Juan,

    podrías utilizar sslh. Te permite compartir el puerto 443 (https) para ofrecer una web y acceder al ssh de la maquina que decidas.

    Un saludo.

    ResponderEliminar
  11. Hola Juan

    Tengo una duda... al acceder al ip de la raspberry entiendo que apache funciona ya que obtengo:
    It works!
    This is the default web page for this server.
    The web server software is running but no content has been added, yet.

    Sin embargo, si accedo a http://ipdelaraspberry/shell no obtengo respuesta, cosa que si accedo a http://ipdelaraspberry:4200 sí aparece la terminal en el navegador...

    a qué puede deberse??

    ResponderEliminar
    Respuestas
    1. te falta el libapache2-mod-proxy-html y configurar bien la parte de Proxy en el apache

      Eliminar
    2. He seguido los pasos del post al pie de la letra, tanto lo del libapache2 como lo del proxy...
      Los voy a repetir pero cómo puedo saber dónde fallo??

      Eliminar
    3. después de varios intentos me ha funcionado!
      he tenido que cambiar http://localhost:4200 por http://ip-pública-de-la-raspberry:4200/
      creo que es por la configuración de apache2, pues si me conecto a la raspberry por vnc, en midori no obtengo resultado con http://localhost

      Eliminar
    4. si accedes por el puerto 4200 desde la ip publica, no estara pasando el tráfico por el puerto 80, que es la gracia de este post: llegar por puerto 80 al ssh usando apache.
      Te sigue faltando algo en el apache.

      Eliminar
    5. quiero aclarar que cuando digo "he tenido que cambiar http://localhost:4200 por http://ip-pública-de-la-raspberry:4200/" lo he hecho en el archivo /etc/apache2/sites-enabled/000-default y no cuando accedo al navegador

      de todas formas, creo que se debía a que tenía hecho un DMZ hacia la ip de la raspberry en lugar de un NAT (es que no me acabo de aclarar muy bien con el NAT)

      Eliminar
    6. aaaaaahm eso si tiene más sentido. Yo recomiendo siempre NAT, con las DMZ hay que tener mucho cuidado, tienes que leerte la documentación del ruter, para ver que es lo que entiende el fabricante por DMZ.

      Eliminar
  12. mo me enterooooooo :'( donde tengo que poner eso? losiento... ayudameee

    ResponderEliminar
  13. Hola, he visto esta publicación y es perfecta. Me funciona correctamente. Muchas gracias por este aporte.

    ResponderEliminar