Todo lo que necesita saber sobre Linux OpenSSH Server

La suite OpenSSH es una colección de herramientas robustas destinadas a facilitar el control remoto y la transferencia de datos entre sistemas en red. Consiste en una serie de herramientas, incluidas SSH, SCP, SFTP, SSHD y muchas más. Cada vez que usa ssh para iniciar sesión en una máquina remota, es muy probable que aproveche el servidor OpenSSH. En esta guía, proporcionaremos una discusión en profundidad sobre cómo funciona OpenSSH y cómo utilizarlo correctamente para satisfacer las crecientes demandas de seguridad. Por lo tanto, si desea obtener más información sobre las complejidades de OpenSSH, quédese con nosotros a lo largo de esta guía.

Profundización en el servidor y los servicios de OpenSSH

El servidor OpenSSH se encuentra en el corazón de la comunicación remota entre máquinas Linux y / o BSD. Algunas de sus características notables incluyen cifrado de tráfico, varios métodos de autenticación poderosos, tunelización segura y capacidades de configuración sofisticadas. Las siguientes secciones proporcionan una comprensión significativa de los servicios fundamentales y los consejos de seguridad.

Los fundamentos de un servidor OpenSSH

Como sugiere su nombre, OpenSSH utiliza el protocolo SSH (Secure Shell) para proporcionar conexiones remotas y facilidades de transferencia de datos. Elimina las vulnerabilidades de seguridad asociadas con métodos heredados como y telnet. OpenSSH facilita la autenticación de usuarios legítimos y el cifrado de conexiones remotas.

diagrama del servidor openssh

La utilidad principal de la suite OpenSSH responsable de administrar las conexiones remotas es OpenSSH Server o sshd. Escucha constantemente las solicitudes entrantes y configura el tipo de conexión apropiado cuando llega una nueva solicitud.

Por ejemplo, si un usuario usa el programa cliente ssh para comunicarse con el servidor, sshd configurará una sesión de control remoto tan pronto como la autenticación sea exitosa. Si el usuario usa SCP en su lugar, sshd iniciará una sesión de copia segura.

El usuario final debe elegir el mecanismo de comunicación adecuado para su conexión. Esto es facilitado por herramientas como ssh-add y ssh-keygen. Cuando un usuario se conecta con éxito a la máquina remota usando el comando ssh, es recibido por una consola basada en texto. Todos los comandos ingresados ​​en esta consola se envían a través de un túnel SSH cifrado para ejecutarse en la máquina remota.

Instalación y configuración del servidor OpenSSH

La siguiente sección discutirá cómo instalar el demonio del servidor OpenSSH y configurarlo. Mostraremos las mejores opciones de configuración tanto para uso personal como empresarial. También describiremos las mejores prácticas para configurar y fortalecer OpenSSH al final de esta sección.

Cómo instalar OpenSSH Server

La mayoría de vienen con OpenSSH ya instalado. Sin embargo, si necesita instalarlo manualmente, puede hacerlo usando el siguiente comando simple.

$ sudo apt install openssh-server

Este comando instalará el demonio del servidor. Utilice el siguiente comando para instalar el cliente OpenSSH en su sistema.

$ sudo apt install openssh-client

instalar el cliente openssh

Cómo configurar el servidor OpenSSH

OpenSSH admite una gran cantidad de opciones de configuración para controlar cosas como la configuración de comunicación y los modos de autenticación. El archivo sshd_config especifica los parámetros de configuración y almacena la dirección de otros archivos de configuración, incluyendo una o más claves de host archivos y authorized_keys archivos. Se encuentra en el directorio / etc / ssh / de su sistema de archivos.

Antes de pasar a modificar algunos de sus parámetros, le sugerimos que haga una copia de seguridad de la copia actual del archivo sshd_config . Puede hacer esto abriendo su y emitiendo el siguiente comando.

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

De esta manera, si estropea su archivo sshd_config , siempre puede volver a la configuración original. Ahora, puede proceder a configurar su servidor ssh. Antes de eso, sugerimos a los lectores que prueben su configuración sshd efectiva usando el siguiente comando simple.

$ sudo sshd -T

Ahora que ha hecho una copia de seguridad de su archivo sshd_confi g y ha visto la configuración predeterminada, es hora de editar el archivo de configuración. Usaremos el editor de texto vim para abrir y editar nuestro archivo de configuración. Pero puede usar cualquier que desee.

