GNU/Linux >> Tutoriales Linux >  >> Linux

5 prácticas recomendadas de seguridad SSH de Linux para proteger sus sistemas

Introducción

Minimizar las vulnerabilidades en su protocolo Secure Shell (SSH) es clave para garantizar la seguridad de su entorno Linux.

En este artículo, cubrimos la seguridad Linux SSH más común. medidas que puede tomar para que sus servidores sean más seguros. Al cambiar el puerto SSH predeterminado, usar pares de claves y seguir las otras mejores prácticas recomendadas, puede mejorar significativamente la seguridad general de su sistema.

¿Qué es SSH?

El protocolo Secure Shell (SSH) permite la administración de sistemas remotos protegidos criptográficamente y las transferencias de archivos a través de redes inseguras. Usando múltiples métodos de encriptación, SSH asegura la conexión entre un cliente y un servidor, protegiendo los comandos, la autenticación y la salida de los usuarios contra accesos y ataques no autorizados.

El protocolo SSH ahora se usa ampliamente en los centros de datos y en casi todas las empresas importantes que ejecutan cualquiera de las variantes de UNIX.

Cuando se trata de medidas de seguridad, es esencial combinarlas, aplicarlas en capas y no elegir solo una y confiar solo en esa solución.

Para obtener más información sobre las conexiones SSH, visite nuestro artículo sobre cómo funciona SSH.

1. Cambiar el puerto SSH predeterminado

El uso de un puerto no estándar para la conexión SSH ayuda a evitar ataques automáticos en su servidor. También ayuda a reducir las posibilidades de que aparezca en el radar de un hacker y lo convierte en un objetivo menos obvio.

Nota :la mayoría de los piratas informáticos que buscan servidores OpenSSH apuntarán al puerto SSH predeterminado 22 .

En ese caso, los scripts que están utilizando buscarán direcciones IP solo en el puerto 22. Si su servidor pertenece a ese grupo, cada ataque automatizado tendrá un impacto en sus archivos de registro. En consecuencia, la carga en su servidor puede aumentar sustancialmente ya que muchas vulnerabilidades del servidor SSH se ejecutan las 24 horas llamando a la puerta de cada servidor.

Es importante tener en cuenta que cambiar el puerto SSH predeterminado no mejora la seguridad de su servidor. Sin embargo, ayuda a mantener alejados los ataques automáticos.

Cómo cambiar el número de puerto

Antes de comenzar, debe decidir qué puerto usará en lugar del puerto predeterminado 22. Antes de tomar una decisión, debe considerar algunas cosas:

Para cambiar el puerto en su servidor Linux , sigue estos pasos:

  1. Conéctese al servidor a través de SSH como lo haría normalmente.
  2. Cambie al usuario raíz usando el comando su, que le pedirá que ingrese la contraseña del servidor.
  3. Use un editor de texto de su elección para editar el archivo de configuración sshd ubicado en el etc/ssh/ directorio. Si nunca ha usado un editor de texto dentro de la terminal, se recomienda usar Nano. De lo contrario, use vi o vim, ya que son los editores más utilizados en la actualidad. Le recomendamos que haga una copia de seguridad del archivo original antes de realizar cualquier cambio.
  4. Ejecute este comando para editar el archivo de configuración:
nano /etc/ssh/sshd_config
  1. En la salida de sshd_config archivo localice la línea que dice “Port 22 .”
  1. Cambie el número de puerto al valor de su elección. Asegúrese de que no haya "# ” al principio de la línea.
  2. Salga del editor y confirme que desea guardar los cambios.
  3. Para que los cambios surtan efecto, reinicie el servicio sshd con este comando:
service sshd restart
  1. Verifique que el SSH esté escuchando en el puerto que especificó conectándose a él.

Tenga en cuenta que ahora deberá especificar el puerto cuando se conecte, ya que su cliente siempre usará el puerto SSH predeterminado a menos que se indique lo contrario.

Beneficios

