Conexión segura con SSH

publicado en: Blog | 0
Share Button

Aunque actualmente existe una amplia oferta de servicios de almacenamiento y de cómputo en la nube, de conexión a ordenadores remotos usando servidores de terceros o redes privadas virtuales (VPN), nuestra opción sigue siendo conservar el control sobre nuestros datos y sobre el acceso a nuestras máquinas y para hacerlo, ceder nuestra confianza sólo al software libre. En este texto vamos a explicar cómo configurar el acceso remoto seguro a tu red con la shell segura (SSH), nuestro método preferido; con ella podemos usar directamente un ordenador en remoto y encapsular servicios y entunelarlos para acceder a ellos usando una conexión cifrada.

Ya hay muchas aplicaciones cliente/servidor que utilizan conexiones cifradas y en un futuro próximo es muy probable que sean todas las que transmitan datos de forma segura pero para las que aún hoy no lo hacen, podemos valernos de SSH.

La idea es usar SSH como intermediario entre la aplicación no-segura e Internet para no transmitir datos sin cifrar. A la aplicación cliente no-segura le haremos creer que el servidor no-seguro es el propio ordenador ejecutando SSH, que se encargará de redireccionar las peticiones a un servidor SSH que se conecta, a su vez, con la verdadera aplicación servidor no-segura. Los datos se cifran en el cliente (y los de vuelta en el servidor), se transmiten de forma segura por Internet y se descifran en el servidor (y de vuelta en el cliente) que los entrega sin cifrar a la aplicación.

Esquema de conexión cliente-servidor mediante SSH

Conexión remota

El proceso necesita, en primer lugar, poder conectar desde una máquina en una ubicación remota al equipo del que queremos obtener el servicio (acceder a unos documentos, por ejemplo) Para hacerlo, el cliente (máquina desde la que te conectas) ha de conocer la dirección IP pública del servidor (máquina a la que te conectas) Eso implica bien una dirección pública fija, por la que seguramente tendrás que pagar a tu proveedor de Internet, o una dinámica y un servidor de DNS en el que ir actualizándola. Seguramente podrás usar un servidor de DNS sin coste pero probablemente sí que tendrás que pagar, aunque muy poco, por registrar el nombre. Por supuesto también puedes conectar si sabes en cada momento la dirección IP que tu proveedor de Internet te asigna pero es bastante incómodo y te arriesgas a que un cambio que no controles te deje sin conexión.

Esquema de conexión remota insegura

Redirección de puertos

La dirección pública será, seguramente, la misma para todos los equipos que haya conectados a la red en la que se encuentre el que quieres usar en remoto ¿Cómo hacemos para llegar hasta uno en concreto? Lo más común es que el enrutador (o router, en inglés) que conecta tu red con Internet disponga de capacidad NAT mediante la cual mapear o redirigir a diferentes ordenadores las peticiones que se realicen a diferentes puertos (algo así como el número de la conexión) Seguramente habrás oído hablar del proceso como “abrir un puerto”.

Esquema de redireccionado NAT

La forma de dirigir la conexión externa de un puerto a un ordenador concreto es muy sencilla. Sólo tienes que (1) especificar en la configuración NAT de tu enrutador el número de puerto entrante (22 en nuestro ejemplo) que es al que solicitarás el servicio desde el ordenador remoto, (2) la dirección IP del ordenador al que se dirige (192.168.1.78 en nuestro ejemplo) y (3) el puerto de ese ordenador en el que el servicio se encuentra escuchando. Para poder acceder al mismo tipo de servicio en varios ordenadores, que usarán el mismo puerto, puedes usar diferentes puertos de entrada que se traducirán en el mismo pero en diferentes direcciones IP. Como verás, dependiendo de tu enrutador en concreto, podrás especificar también rangos en lugar de puertos individuales. En la configuración de muchos NAT encontrarás listas de servicios comunes ya preparadas para usar sin tener que escribir los números correspondientes de los puertos.

Abriendo un puerto con el NAT de un router COMTREND

Cifrado de la conexión

Según lo visto hasta ahora, es posible conectar con una máquina remota sin usar SSH, el problema es que es relativamente sencillo interceptar los datos que pasen por Internet (se supone que la conexión en la red local es de fiar) y por eso queremos que los datos se transmitan cifrados. Para hacerlo necesitaremos un servidor SSH para recibir las peticiones (en la red de nuestra oficina) y un cliente para establecerlas (en el ordenador desde el que nos conectamos desde una ubicación remota)

