SSH: Conexión sin password y Tunel

Hay dos funcionalidades que vienen desactivadas por defecto en nuestros Synology pero que son de gran utilidad.

 

Por un lado tenemos la posibilidad de conectarnos mediante el uso de una clave pública. De este modo, si tenemos el SSH abierto al exterior de nuestra red, nadie podrá conectarse intentando averiguar nuestra contraseña, sino que necesitará disponer de la clave privada vinculada así como de la contraseña de la misma, minimizando las posibilidades de accesos indeseados.

Resumiendo brevemente el funcionamiento de la autentificación por clave pública en SSH podríamos decir que funciona así:

  1. Se generan un par de claves de encriptación: la pública y la privada. Los mensajes encriptados con una de ellas solo pueden ser desencriptados por la otra y vice-versa.
  2. Introducimos la clave pública en el servidor SSH como autorizada y usamos la clave privada en nuestro ordenador.
  3. Al conectarnos al servidor este nos envía un mensaje encriptado con la clave pública. Si podemos desencriptarlo y devolver una prueba de que lo hemos hecho (usando la clave privada) nos permitirá conectar con el usuario indicado.

 

Por otro lado, tenemos el Tunel SSH. Os preguntareis que significa. Con un túnel SSH lo que hacemos es pasar los datos de nuestra conexión hacia el servidor SSH que tengamos mediante una conexión SSH encriptada.

Y ahora diréis, ¿Qué conseguimos con esto?

Muy fácil. Podemos conseguir, entre otras cosas, varias funcionalidades muy interesantes:

  1. Ocultar de miradas indiscretas los datos que enviamos al navegar cuando estamos conectados en una conexión abierta e insegura, por ejemplo una Wifi abierta.
  2. Saltarnos las restricciones de navegación de algunas redes ya que a todos efectos navegamos con la conexión del servidor SSH.
  3. Acceder a servicios que tengamos en casa sin que tener que tener los puertos TCP de acceso a los mismos abiertos en el router: podemos acceder por ejemplo a la interfaz web del Transmission o el NAS de forma segura

 

En esta guía configuraremos el SSH incluido en nuestro Synology para conectar mediante claves a través del puerto 443 y habilitaremos la posibilidad de realizar túneles.

 

  • Generar las claves

Para generar el par de claves podemos utilizar el puttygen.exe. Lo ejecutamos y pulsamos “Generate”. Movemos el ratón tal y como nos indica y en un momento tendremos un par de claves generadas.

A continuación, introducimos la “Key passphrase” para mayor seguridad (esta nos será solicitada al momento de conectarnos).

Una vez generamos, pulsamos “Save public key” y “Save private key” para guardar las claves y nos guardamos el texto de la caja de texto “Public key for pasting into OpenSSH authorized_keys file:” ya que lo necesitaremos a continuación.

 

  • Introducir la clave publica en el NAS

Desde la interfaz web desactivamos el SSH y activamos el Telnet.

Nos conectamos por Telnet a nuestro Synology y ejecutamos los siguientes comandos:

cd /root
mkdir .ssh
cd .ssh
touch  authorized_keys
vi authorized_keys

En esta ventana, pegamos la clave pública que guardamos en la ventana del puttygen.exe

Pulsamos ESC, escribimos :wq y pulsamos ENTER para guardar los cambios.

Seguimos con:

chmod 644 authorized_keys
cd ..
chmod 700 .ssh

 

  • Configuración

Ahora modificaremos la configuración por defecto del SSH incluido en nuestro Synology.

Os recomiendo usar el editor nano si lo tenéis instalado ya que es más cómodo que el vi.

 

Editamos el siguiente archivo: /etc/ssh/sshd_config

 

Deberíamos modificar los siguientes parámetros y quitar, si lo tienen, el # del principio:

Port 443

LoginGraceTime 2m

PermitRootLogin yes

MaxAuthTries 6

MaxSessions 10