$ sudo vim /etc/ssh/sshd_config

configuración del servidor openssh

Como debe notar, ya hay una serie de opciones preconfiguradas. Sin embargo, la mayoría de ellos están comentados. Puede activarlos descomentando la línea particular que especifica el parámetro de opciones. Quite el símbolo de almohadilla “#” del principio de una línea para descomentarlo. Discutimos algunas de las opciones importantes a continuación.

  • AceptarEnv

Esta opción especifica qué variables de entorno enviadas por el cliente se pueden copiar al entorno remoto.

  • DirecciónFamilia

Define la familia de direcciones IP para uso de sshd. Las tres opciones disponibles son: any, inet e inet6.

  • AllowAgentForwarding

Esta opción define si el reenvío del agente ssh está permitido o no.

  • AllowStreamLocalForwarding

Define si el reenvío de sockets de dominio Unix está permitido o no.

  • AllowTcpForwarding

Define si el reenvío de TCP está permitido o no.

  • Permitir usuarios

Esta opción puede definir una lista de nombres de usuarios a los que se les permite el acceso según un patrón. Todos los nombres de usuario están permitidos de forma predeterminada.

  • Métodos de autenticación

Esta opción establece los métodos de autenticación que un usuario debe completar antes de recibir acceso.

  • AuthorizedKeysFile

Esta opción especifica el archivo que contiene las claves públicas para la autenticación de usuarios.

  • ChallengeResponseAuthentication

Cuando está habilitada, esta opción permite la autenticación de desafío-respuesta.

  • ChrootDirectory

Especifica el directorio raíz, que se presentará a los usuarios que se hayan autenticado correctamente.

  • Cifrados

Esta opción define los cifrados criptográficos permitidos por el servidor OpenSSH. Hay una amplia gama de opciones disponibles.

  • Compresión

Especifica si se permite la compresión y, si lo está, en qué etapa.

  • DenyUsers

Esta opción se puede utilizar para definir una lista de nombres de usuario a los que se les niega el acceso según un patrón.

  • ForceCommand

Se puede usar para forzar la ejecución de un comando determinado. Hace que el servidor ignore cualquier comando proporcionado por el cliente ssh y cualquier cosa presente en / .ssh / rc .

  • Puertos de enlace

Esta opción define si los hosts remotos pueden conectarse a los puertos que se han reenviado para el lado del cliente.

  • Autenticación GSSAPIA

Se utiliza para indicar si la autenticación de usuario basada en GSSAPI está permitida o no.

  • Autenticación basada en host

Esta opción especifica si una clave pública presente en la máquina cliente puede autenticar un host en el servidor remoto.

  • HostbasedUsesNameFromPacketOnly

Esta opción especifica si el servidor necesita realizar una búsqueda de nombre inversa para los nombres presentes en los archivos /.shosts , / .rhosts y /etc/hosts.equiv .

  • HostKey

Se puede utilizar para definir un archivo que contiene una clave de host privada. Los administradores pueden especificar varios archivos clave. los predeterminados son / etc / ssh / ssh_host_dsa_key , / etc / ssh / ssh_host_ecdsa_key , / etc / ssh / ssh_host_ed25519_key y / etc / ssh / ssh_host_rsa_key .

  • HostKeyAlgorithms

Esta opción define los algoritmos de clave de host que el servidor ssh pone a disposición. OpenSSH admite una gran cantidad de algoritmos para este propósito.

  • IgnoreRhosts

Indica al servidor de ignorar las .rhosts y .shosts archivos para RhostsRSAAuthentication y autenticación del tipo HostbasedAuthentication .

  • KbdInteractiveAuthentication

Esta opción define si el servidor permite la autenticación interactiva con el teclado o no.

  • Algoritmos de Kex

Se utiliza para indicar los algoritmos disponibles para el intercambio de claves ssh. OpenSSH es compatible con los principales algoritmos de intercambio de claves, incluidos Diffie Hellman y Elliptic Curves.

  • ListenAddress

Define qué direcciones locales debe escuchar el demonio sshd.

  • Iniciar sesiónGraceTime

Esta opción define el tiempo después del cual sshd desconecta al usuario si no logra iniciar sesión correctamente.

  • Nivel de registro