Esquema de conexión con servidor SSH

En el diagrama anterior los hemos separado pero la misma máquina que hace de NAT puede también hacer de enrutador y de servidor SSH (y de cortafuegos…) e incluso puede contener los servicios que se van a entunelar. Si la idea está clara no te resultará difícil componerlo según tus necesidades.

Establecer la conexión con el servidor SSH desde el cliente es muy sencillo; desde el terminal bastará con ejecutar:ssh usuario@servidor -L puerto_local:ordenador_remoto:puerto_remoto

En la orden anterior, usuario es el nombre de usuario en el servidor SSH, servidor el nombre (o la dirección IP pública, si no hay un servidor de DNS que se encargue de resolverla) del servidor (seguramente la IP pública de toda la oficina) puerto_local el número de puerto con el que el cliente simulará ser la aplicación cliente no-segura, ordenador_remoto la dirección IP privada del servidor local en el que corre la aplicación servidor no-segura y puerto_remoto el número del puerto que utiliza la aplicación servidor no-segura. La opción -L es la que indica que se produzca la redirección segura. También pueden utilizarse otros parámetros como -C para comprimir la información que se envía (y ganar un poco en velocidad) o -X si quieres usar el entorno gráfico del ordenador remoto.

Por ejemplo, para conectarnos a oficina.acadacual.es como el usuario vixtor y crear un túnel seguro a la base de datos MySQL funcionando en el ordenador que tiene la dirección IP 192.168.1.78 que escucha en 3306, que usará el puerto 13306 simulando ser el servidor en el cliente y comprimiendo la transferencia, podemos escribir la orden:ssh vixtor@oficina.acadacual.es -L 13306:192.168.1.78:3306

Claro que, para que lo anterior te funcione, necesitas tener instalado en el ordenador cliente un cliente de SSH y un servidor de SSH en el servidor. Por si no fuera el caso, hemos preparado pequeña guía para ayudarte a hacerlo. Nuestra recomendación es OpenSSH como cliente y como servidor y en el caso de que te moleste mucho usar el terminal para escribir la orden anterior, como ocurre a muchos usuarios de Windows, PuTTY como cliente.


Puedes leer todas las instrucciones que siguen o a lo mejor prefieres ir directamente a las que explican cómo instalar SSH en tu sistema.

Instalar SSH en LinuxInstalar SSH en WindowsInstalar SSH en OSX

Instalar SSH en GNU/Linux

En GNU/Linux suele instalarse el cliente SSH y dependiendo del uso de la máquina también el servidor (cuando el uso es como servidor, claro) Si al instalar el sistema no incluiste el servidor SSH (y/o el cliente) con el administrador de paquetes de tu sistema. Por ejemplo en Debian (y en sus derivadas) puedes usar la orden:sudo apt-get install openssh-server openssh-client

Como es probable que ya esté instalado, no te extrañe ver el mensaje openssh-client ya está en su versión más reciente (o algo parecido) Si debes instalarlo recuerda aceptar que se instalen también, en su caso, las dependencias.

También puedes usar, si lo prefieres, un gestor de paquetes gráfico. Por ejemplo, Synaptic en Debian (y en sus distribuciones derivadas). En el ejemplo de la siguiente captura de pantalla hemos usado Synaptic en Guadalinex.

Instalar OpenSSH en Guadalinex con Synaptic

Como puedes ver, tanto el cliente como el servidor aparecen marcados como instalados así que seguramente ya estén listos para usar. En versiones anteriores puedes encontrar el documento /etc/ssh/sshd_not_to_be_run que impide, por seguridad, la ejecución del servidor. Para usar el servidor OpenSSH tendrás que borrar (o renombrar) el documento.

Seguro que con estas indicaciones ya serás capaz de preparar tu sistema para usar SSH pero si no fuera así no tengas inconveniente en decírnoslo, estaremos encantados de ayudarte.

Instalar SSH en Windows

Hay dos instaladores libres de implementaciones de OpenSSH para Windows (y varias alternativas de comerciales de las que no hablaremos) El más sencillo de instalar y utilizar puedes encontrarlo en SSHWindows pero no lo recomendamos por no estar actualizado. Te recomendamos que utilices el instalador de Cygwin que es más frecuentemente actualizado. No te preocupes, te explicaremos detalladamente cómo instalarlo.