Si bien el procedimiento para cambiar el puerto SSH predeterminado no aumenta el nivel de seguridad en sí mismo, lo saca del radar de los escaneos más comunes. Una manera fácil de probar esto es dejar que su servidor funcione durante unos días con sshd escuchando en el puerto predeterminado y luego cambiarlo a uno no estándar. Compare la cantidad de inicios de sesión fallidos en su servidor y verá que disminuye sustancialmente.

Mediante el uso de un puerto no estándar para SSH:

  • Evitas ser visto por escaneos aleatorios.
  • Es más difícil encontrar su servidor. La mayoría de los ataques escanearán el puerto predeterminado o algunas variantes del mismo, pero continuarán una vez que se rechace la conexión.
  • El demonio SSH puede tomarse un descanso ya que no recibirá solicitudes de conexión de ataques con secuencias de comandos. La carga del servidor se reduce y el archivo de registro se mantiene limpio, lo que le ahorra tiempo para revisarlo.
  • No recibe tantas alertas por inicios de sesión fallidos. Si está utilizando un puerto no estándar y alguien aún intenta acceder a su servidor, probablemente signifique que su servidor está siendo atacado específicamente y que la alarma no proviene de un ataque programado.
  • Está menos expuesto a ser pirateado debido a errores en sshd o claves privadas débiles.
  • La mayoría de los piratas informáticos se sentirán repelidos si ven que no está utilizando el puerto predeterminado. Será una señal de que el servidor está debidamente protegido y que probablemente también se han tomado otras medidas de seguridad, lo que convierte a su servidor en un objetivo no deseado.

Inconvenientes

Hay algunas precauciones a tener en cuenta antes de decidir cambiar el puerto predeterminado para SSH. Las desventajas de ejecutar un puerto no estándar pueden significar que:

  • Cualquiera que pueda conectarse a su servidor deberá ser informado del cambio y deberá comenzar a usar el nuevo puerto.
  • Si utiliza supervisión externa para su servidor, también debe informarles del cambio. De lo contrario, pueden tratar esto como una amenaza potencial que puede provocar un tiempo de inactividad del servidor.
  • Las reglas de firewall relacionadas con el servicio SSH deben inspeccionarse y modificarse de acuerdo con los cambios que realice.

Algunas de estas desventajas probablemente no se aplicarán a su caso de uso, pero deben tenerse en cuenta. Los beneficios de cambiar el puerto superan los inconvenientes y demuestran ser una buena capa adicional de seguridad para su servidor.

2. Mejore la seguridad SSH de Linux mediante pares de claves

Uno de los métodos más seguros para autenticar clientes en servidores es mediante pares de claves SSH. . Las contraseñas seguras pueden ser suficientes para mantener su servidor seguro, pero los ataques persistentes de fuerza bruta aún pueden descifrarlas. Esta es la razón por la que necesita un refuerzo SSH adicional con pares de claves.

Las claves SSH son resistentes a este tipo de ataques y son prácticamente imposibles de descifrar. Un par de claves SSH consta de dos largas series de caracteres, una clave privada que se mantiene en secreto, y una clave pública que se puede compartir de forma segura. Su propósito es similar al de las contraseñas y le permiten establecer automáticamente una sesión SSH sin necesidad de escribir una contraseña.

Cómo generar un par de claves

Para configurar las claves SSH, deberá generar un par de claves en la computadora cliente que se usará para conectarse al servidor. Para hacerlo:

  1. Inicie el terminal y ejecute la utilidad SSH keygen , disponible con la herramienta OpenSSH estándar.
ssh-keygen –t rsa
  1. Recibirá el mensaje "Generando un par de claves RSA pública/privada". Si desea guardar la clave en la ubicación predeterminada, presione Enter Cuando se le solicite. La clave se guardará en el directorio del usuario principal, en el ~/.ssh directorio. Para cambiar la ubicación, simplemente escriba la nueva ruta. La recomendación es ceñirse a la ubicación predeterminada, de modo que no tenga que realizar ningún cambio en su cliente SSH. La clave privada o de identificación se guardará como id_rsa y la clave pública correspondiente como id_rsa.pub .
  2. Opcionalmente, puede insertar una frase de contraseña . Si no desea utilizar uno, presione Enter continuar. La frase de contraseña proporciona una capa adicional de seguridad al cifrar la clave privada en la máquina local. Para descifrar la frase de contraseña, un pirata informático primero deberá tener acceso al sistema, ya que la clave privada no está expuesta en la red. Incluso entonces, llevará tiempo tener éxito, lo que le permitirá cambiar la clave utilizada antes de que el hacker obtenga acceso a otros servidores. La desventaja es que tendrá que ingresarlo cada vez que intente conectarse usando esa clave.