PubkeyAuthentication yes

AuthorizedKeysFile        /root/.ssh/authorized_keys

PasswordAuthentication no

AllowTcpForwarding yes

TCPKeepAlive yes

 

Estos parámetros son orientativos y podéis ajustar vuestra configuración según vuestras necesidades.

El hecho de usar el puerto 443 para el SSH en vez del normal es sencillamente porque muchos proxy y firewalls en empresas no bloquean este puerto, permitiendo conectar con nuestro túnel sin problemas.

 

  • Verificación

Volvemos a activar el SSH en la interfaz web de nuestro Synology. Lanzamos el Putty y creamos una nueva conexión a nuestro NAS con el puerto 443 pero antes de conectar, nos vamos a “Connection > SSH > Auth” y seleccionamos la clave privada que hemos generado.

Conectamos y nos preguntara si la queremos confiar en esta conexión, le decimos que si y a continuación introducimos el usuario root. Si todo ha ido bien nos preguntara la “passphrase” que introdujimos al generar las claves. La introducimos y ya estaremos conectados.

 

  • Usar el Tunel SSH

Tenemos muchas guías que explican cómo usarlo para navegar, pero básicamente necesitamos un navegador que soporte Socks Proxy (Firefox o Chrome por ejemplo) y un cliente para crear el túnel, véase Putty.

Lanzamos el Putty y además de los datos introducidos en el punto 4, nos vamos a “Connection > SSH > Tunnels” y creamos un nuevo puerto redirigido del tipo Dynamic y IPv4. En Source Port ponemos el puerto que queramos ya que será el que usara el navegador para navegar.

Hecho esto, abrimos la sesión SSH y minimizamos el PuTTY. Abrimos el navegador y vamos a la configuración del Proxy. Definimos un nuevo proxy SOCKS con ip LOCALHOST y el puerto que hayamos definido.

Si no ha pasado nada raro, deberíamos poder navegar de forma segura a partir de este momento.

Cosas a tener en cuenta:

  1. La velocidad dependerá tanto de la línea donde estemos como de la línea donde tengamos el servidor SSH. Es importante la velocidad de subida de la línea que tiene el servidor SSH.
  2. Por defecto, las peticiones DNS no pasan por el túnel. Para mayor privacidad, en Firefox nos vamos a la página about:config y definimos como true el parámetro network.proxy.socks_remote_dns

 

Personalmente, por comodidad os recomiendo utilizar el programa MyEntunnel, que os permitirá de forma “portable” llevar vuestro proxy a cuestas de una forma mucho más cómoda que el PuTTY ya que además se puede minimizar a la barra de tareas.

Comentar que este utiliza el plink.exe para realizar la conexión que en principio es algo más rápido que usar el PuTTY propiamente.

 

  • Rizando el rizo

Del mismo modo que hemos definido el puerto dinámico en el PuTTY, podemos definir un puerto local introduciendo en Destination por ejemplo IPDENUESTRONAS:5000 y en source un puerto a nuestra elección.

Si hacemos esto, navegando a localhost:puertoelegido accederemos remotamente a la interfaz de nuestro Synology.

Podemos definir puertos para tantos servicios como queramos.

 

  • ¿Que sucede cuando actualizamos el firmware?

Cuando actualizemos el firmware, el fichero de configuración se reemplazará por el por defecto. Entonces, es recomendable guardar una copia de dicho archivo en el disco duro del nas.

De este modo, una vez actualizado el firmware, desactivamos el SSH en la interfaz web y ejecutamos este comando:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
cp /ruta/donde/guardamos/el/archivo/configuracion/sshd_config /etc/ssh/sshd_config

Volvemos a activar el SSH en la interfaz web y ya deberiamos poder conectar como antes.

En caso de error, revisad todos los pasos y en todo caso repetid todo el proceso de configuración, ya que determinados firmwares podrian eliminar otros cambios que hayamos realizado.