En primer lugar tendrás que descargar y ejecutar el instalador que corresponda con tu plataforma: 32 o 64 bits en http://cygwin.com/install.htm

cygwin_openssh_cygwin_instalacion

Puedes elegir entre descargar e instalar, la opción seleccionada por defecto, sólo descargar o instalar desde los documentos previamente descargados. Al instalar, los diferentes documentos que se descarguen se almacenan para posteriores instalaciones.

cygwin_openssh_cygwin_instalacion_metodo_instalacion

Te recomendamos que respetes la carpeta que te ofrecerá el instalador (normalmente C:\cygwin o C:\cygwin64 dependiendo de la plataforma) y evites rutas profundas o nombres conflictivos (como espacios) Puedes elegir entre instalar para todos los usuarios o sólo para el que realiza la instalación, que necesitará privilegios administrativos.

cygwin_openssh_cygwin_instalacion_elegir_carpeta_instalacion

Puedes elegir la carpeta en la que se grabarán los documentos que se irán descargando durante la instalación. Por defecto te ofrecerá la misma carpeta en la que se encuentre el instalador de Cygwin. Si la carpeta en la que vas a guardar los componentes del instalador no existe te ofrecerá crearla antes de seguir.

cygwin_openssh_cygwin_instalacion_elegir_carpeta_descarga

cygwin_openssh_cygwin_instalacion_crear_carpeta_descarga

En el siguiente paso debes especificar la forma en la que te conectas a Internet: directamente, por medio del proxy que Internet Explorer tenga configurado o con un proxy que puedes configurar sobre la marcha.

cygwin_openssh_cygwin_instalacion_configurar_tipo_descarga

Existen muchas réplicas de Cygwin distribuidas por diferentes países. En la siguiente ventana puedes elegir el servidor que quede más cerca de tu ubicación para realizar la descarga (el nombre del dominio puede ayudarte: .fr es de Francia, .de es de Alemania, .it Italia…) También es posible escribir directamente, si lo sabes, el nombre o la IP del lugar desde el que descargar.

cygwin_openssh_cygwin_instalacion_elegir_sitio_descarga

Una vez que el instalador ha conectado con el servidor que contiene los diferentes componentes de Cygwin muestra una (larguísima) lista. Para no tener que recorrerla podemos usar la casilla "Search" en la que escribiremos openssh para buscarlo. También podemos cambiar la forma en la que se presenta la lista pulsando sobre el botón "View". Cuando hayas localizado el paquete que contiene OpenSSH puedes marcar la casilla de la izquierda para activar la instalación; se marcará la casilla de paquete binario ("Bin") aunque también puedes descargar el código fuente activando a mano la casilla "Src".

cygwin_openssh_cygwin_instalacion_buscar_openssh

Al aceptar la instalación elegida solicitará instalar también las dependencias (si procede) Lógicamente es muy importante aceptarlas; por defecto encontrarás que está seleccionada la casilla que solicita hacerlo.

cygwin_openssh_cygwin_instalacion_dependencias

Dependiendo de los paquetes que se van a instalar y de la velocidad de conexión la siguiente etapa de descarga tardará más o menos. En el sitio de Granada en el que estamos ahora, por el momento verás que la velocidad de conexión a Internet no es precisamente rápida; esperamos la fibra óptica como agua de mayo.

cygwin_openssh_cygwin_instalacion_descarga

Al terminar de instalar ofrece crear accesos directos al terminal en el menú de inicio y en el escritorio. Parece útil ¿No? Yo lo haría

cygwin_openssh_cygwin_instalacion_iconos

La primera vez que utilices el terminal de Cygwin creará automáticamente la configuración del usuario con el que inicies la sesión.

cygwin_openssh_cygwin_skeleton

Antes de poder utilizar Cygwin debes añadir a la ruta de búsqueda de ejecutables PATH la carpeta del binario. Normalmente C:\Cygwin\bin (o Cygwin64 si tu plataforma es de 64 bits)

Para añadir la ruta de Cygwin a PATH de Windows debes pulsar con el botón derecho del ratón sobre "Equipo" del menú de inicio y elegir "Propiedades".