El proceso de generación de un par de claves está completo.

La pantalla final se verá similar a esto:

ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/demo/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/demo/.ssh/id_rsa.

Your public key has been saved in /home/demo/.ssh/id_rsa.pub.

The key fingerprint is:

8b:cd:0b:f7:38:4a:3f:ed:24:18:8d:54:34:2c:63:56 [email protected]

The key's randomart image is:

+--[ RSA 2048]----+

| ..o. |

| . E.o |

| + . o |

| . = = . |

| ..S |

| = + = + |

| . o + o . |

| . + + o |

| .. |

| |

+-----------------+

Nota: Puede hacer que la autenticación/autorización sea aún más segura creando claves más grandes de 4096 bits en lugar de los 2048 bits predeterminados. Para hacerlo, agregue –b 4096 al ssh-keygen dominio. Se verá así:

ssh-keygen -t rsa -b 4096

Copiar una clave pública

Para usar el par de claves que ha creado en su máquina para la autenticación SSH, debe colocar la clave pública en el servidor deseado. La forma más sencilla de hacerlo es utilizar la herramienta disponible con OpenSSH:

ssh-copy-id

El procedimiento es fácil:

  1. Escriba ssh-copy-id [email protected]_host_address .
  2. Si se conecta por primera vez a este host, recibirá un mensaje de autenticidad. Escribe Yes para continuar.
  3. Ingrese su contraseña cuando se le solicite, y la herramienta copiará el contenido de ~/.ssh/ id_rsa.pub clave para el authorized_keys archivo bajo el ~/.ssh directorio de inicio en el servidor.

Nota: No se verán caracteres mientras escribe la contraseña por razones de seguridad.

  1. Recibirás un mensaje:

Su clave pública se colocó en el servidor remoto y ahora puede iniciar sesión sin ingresar la contraseña de la cuenta.

  1. Para probar si la autenticación con las claves funciona, conéctese a su servidor con ssh [email protected]_host_address . Si tiene éxito, iniciará sesión automáticamente. En caso de que haya configurado previamente una frase de contraseña, primero deberá ingresarla antes de que se le otorgue acceso al servidor.

Cómo funcionan las teclas

Esencialmente, una clave pública no es una llave. Se comporta como un candado que puedes poner en una cuenta SSH en otra máquina. Cuando ejecuta la utilidad 'ssh-keygen', genera tanto el candado como la llave que lo abre, id_rsa.pub y id_rsa respectivamente.

Puede hacer tantas copias del candado según sea necesario, distribúyalos a cualquier servidor que desee, y solo usted tendrá la clave correcta para desbloquearlos a todos. Por eso es importante mantener segura la clave privada porque desbloquea todas las copias de los candados has repartido.

No importa dónde coloque su clave pública siempre que la clave maestra no se vea comprometida. Dado que nadie más posee la clave privada, este método de autorización y autenticación es probablemente el más seguro y muy recomendable.

3. Deshabilitar el inicio de sesión raíz SSH del servidor

Las distribuciones de servidores Linux tienen habilitado el acceso a la raíz externa de forma predeterminada. Esto puede ser una grave amenaza para la seguridad, ya que los piratas informáticos pueden intentar descifrar la contraseña con ataques de fuerza bruta. Se recomienda deshabilitar el inicio de sesión raíz y usar una cuenta regular y un su – comando para cambiar al usuario root.

Antes de deshabilitar el inicio de sesión raíz, asegúrese de haber agregado una cuenta que pueda obtener acceso raíz. Para hacerlo, siga los pasos a continuación:

  1. Utilice SSH para iniciar sesión en el servidor como root.

