Seguridad

Acceso remoto seguro con SSH

Comprenda el protocolo SSH, instale el servidor y el cliente OpenSSH, conéctese desde PuTTY o desde un terminal y refuerce el archivo de configuración sshd_config.

· 11 min de lectura · nivel intermedio

El acceso a las máquinas a distancia se convirtió hace mucho tiempo en una necesidad y apenas podemos imaginar cómo sería si no pudiéramos controlar los ordenadores a distancia. Existen numerosas formas de establecer una conexión con una máquina remota en función del sistema operativo que ejecute, pero los dos protocolos más utilizados son:

  • Protocolo RDP (Remote Desktop Protocol) para las máquinas Windows
  • Secure Shell (SSH) mayoritariamente con Linux, pero también utilizable con Windows.

Ambos protocolos utilizan aplicaciones cliente y servidor para establecer una conexión remota. Estas herramientas le permiten acceder a otros ordenadores y gestionarlos a distancia, transferir archivos y hacer prácticamente todo lo que podría hacer estando físicamente sentado delante de la máquina.

Condiciones previas

Antes de poder establecer una conexión segura con una máquina remota, debe cumplir algunos requisitos básicos:

  • El ordenador remoto debe estar encendido en todo momento y disponer de una conexión de red.
  • Necesita la dirección IP o el nombre de la máquina remota a la que desea conectarse.
  • Debe disponer de las autorizaciones necesarias para acceder al ordenador remoto.
  • Los parámetros del cortafuegos deben autorizar la conexión remota.
  • Las aplicaciones cliente y servidor deben estar instaladas y operativas.
Illustration 1 — Accès à distance sécurisé avec SSH

¿Qué es SSH?

Secure Shell, a veces llamado Secure Socket Shell, es un protocolo que le permite conectarse con total seguridad a un ordenador remoto o a un servidor mediante una interfaz de texto.

Cuando se establece una conexión SSH segura, se iniciará una sesión de shell y podrá manipular el servidor escribiendo comandos en el cliente de su ordenador local.

Los administradores de sistemas y de redes son quienes más utilizan este protocolo, así como cualquier otra persona que necesite gestionar un ordenador a distancia de forma altamente segura.

¿Cómo funciona SSH?

Para establecer una conexión SSH necesita dos componentes: un cliente y el componente del lado del servidor correspondiente. Un cliente SSH es una aplicación que se instala en el ordenador que utilizará para conectarse a otro ordenador o a un servidor.

El cliente utiliza la información del host remoto facilitada para iniciar la conexión y, si se verifican las credenciales, establece la conexión cifrada.

Illustration 2 — Accès à distance sécurisé avec SSH

1. El cliente inicia la conexión al servidor SSH.

2. El servidor envía su clave pública al cliente.

3. La clave pública del servidor se registra en el archivo de hosts conocidos del cliente.

4. El cliente y el servidor negocian los parámetros de la conexión y establecen la conexión.

Del lado del servidor existe un componente llamado demonio SSH que escucha constantemente un puerto TCP/IP concreto a la espera de posibles peticiones de conexión de clientes. Una vez que un cliente inicia una conexión, el demonio SSH responderá con el software y las versiones de protocolo que admite y ambos intercambiarán sus datos de identificación. Si las credenciales facilitadas son correctas, SSH crea una nueva sesión para el entorno adecuado.

La versión predeterminada del protocolo SSH para la comunicación entre el servidor SSH y el cliente SSH es la versión 2.

Cómo efectuar una conexión SSH

Dado que la creación de una conexión SSH necesita a la vez un cliente y un componente servidor, debe asegurarse de que estén instalados respectivamente en la máquina local y en la máquina remota. Una herramienta SSH de código abierto, ampliamente utilizada en las distribuciones Linux, es OpenSSH. La instalación de OpenSSH es relativamente sencilla.

Requiere el acceso al terminal en el servidor y en el ordenador que utiliza para conectarse. Tenga en cuenta que Ubuntu no tiene forzosamente un servidor SSH instalado de forma predeterminada.

A. Cómo instalar un servidor OpenSSH

Para aceptar conexiones SSH, una máquina debe disponer de la parte del lado del servidor del conjunto de herramientas de software SSH.