Define el nivel de verbosidad de los mensajes de registro para sshd.

  • MAC

Esta opción se utiliza para definir los algoritmos de código de autenticación de mensajes (MAC) disponibles. Se utilizan para proteger la integridad de los datos.

  • MaxAuthTries

Esta opción define el número máximo de veces que un usuario puede intentar autenticarse en el servidor.

  • Autenticación de contraseña

Define si un usuario remoto puede iniciar sesión mediante autenticación basada en contraseña.

  • PermitEmptyPasswords

Esta opción especifica si los usuarios pueden utilizar una contraseña vacía para inicios de sesión remotos.

  • PermitRootIniciar sesión

Esta opción define si se permite el inicio de sesión de root o no.

  • Permiso TTY

Esta opción define si se permite pseudo TTY o no.

Elimine el comentario de la línea que contiene una de las opciones anteriores y establezca el valor de opción deseado. La siguiente sección ilustra algunas prácticas comunes de refuerzo de la seguridad para OpenSSH.

Cómo reforzar la seguridad del servidor OpenSSH

Dado que OpenSSH actúa como la puerta de entrada a su servidor, es extremadamente importante reforzar su seguridad. Intente mantener las siguientes sugerencias para que el inicio de sesión remoto sea más seguro.

endurecimiento openssh

1. Deshabilitar el inicio de sesión de root

Nunca debe permitir el inicio de sesión de root en su servidor ssh ya que una escalada de la cuenta de root puede comprometer todo el servidor. Además, la cuenta de usuario root es constantemente atacada por usuarios malintencionados. Por lo tanto, es mejor crear un usuario normal y permitirle permisos de sudo. Puede deshabilitar el inicio de sesión de root estableciendo el valor de PermitRootLogin en no.

PermitRootLogin no

2. Limite los intentos de autenticación

Los administradores deben limitar el número de intentos de inicio de sesión desde hosts remotos para evitar intentos de inicio de sesión por fuerza bruta. El surgimiento de vastos ejércitos de bots ha hecho que esto sea más importante que nunca. Utilice la opción MaxAuthTries para establecer el número de intentos de autenticación permitidos en su servidor. Muchos administradores consideran que tres es un valor aceptable para esta opción. Sin embargo, puede configurarlo según sus estándares de seguridad.

MaxAuthTries 3

3. Reducir el tiempo de gracia de inicio de sesión

Otra forma de prevenir los robots automatizados es reducir el tiempo de gracia de inicio de sesión. Esta es la cantidad de tiempo dentro del cual un usuario debe autenticarse exitosamente después de conectarse al servidor. El archivo sshd_config define este valor en segundos.

LoginGraceTime 20

4. Deshabilitar la autenticación de contraseña

Solo debe permitir que los usuarios inicien sesión en el servidor mediante la autenticación basada en claves. Por lo tanto, asegúrese de deshabilitar el esquema de autenticación basado en contraseña. Puede hacer esto estableciendo el valor de PasswordAuthentication en no.

PasswordAuthentication no

También es una buena idea desactivar las contraseñas vacías. Establezca el valor del campo PermitEmptyPasswords en no.

PermitEmptyPasswords no

5. Deshabilite otros métodos de autenticación

OpenSSH admite algunos métodos de autenticación adicionales además de la autenticación basada en claves y contraseñas. Debe deshabilitarlos por completo después de configurar la autenticación basada en claves y deshabilitar la autenticación de contraseña.

ChallengeResponseAuthentication no
KerberosAuthentication no
GSSAPIAuthentication no

6. Deshabilitar el reenvío X11

El reenvío X11 se utiliza para mostrar aplicaciones gráficas en el servidor a la máquina host remota. Sin embargo, no es necesario para la mayoría de los servidores empresariales. Por lo tanto, desactívelo si no necesita esta función.

X11Forwarding no