2. Utilice un editor de texto para abrir el archivo de configuración principal. Esta vez, usaremos el vi editor.

vi /etc/ssh/sshd_config

3. Busque la línea que dice “PermitRootLogin_yes “ y cambia a PermitRootLogin_no . Es posible que deba desplazarse hacia abajo algunas líneas para encontrarlo.

4. Es importante añadir la cuenta de usuario utilizará para iniciar sesión. Simplemente agregue otra línea con el nombre de usuario en cuestión:AllowUsers your_username_here

5. Guarde los cambios que realizó y luego salga el editor de texto.

6. Reiniciar el servicio SSH pero no cerrar la sesión raíz todavía. Para Ubuntu y Debian use sudo service ssh restart y para Fedora/CentOS use el service ssh restart comando.

Abra una nueva ventana de terminal y verifique que ahora puede iniciar sesión como el usuario que agregó. Una vez que confirme que funciona, salga la sesión raíz activa.

4. Deshabilite los inicios de sesión basados ​​en contraseña en su servidor

Si está utilizando claves SSH para la autenticación SSH, puede deshabilitar la autenticación de contraseña del servidor por completo. Esta es otra forma de mantener su servidor a salvo de ataques de fuerza bruta e intentos de descifrar su contraseña. Antes de continuar, verifique dos veces si la autenticación basada en clave SSH funciona para la cuenta raíz en el servidor o para una cuenta con sudo acceso.

Cuando esté listo, complete estos pasos:

  1. Utilice claves SSH para iniciar sesión en el servidor como root o con privilegios sudo.

2. Use un editor de texto para abrir sshd_config expediente. Usaremos vi:

vi /etc/ssh/sshd_config

3. Busque la línea que dice PasswordAuthentication y cambia a PasswordAuthentication_no . Asegúrese de descomentar la línea si # está presente.

4. Guardar los cambios que ha realizado y luego salir el editor de texto.

5. Reiniciar el servicio SSH para aplicar los cambios. Para Ubuntu/Debian use sudo service ssh restart y para Fedora/CentOS use el service ssh restart comando.

Felicitaciones, ha deshabilitado con éxito la opción de iniciar sesión a través de SSH usando contraseñas de cuenta. SSH Daemon simplemente ignorará cualquier solicitud de autenticación que no incluya pares de claves pública/privada.

5. Restringir el acceso SSH usando iptables

Iptables es una utilidad de Linux utilizada para configurar reglas de cortafuegos y supervisión/filtrado tráfico entrante y saliente a su servidor. Se incluye de forma predeterminada con la mayoría de las distribuciones de Linux.

Con iptables, puede definir reglas que limitan o permiten el tráfico de diferentes tipos de servicios por dirección IP, puerto o protocolo de red y así mejorar sustancialmente la seguridad de su servidor. En nuestro caso, estableceremos reglas de firewall para restringir el tráfico SSH entrante para todos menos una dirección IP o subred.

De esta manera, el bloqueo del puerto 22 no solo detendrá el acceso no autorizado a sus servidores, sino que también puede detener o prevenir los ataques DDoS.

Mientras da este paso, debe asegurarse de no bloquearse bloqueando por completo el tráfico SSH. Necesitará usar solo unos pocos comandos para permitir una dirección IP o subred específica para las conexiones SSH entrantes.

Nota: Los comandos distinguen entre mayúsculas y minúsculas.

Esta regla incluirá en la lista blanca la dirección IP que ha ingresado. Reemplace la IP de ejemplo en el comando con su IP. También puede usar una subred, por ejemplo, 10.10.10.0/24.

sudo iptables -A INPUT -p tcp -s 123.456.78.90 -dport 22 -j ACCEPT

Debe guardar las reglas para no perderlas después de reiniciar:

sudo iptables-save

Si desea ver la lista de todas las reglas de iptables, puede usar el iptables –L dominio. Para incluir más detalles, como información de paquetes, bytes y objetivos, agregue –v al comando anterior. Añadir -n a todo ello y la salida se mostrará en formato numérico.