Para comprobar si el servidor OpenSSH ya está instalado en el sistema Linux del ordenador remoto que debe aceptar las conexiones SSH, puede intentar conectarse al propio host local:

  1. Abra un terminal en la máquina servidor.
  2. Escriba ssh localhost y pulse Intro.
  3. En los sistemas sin servidor SSH instalado, la respuesta se parecerá a esto:
username@host:~$ ssh 
ssh: connect to host localhost port 22: Connection refused

Si es el caso, tendrá que instalar el servidor OpenSSH. Deje el terminal abierto y ejecute el comando siguiente para instalar el servidor SSH:

sudo apt-get install openssh-server

Se instalarán los archivos necesarios; a continuación podrá comprobar si el servidor SSH se está ejecutando en la máquina escribiendo este comando:

sudo systemctl status ssh

La respuesta debería parecerse a esto si el servicio SSH funciona correctamente:

Illustration 3 — Accès à distance sécurisé avec SSH

Otra forma de comprobar si el servidor OpenSSH está correctamente instalado y acepta conexiones consiste en intentar ejecutar de nuevo el comando ssh localhost en el símbolo del sistema de su terminal.

ssh localhost

Es necesario validar la primera conexión a un host desconocido.

"Are you sure you want to continue connecting?"

Escriba yes para continuar y después introduzca la contraseña de su usuario.

El resultado se parecerá a esto cuando ejecute el comando por primera vez:

Illustration 4 — Accès à distance sécurisé avec SSH

Aquí se ha conectado a su propio servidor mediante la llamada conexión "localhost", es decir, al propio host local. Veremos pronto cómo acceder al servidor a distancia, es decir, desde otro host.

Enhorabuena. Ha configurado su servidor para aceptar las peticiones de conexión SSH.

B. Cómo instalar un cliente SSH

Antes de proceder a la instalación de un cliente SSH, asegúrese de que no esté ya instalado. Numerosas distribuciones Linux ya tienen un cliente SSH de forma predeterminada.

Para los sistemas Windows, puede instalar PuTTY o cualquier otro cliente de su elección para acceder a un servidor. Enlace de descarga oficial de PuTTY.

Illustration 5 — Accès à distance sécurisé avec SSH

Para los sistemas Linux, puede comprobar si el cliente ya está instalado:

  1. Escriba ssh en un terminal y pulse Intro.
  2. Si el cliente está instalado, recibirá una respuesta que se parece a esto:
Illustration 6 — Accès à distance sécurisé avec SSH

Esto significa que está listo para conectarse a distancia a una máquina física o virtual. En caso contrario, tendrá que instalar el cliente OpenSSH ejecutando el comando siguiente:

sudo apt-get install openssh-client

Ya podrá utilizar SSH para conectarse a cualquier máquina que tenga la aplicación servidor, siempre que disponga de los privilegios necesarios para acceder a ella, así como del nombre de host o de la dirección IP.

Cómo conectarse mediante SSH

Ahora que el cliente y el servidor SSH están instalados, puede establecer una conexión remota segura con su servidor. Así es como se procede:

Dos opciones para conectarse: A o B.

A. Desde un cliente Windows como PuTTY

  1. Anote la dirección IP de su servidor. Para Ubuntu con el comando: ip address
  2. Abra PuTTY o cualquier otro programa emulador de terminal.
  3. Seleccione el tipo de conexión SSH y asegúrese de estar en el puerto 22
  4. Indique la dirección IP o el nombre de host del servidor remoto.
  5. Haga clic en "Open" para abrir la conexión
Illustration 7 — Accès à distance sécurisé avec SSH

B. Desde un terminal

  1. Abra el terminal SSH en su máquina y ejecute el comando siguiente: ssh your_username@host_ip_address Si el nombre de usuario de su ordenador local coincide con el del servidor al que intenta conectarse, puede escribir simplemente: ssh host_ip_address Y pulsar Intro.
  2. Escriba su contraseña y pulse Intro . Tenga en cuenta que no obtendrá ninguna indicación en pantalla durante la escritura. Si pega su contraseña, asegúrese de que esté almacenada de forma segura y no en un archivo de texto.
  3. Cuando se conecte a un servidor por primera vez, se le preguntará si desea continuar la conexión. Escriba simplemente sí y pulse Intro . Este mensaje solo aparece esta vez porque el servidor remoto no está identificado en su máquina local.
  4. Se añade ahora una huella digital de clave ECDSA y queda conectado al servidor remoto.