Después de deshabilitar el reenvío X11, debe comentar todas las referencias a AcceptEnv . Simplemente agregue un hash (#) antes de las líneas para comentarlas.

7. Deshabilitar opciones varias

Desactive las siguientes opciones que se utilizan para tunelización y reenvío si no las necesita para su servidor.

AllowAgentForwarding no
AllowTcpForwarding no
PermitTunnel no

8. Deshabilitar el banner SSH

El banner ssh detallado está habilitado de forma predeterminada y muestra información esencial sobre el servidor. Los piratas informáticos pueden aprovechar esta información para planificar un ataque a su servidor. Por lo tanto, es una buena idea deshabilitar el banner ssh detallado.

DebianBanner no

Si esta opción no está presente en su archivo sshd_config , agréguela para deshabilitar el banner.

9. Implementar la lista de direcciones IP permitidas

En la mayoría de los casos, accederá al servidor remoto desde un puñado de direcciones IP conocidas. Puede crear una dirección IP que permita que la lista evite que otras personas accedan a su servidor. Esto reduce el riesgo de una violación del servidor, incluso si sus claves privadas se han visto comprometidas.

Sin embargo, debe tener cuidado al implementar la lista de direcciones IP permitidas y abstenerse de usar direcciones dinámicas, ya que cambian con mucha frecuencia.

Para definir la lista de permitidos, primero averigüe la dirección IP que está utilizando actualmente para conectarse al servidor OpenSSH. Puede hacer esto ejecutando el siguiente comando en su terminal.

$ w

Anote la dirección IP debajo de la etiqueta ” DESDE “. Asumiremos una dirección IP de ejemplo 203.0.113.1 para el resto de esta guía. Ahora, abra su archivo de configuración ssh y use la directiva de configuración AllowUsers , como se muestra a continuación.

AllowUsers *@203.0.113.1

La línea anterior restringirá a todos los usuarios remotos a una dirección IP seleccionada. Puede cambiar esto a un rango de direcciones IP utilizando la notación Classless Inter-Domain Routing (CIDR) , como se ilustra a continuación.

AllowUsers *@203.0.113.0/24

10. Restringir el shell de usuarios remotos

Siempre es una buena práctica restringir las operaciones realizadas por el usuario remoto. Puede hacer esto restringiendo el shell del usuario remoto. OpenSSH permite múltiples opciones de configuración para ayudar en esta tarea. Le mostraremos cómo restringir el acceso de shell de un usuario a SFTP solo usando estas opciones.

Primero, crearemos un nuevo usuario llamado mary usando el shell / usr / sbin / nologin . Esto deshabilitará los inicios de sesión interactivos para ese usuario, pero aún proporcionará sesiones no interactivas para realizar operaciones como transferencias de archivos.

$ sudo adduser --shell /usr/sbin/nologin mary

Este comando crea el usuario mary con nologin shell. También puede deshabilitar el shell interactivo para un usuario existente mediante el siguiente comando.

$ sudo usermod --shell /usr/sbin/nologin alex

Si intenta iniciar sesión como uno de los usuarios anteriores, su solicitud será rechazada.

$ sudo su alex
This account is currently not available.

Sin embargo, aún puede realizar acciones que no requieran un shell interactivo utilizando estas cuentas.

A continuación, abra su configuración sshd una vez más y use la directiva ForceCommand internal-sftp y ChrootDirectory para crear un usuario solo SFTP altamente restrictivo. Vamos a restringir al usuario alex para este ejemplo. Además, se recomienda encarecidamente agregar cualquier bloque Match en la parte inferior de su sshd_config .

Match User alex
ForceCommand internal-sftp
ChrootDirectory /home/alex/

Salga del archivo de configuración y pruebe si el archivo de configuración causa algún error o no. Puede hacer esto ejecutando el siguiente comando en su .

$ sudo sshd -t

Si todo va bien, debería haber creado una configuración sólida para el usuario alex. La sesión de inicio de sesión interactiva está deshabilitada para este usuario y solo tiene acceso al directorio de inicio de su cuenta.

Pensamientos finales

Dado que OpenSSH es parte integral de la seguridad de su servidor remoto, es esencial aprender cómo funciona. Es por eso que nuestros editores han presentado información útil sobre el servidor OpenSSH en esta guía. Los temas incluyen cómo funciona OpenSSH, cómo leer y editar el archivo de configuración y cómo implementar las mejores prácticas de seguridad.

Con suerte, pudimos brindarle la información que estaba buscando. Marque esta guía para futuras referencias. Y no olvide dejar un comentario si tiene más consultas o sugerencias para hacer que esta guía sea más útil.

Leave a Comment

Your email address will not be published.