En caso de que quiera restablecer todas las reglas y empezar a limpiar, use el comando de vaciado iptables –F . Esto borrará la configuración de iptables, lo cual es útil si no está seguro de si todo está configurado como lo desea.

Definiciones de opciones y parámetros de Iptables

Aquí hay algunas explicaciones de los parámetros, opciones y valores de iptables utilizados en los ejemplos anteriores, así como algunos que no se mencionaron antes.

Valor Descripción
ACEPTAR Permite que los paquetes pasen
SOLTAR Bloquea los paquetes
VOLVER Indica que se salte la cadena actual y se reanude en la siguiente regla de la cadena anterior (de llamada)
>Parámetro Descripción
-c contadores permite configurar los contadores de paquetes y bytes de una regla específica
-d destino – puede ser una dirección, nombre de un host o dirección, etc.
-f fragmento – aplica la regla al segundo y a los fragmentos que le siguen
-g ir a cadena – establece que la acción continuará en una cadena especificada por el usuario
-i en la interfaz – establece el nombre de la interfaz de donde provienen los paquetes
-j salto – especifica la acción si un paquete coincide con la regla
-o interfaz de salida – el nombre de la interfaz de un paquete saliente
-p protocolo – cualquier protocolo disponible como SSH, TCP, UDP y FTP
-s fuente – puede ser una dirección, nombre de un host o dirección, etc.
Cadena Descripción
ENTRADA Controla los paquetes entrantes
HACIA ADELANTE Reenvía los paquetes que llegan a su servidor pero están destinados a otro lugar
SALIDA Filtrar paquetes que salen de su servidor
Opción Descripción
-A añadir añade una (o más) reglas de la cadena seleccionada
-C marcar – busca una regla que coincida con los criterios en la cadena seleccionada
-D eliminar – elimina solo una regla de la cadena seleccionada
-F descarga – elimina todo reglas de iptables definidas
-Yo insertar – insertar una regla en la cadena seleccionada
-L lista – muestra las reglas de la cadena seleccionada
-n numérico – muestra la dirección IP/nombre de host y el valor de retorno en formato numérico
-N cadena nueva crea una nueva cadena definida por el usuario
-v detallado – se utiliza en combinación con -L para proporcionar información adicional
-X eliminar cadena elimina la cadena definida por el usuario

Conclusión, seguridad SSH y mejores prácticas de fortalecimiento

Ya sea que esté construyendo un nuevo servidor o una máquina virtual, es una buena práctica implementar múltiples capas de seguridad dentro de su entorno. Las empresas suelen estar interesadas en configurar su infraestructura lo antes posible, pero las medidas de seguridad necesarias deben aplicarse desde el principio.

Si emplea los métodos de seguridad Linux SSH enumerados anteriormente, debería poder evitar las amenazas de seguridad comunes en la nube.

Haga que sea difícil para los piratas informáticos penetrar en su (s) servidor (es) y restrinja cualquier daño. Asegúrese de implementar tantas de estas mejores prácticas como sea posible antes de que su servidor esté disponible en la red.

No olvide consultar nuestra lista actualizada regularmente de los mejores blogs de ciberseguridad que debe seguir para mantenerse al tanto de las últimas tendencias.


Linux
  1. Escanee su seguridad Linux con Lynis

  2. Prácticas recomendadas de seguridad de OpenSSH

  3. Cómo cambiar el puerto SSH en Linux

  4. Seguridad Linux:Proteja sus sistemas con fail2ban

  5. Cambiar el puerto SSH en el sistema Linux Ubuntu 20.04:¿el mejor método?

11 mejores formas de proteger su servidor SSH

Asegure su red Linux con firewall-cmd

Cómo usar el golpe de puerto para asegurar el servicio SSH en Linux

Uso del reenvío de puertos SSH como herramienta de seguridad en Linux

10 consejos prácticos de fortalecimiento de SSH para proteger su servidor Linux

Los 8 mejores teléfonos Linux seguros para privacidad y seguridad