Si el ordenador al que intenta conectarse a distancia se encuentra en la misma red, es preferible utilizar la dirección IP privada en lugar de la dirección IP pública. En caso contrario, deberá utilizar únicamente la dirección IP pública. Además, asegúrese de conocer el puerto TCP correcto en el que OpenSSH escucha las peticiones de conexión y de que los parámetros de reenvío de puertos son correctos. El puerto predeterminado es el 22 si nadie ha modificado la configuración en el archivo sshd_config. También puede simplemente añadir el número de puerto después de la dirección IP del host.

Configurar un servidor OpenSSH

En esta primera etapa implementará algunas configuraciones de refuerzo iniciales para mejorar la seguridad global de su servidor SSH.

La mayoría de las configuraciones de OpenSSH que implemente mediante el archivo de configuración de servidor OpenSSH estándar se encuentran en /etc/ssh/sshd_config.

Modificando el archivo de configuración del demonio SSH puede, por ejemplo, cambiar el puerto predeterminado para las conexiones SSH.

Si necesita instalar nano, ejecute este comando:

sudo apt-get install nano

Tenga en cuenta que, para que sea efectivo, debe reiniciar el servicio SSH cada vez que aporte modificaciones al archivo sshd_config, ejecutando este comando:

sudo service ssh restart

Antes de continuar, se recomienda hacer una copia de seguridad de su archivo de configuración existente, para poder restaurarlo en caso de que algo no funcione.

Realice una copia de seguridad del archivo mediante el comando siguiente:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Esto guardará una copia del archivo en /etc/ssh/sshd_config.bak.

En el símbolo del sistema del terminal, ejecute este comando:

sudo nano /etc/ssh/sshd_config

El archivo de configuración se abrirá en el editor de su elección. Aquí hemos utilizado nano.

Observación: el archivo de configuración del servidor OpenSSH incluye numerosas opciones y configuraciones predeterminadas. Según la configuración de su servidor existente, algunas de las opciones de refuerzo recomendadas pueden haberse definido ya.

Al editar su archivo de configuración, algunas opciones pueden estar comentadas de forma predeterminada con un único carácter de almohadilla ( #) al principio de la línea. Para modificar estas opciones o hacer que se reconozca la opción comentada, deberá descomentarlas suprimiendo la almohadilla.

En primer lugar, desactive el inicio de sesión mediante SSH como usuario root definiendo la opción siguiente:

PermitRootLogin no

Esto es extremadamente beneficioso, ya que impedirá que un posible atacante se conecte directamente como root. Fomenta también buenas prácticas de seguridad operativa, como trabajar con un usuario sin privilegios y utilizar sudo para aumentar los privilegios únicamente cuando es absolutamente necesario.

A continuación, puede limitar el número máximo de intentos de autenticación para una sesión de conexión concreta configurando lo siguiente:

MaxAuthTries 3

Un valor estándar de 3 es aceptable para la mayoría de las configuraciones, pero quizá desee definirlo más alto o más bajo en función de su propio umbral de riesgo.

Si es necesario, también puede definir un periodo de gracia de conexión reducido, que corresponde al tiempo del que dispone un usuario para terminar la autenticación después de la conexión inicial a su servidor SSH:

LoginGraceTime 20

El archivo de configuración especifica este valor en segundos.

Definir este valor en una cifra inferior permite evitar ciertos ataques por denegación de servicio en los que varias sesiones de autenticación se mantienen abiertas durante un periodo prolongado.

Si ha configurado claves SSH para la autenticación, en lugar de utilizar contraseñas, desactive la autenticación por contraseña de SSH para impedir que unas contraseñas de usuario divulgadas permitan a un atacante conectarse. Dejaremos el parámetro en yes mientras no se utilicen las claves SSH.

PasswordAuthentication yes

Como medida de refuerzo adicional relacionada con las contraseñas, también puede desactivar la autenticación con contraseñas vacías. Esto impedirá las conexiones si la contraseña de un usuario está definida con un valor vacío o en blanco:

PermitEmptyPasswords no

En la mayoría de los casos de uso, SSH se configurará con la autenticación por clave pública como único método de autenticación utilizado. Sin embargo, el servidor OpenSSH admite también muchos otros métodos de autenticación, algunos de los cuales están activados de forma predeterminada. Si no son obligatorios, puede desactivarlos para reducir aún más la superficie de ataque de su servidor SSH.

#sécurité #linux