cygwin_openssh_menu_windows_propiedades_equipo

En el menú de propiedades del sistema debes acceder con privilegios de administrador a la entrada "Configuración avanzada del sistema"

cygwin_openssh_configurar_avanzada

En la solapa "Opciones avanzadas" debes pulsar sobre el botón "Variables de entorno" para acceder a su configuración.

cygwin_openssh_propiedades_avanzadas_sistema

En el cuadro de abajo busca la variable PATH y para editar su valor pulsa sobre el botón "Editar…"

cygwin_openssh_path_variable_entorno

Respetando los valores que encuentres (que estarán separados por punto y coma) debes añadir la ruta a los binarios de Cygwin, normalmente C:\Cygwin\bin (o Cygwin64 si tu plataforma es de 64 bits) Recuerda usar el signo de punto y coma para separar el valor de los que ya existan. Luego pulsa en "Aceptar" para cerrar los tres cuadros de diálogo que se han abierto y almacenar el valor.

cygwin_openssh_path

Antes de poder usar el servidor OpenSSH debes configurarlo. La instalación incluye el script ssh-host-config que se encarga de hacerlo de forma más o menos automática. Para usarlo debes acceder al terminal de Cygwin con privilegios de administrador e invocarlo escribiendo ssh-host-config (o ssh-host-config -y si quieres que se responda automáticamente sí a todas las preguntas que sea posible)

En la siguiente captura de pantalla puedes ver la salida resultado de usar ssh-host-config. La información que pregunta (Query:) está destacada en rosa frente a la información (Info:) que está marcada en verde.

    Para la instalación que recomendamos ¿Qué debemos responder?

  • ¿Debe usarse la separación de privilegios? para aumentar la seguridad evitando la escalada de privilegios que supuso un error en el pasado.
  • ¿Crear una cuenta "sshd"? , la necesitamos para las tareas del servidor.
  • ¿Instalar el servidor SSH como servicio? , eso nos permitirá hacerlo funcionar automáticamente (arrancará solo en cada reinicio del sistema) y que esté disponible siempre que se necesite.
  • ¿Qué valores deben asignarse a CYGWIN? Ninguno (dejar en blanco pulsando la tecla Enter)
  • ¿Usar otro nombre para la cuenta cyg_server? No, eso nos permitirá predecir el usuario para futuras modificaciones. Ten en cuenta que el nombre del usuario que se crea, Privileged User, no es igual que el de la cuenta.
  • Clave para el nuevo usuario cyg_server (la pedirá dos veces) Es importante recordarla aunque no es necesario que accedas con ese usuario a Cygwin.

cygwin_openssh_ssh_host_config

Una vez configurado OpenSSH con el script ssh-host-config puedes crear los usuarios y grupos de Cygwin copiando los de Windows con las órdenes mkpasswd -l > /etc/passwd
mkgroup -l > /etc/group

Y ya puedes arrancar el servicio con cygrunsrv -S sshd

cygwin_openssh_usuarios_servicio

Si usas cortafuegos (firewall) puede que el servicio no se haya arrancado o puede que te aparezca un mensaje pidiéndote autorización para que el servicio acceda a Internet. Si le concedes permisos de forma permanente ya habrás terminado la configuración, si no lo haces o no te aparece el mensaje, tendrás que configurar manualmente el cortafuegos accediendo al panel de control correspondiente donde crear una nueva regla de entrada.

windows_firewall_nueva_regla_entrada_0

Los pasos para crear la regla son muy sencillos puedes pulsar abajo sobre cada uno de ellos para ir viendo la información que solicita. En nuestra configuración hemos permitido el acceso al puerto 22 que es el que usamos (el que se suele usar por defecto) para conectar por SSH.

windows_firewall_nueva_regla_entrada_paso_1windows_firewall_nueva_regla_entrada_paso_2windows_firewall_nueva_regla_entrada_paso_3windows_firewall_nueva_regla_entrada_paso_4windows_firewall_nueva_regla_entrada_paso_5

Instalar un cliente SSH en Windows

Si eres usuario de Windows también puede que en tu lugar de trabajo tengas un servidor que use GNU/Linux en el que corra un servidor SSH y no necesites instalarlo pero lo que es seguro es que tendrás que disponer de un cliente. Entre los más populares y recomendables por seguro, estable y sencillo está PuTTY. A continuación te explicamos cómo configurarlo.

