Buenas prácticas con OpenSSH

OpenSSH (Open Secure Shell) es un conjunto de aplicaciones que permiten realizar comunicaciones cifradas a través de una red, usando el protocolo SSH. Fue creado como una alternativa libre y abierta al programa Secure Shell, que es software propietario. « Wikipedia.

Puede que algunos usuarios piensan que las buenas prácticas solo deben ser aplicadas en los servidores y no es así. Muchas distribuciones GNU/Linux incluyen OpenSSH por defecto y hay algunas cosas que debemos tener en cuenta.

Seguridad

Estos son los 6 puntos más importantes a tener en cuenta a la hora de configurar SSH:

  1. Usar una contraseña fuerte.
  2. Cambiar el puerto por defecto de SSH.
  3. Usar siempre la versión 2 del protocolo SSH.
  4. Desactivar el acceso como root.
  5. Limitar el acceso de los usuarios.
  6. Usar autenticación mediante llaves.
  7. Otras opciones

Una contraseña fuerte

Un buen password es aquel que contiene caracteres alfanuméricos o especiales, espacios, mayúsculas y minúsculas… etc. Acá en DesdeLinux hemos mostrado varios métodos para generar buenas contraseñas. Pueden visitar este artículo y este otro.

Cambiar el puerto por defecto

El puerto por defecto de SSH es el 22. Para cambiarlo lo único que debemos hacer es editar el fichero /etc/ssh/sshd_config. Buscamos la línea que dice:

#Port 22

la descomentamos y cambiamos el 22 por otro número.. por ejemplo:

Port 7022

Para saber los puertos que no estamos usando en nuestro ordenador/servidor podemos ejecutar en el terminal:

$ netstat -ntap

Ahora para acceder a nuestro ordenador o servidor debemos hacerlo con la opción -p de la siguiente forma:

$ ssh -p 7022 usuario@servidor

Usar Protocolo 2

Para asegurarnos de que estamos usando la versión 2 del protocolo SSH, debemos editar el fichero /etc/ssh/sshd_config y buscar la línea que dice:

# Protocol 2

Lo descomentamos y reiniciamos el servicio SSH.

No permitir acceso como Root

Para evitar que el usuario root pueda acceder de forma remota por SSH, buscamos en el fichero/etc/ssh/sshd_config la línea:

#PermitRootLogin no

y la descomentamos. Creo que vale aclarar que antes de hacer esto debemos asegurarnos que nuestro usuario tenga los permisos necesarios para realizar tareas administrativas.

Limitar acceso por usuarios

Tampoco está de mas permitir el acceso vía SSH solo a determinados usuarios de confianza, por lo que volvemos al fichero /etc/ssh/sshd_config y añadimos la línea:

AllowUsers elav usemoslinux kzkggaara

Donde evidentemente, los usuarios elav, usemoslinux y kzkggaara son los que podrán acceder..

Usar autenticación mediante llaves

Aunque este método es el más recomendado, debemos tener especial cuidado pues accederemos al servidor sin poner la contraseña. Esto significa que si un usuario logra entrar a nuestra sesión o nos roban el ordenador, podemos estar en problemas. No obstante, veamos como hacerlo.

Lo primero es crear un par de llaves (pública y privada):

ssh-keygen -t rsa -b 4096

Luego le pasamos nuestra llave al ordenador/servidor:

ssh-copy-id -i ~/.ssh/id_rsa.pub elav@200.8.200.7

Por último tenemos que tener descomentada, en el fichero /etc/ssh/sshd_config la línea:

AuthorizedKeysFile .ssh/authorized_keys

Otras opciones

Aporte de Yukiteru

Podemos reducir el tiempo de espera en el que un usuario puede loguearse satisfactoriamente al sistema a 30 segundos

LoginGraceTime 30

Para evitar ataques a ssh por medio de TCP Spoofing, dejando activo el alive encriptado del lado de ssh por un máximo de 3 minutos, podemos activar estas 3 opciones.

TCPKeepAlive no
ClientAliveInterval 60
ClientAliveCountMax 3

Deshabilitar el uso de archivos rhosts o shosts, los cuales por razones de seguridad son instados a no utilizarse.

IgnoreRhosts yes
IgnoreUserKnownHosts yes
RhostsAuthentication no
RhostsRSAAuthentication no

Chequear los permisos efectivos del usuario durante el login.

StrictModes yes

Activa la separación de privilegios.

UsePrivilegeSeparation yes

Conclusiones:

Haciendo estos pasos podremos añadir un extra de seguridad a nuestros ordenadores y servidores, pero nunca debemos olvidar que hay un factor importante: lo que hay entre la silla y el teclado. Es por ello que les recomiendo la lectura de este artículo.

Fuente: HowToForge


8 comentarios, deja el tuyo

Deja tu 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.

  1.   Yukiteru dijo

    Excelente post @elav y agrego unas cositas interesantes:

    LoginGraceTime 30

    Esto nos permite reducir el tiempo de espera en el que un usuario puede loguearse satisfactoriamente al sistema a 30 segundos

    TCPKeepAlive no
    ClientAliveInterval 60
    ClientAliveCountMax 3

    Estas tres opciones son bastante útiles para evitar ataques a ssh por medio de TCP Spoofing, dejando activo el alive encriptado del lado de ssh por un maximo de 3 minutos.

    IgnoreRhosts yes
    IgnoreUserKnownHosts yes
    RhostsAuthentication no
    RhostsRSAAuthentication no

    Deshabilita el uso de archivos rhosts o shosts, los cuales por razones de seguridad son instados a no utilizarse.

    StrictModes yes

    Esta opción es usada para chequear los permisos efectivos del usuario durante el login.

    UsePrivilegeSeparation yes

    Activa la separación de privilegios.

    1.    elav dijo

      Pues en un rato edito el post y lo añado al post 😀

  2.   Eugenio dijo

    Descomentar para no cambiar la línea es redundante. Las líneas comentadas muestran el valor por defecto de cada opción (leed la aclaración al principio del propio fichero). El acceso a root está desactivado por defecto, etc. Por tanto, descomentarla no tiene absolutamente ningún efecto.

    1.    elav dijo

      # The strategy used for options in the default sshd_config shipped with
      # OpenSSH is to specify options with their default value where
      # possible, but leave them commented. Uncommented options override the
      # default value.

      Si, pero por ejemplo ¿cómo sabemos que estamos usando solo la versión 2 del protocolo? Porque bien podríamos estar usando la 1 y la 2 al mismo tiempo. Como bien dice la última línea, descomentar esta opción por ejemplo, sobrescribe la opción por defecto. Si estamos usando la versión 2 por defecto, bien, si no, pues la usamos SI o SI 😀

      Gracias por comentario

  3.   Sli dijo

    Muy buen articulo, conocia varias cosas pero una cosa que nunca me queda claro es el uso de llaves, realmente que son y que ventajas tiene, si uso llaves puedo usar contraseñas??? en caso afirmativo por que aumenta la seguridad y si no como hago para acceder desde otro pc??

  4.   Adian dijo

    Saludos, he instalado debian 8.1 y no logro conectarme desde mi pc de windows a debian con el WINSCP, sera que tengo que usar el protocolo 1 ?? alguna ayuda.. gracias
    Adian

  5.   Franksanabria dijo

    Les puede interesar este video sobre openssh https://m.youtube.com/watch?v=uyMb8uq6L54

  6.   Azulejo dijo

    Quiero probar algunas cosas de aquí, varias ya las he probado gracias a la Wiki de Arch, otras por pereza o desconocimiento no. Lo guardaré para cuando eche a andar mi RPi