En primer lugar necesitarás descargar el instalador o la aplicación portable y ejecutarlo. Aunque hayas elegido la versión sin instalación podrás grabar (utiliza el registro de Windows) la configuración de las diferentes sesiones que prepares para conectar según diferentes criterios.

putty_configurar_1

En primer lugar debes indicar el nombre o la dirección IP pública del servidor (o de toda la red local que lo contiene) en la casilla "Host Name (or IP address)" y el número del puerto. El puerto 22 es el que suele usarse para conexiones SSH. También es buena idea darle nombre a la configuración que estás preparando; puedes escribirlo en la casilla "Saved Sessions" asi, cada vez que grabes los cambios que vayas haciendo utilizará ese nombre. Si no haces todos los cambios de una vez, podrás ir cargando la sesión (eligiéndola de la lista con doble clic o con el botón "Load") y grabando los nuevos cambios.

putty_configurar_2

El uso que estamos dando en esta ocasión a SSH es entunelar una conexión para hacerla segura así que lo siguiente que vamos a hacer es configurar el túnel de la conexión en la sección correspondiente "Tunnels".

putty_configurar_3

Para definir el túnel necesitas indicar el puerto origen "Source port", que es el puerto en el que el cliente simulará la aplicación no-segura y el puerto en el que la aplicación no-segura escucha realmente separado por dos puntos de la dirección IP del servidor.

putty_configurar_4

Una vez indicados los datos del túnel se añade a la lista de los que forman la sesión pulsando el botón "Add"

putty_configurar_5

No te olvides de grabar los cambios para no tener que volver a escribir los datos del túnel la próxima vez que lo quieras usar.

putty_configurar_6

La próxima vez que ejecutes PuTTY sólo tendrás que hacer doble clic sobre el nombre de la sesión que has grabado para cargarla y que se ejecute

putty_configurar_7

La primera vez que conectes con un servidor te mostrará su firma RSA que lo identifica inequívocamente. Si te parece fiable y decides conectar quedará almacenada junto con el resto de la configuración de PuTTY para saber en próximas conexiones si se trata de la misma máquina y evitar suplantaciones que pueden representar ataques del tipo hombre en medio.

putty_configurar_8

Una vez que escribas tu nombre de usuario y contraseña (las del servidor) la conexión y el túnel se habrán activado y podrás usarla de forma segura.

putty_configurar_9

Una vez finalizada la conexión segura, para terminar la sesión puedes usar la orden exit o simplemente cerrar la ventana, en tal caso, PuTTY te pedirá confirmación.

Seguro que con estas indicaciones ya serás capaz de preparar tu sistema para usar SSH pero si no fuera así no tengas inconveniente en decírnoslo, estaremos encantados de ayudarte.

Instalar SSH en OS X

Si usas OSX lo más probable es que ya tengas instalado el servidor SSH, lo único que tienes que hacer es activarlo; para hacerlo utilizar las preferencias del sistema donde encontrarás “compartir”. En la ventana que se abre al pulsar “compartir” debes activar “sesión remota” y listo ¿Y si no me deja hacer cambios? Entonces tendrás que pulsar sobre el candado de abajo e identificarte como usuario con privilegios administrativos.

Preferencias de OS XServidor SSH en OS X

En el recuadro "sólo estos usuarios", puedes añadir una lista de usuarios que tendrán permitido el acceso, al resto se les denegará. Recuerda también que si usas un cortafuegos (firewall) tendrás que permitir el acceso a la sesión remota.

Seguro que con estas indicaciones ya serás capaz de preparar tu sistema para usar SSH pero si no fuera así no tengas inconveniente en decírnoslo, estaremos encantados de ayudarte.

Autor: Víctor Ventura

Seguir Víctor Ventura:

Desarrollador multimedia y web

Tengo la suerte de ir recorriendo una carrera profesional muy variada pero en la que siempre encuentro lugar para la expresión gráfica y para la programación. He desarrollado aplicaciones para CAD, presentaciones multimedia interactivas, tecnología web en el cliente y en el servidor y últimamente para Internet de las cosas, tanto en el ámbito electrónico como en el tratamiento de datos y el interfaz con los usuarios. En Acadacual Granada, además de programar, me encargo de que los servidores sigan funcionando.