Qué pasa calabaza, hoy voy a enseñarte a cómo puedes mejorar mucho más la seguridad de tu servicio SSH, ya que, a pesar de ser un protocolo que literalmente su fuerte es la seguridad, esto no significa que no podamos añadir más capoas de seguridad en él, como sabrás, este protocolo nos permite el acceso remoto a un dispositivo remoto o local por un canal seguro pero, también este podría permitirle a ciberdelincuentes acceder a dicho dispositivo de manera no autorizada, y comprometer la información que se encuentra ahí.
Entonces, ¿Cómo lo hacemos más seguro? aquí entra tu compa RaiN (o sea yo) al rescate.
Cómo mejorar la seguridad en SSH
Configuraciones básicas
Primero, lo más elemental, no uses contraseñas clásicas, el poder de una simple contraseña puede marcar la diferencia entre la protección de tu servidor y un acceso rápido y no autorizado por parte de un ciberdelincuente a tu servidor, así que contraseñas fuertes siempre.
Seguidamente, es muy recomendable utilizar pares de claves pública y privada (por supuesto, el servidor debe conocer las claves públicas de los usuarios que tienen acceso).
Como usuarios, en la computadora cliente podemos ejecutar el comando
ssh-keygen -b 4096
to básicamente creará dos ficheros, /home/(usuario)/.ssh/id_rsa y /home/(usuario)/.ssh/id_rsa.pub (aunque podemos cambiarles el nombre si así lo deseamos), el primer fichero será la clave privada y el segundo la clave pública. Podemos abrir los archivos con cualquier editor de texto sin problema para verificar su contenido, pero no modificarlos ya que esto afectaría a su correcto funcionamiento.
Ahora debemos añadir a nuestro servidor id_rsa.pub al final de todo el archivo /home/(usuario_en_el_servidor)/.ssh/authorized_keys
Con esto, de ahora en adelante, necesitarás guardar el archivo id_rsa en tu ordenador siempre que quieras acceder a dicho servidor, pues este será tu llave de acceso para acceder de una forma más personalizada y segura que con una simple contraseña.
Configuraciones en el fichero sshd_config
Ahora, vamos a configurar mejor el archivo /etc/ssh/sshd_config y así añadimos algunas capas de seguridad extra, te recomendamos abrir tu fichero sshd_config e ir haciendo las modificaciones pertinentes
Lo primero, es no permitir contraseñas vacías
PermitEmptyPasswords no
También, es importante limitar el tiempo que le damos al usuario para enviarnos la contraseña (con un par de minutos sobra, aunque podemos limitarlo más) por defecto ese tiempo es en segundos, para modificarlo emplearemos la siguiente línea de instrucciones, donde especificaré 2 minutos (120 segundos)
LoginGraceTime 120
También, vamos a limitar el número de intentos para inciar sesión con una contraseña, el número de contraseñas fallidas (en mi caso lo coloco a 2, pues supondremos que los clientes que usarán el servidor, saben a la perfección su contraseña, pero tú puedes poner la cantidad deseada)
MaxAuthTries 2
¿Hasta aquí vas bien? estupendo, porque al principio mencionamos el uso de claves públicas y privadas como método de autenticación, y a pesar de que las usemos, podemos aún ser vulnerables de que nuestro servidor acepte autenticación mediante contraseñas sin más, entonces, si hiciste lo anterior comentado sobre la creación de un par de clave y su adición a los hosts autorizados a acceder al servidor, entonces puedes seguir este paso ya que, con esta instrucción forzamos a no usar contraseñas sin más (es opcional)
PasswordAuthentication no
Por otro lado, denegaremos el acceso al usuario root y de esta forma nos aseguramos que nadie puede acceder como este usuario por medio de SSH
PermitRootLogin no
Ahora, si un ciberdelincuente se hace el listo e intenta establecer varias conexiones para probar autenticaciones diferentes, parémoslo (con esto estaremos diciendo que máximo 2 conexiones simultaneas estén en el SSH, tu puedes adaptarlo a tus requerimientos o los de tu empresa)
MaxStartups 2
Seguidamente, cambiaremos el puerto por defecto del SSH, y tu dirás, ¿en serio, eso aumentará la seguridad? pues sí, aunque no lo parezca, existen muchísimos ataques automatizados a los puertos por defecto de los servicios, en este caso al 22 que es el puerto de común uso del protocolo SSH, así que colóquemoslo en otro puerto, por ejemplo el 65534
Port 65534
Otra cosa, pero más que para seguridad es para evitar gastos de recursos innecesarios, es echar a los usuarios cuando llevan cierto tiempo inactivos y lo hacemos con esta instrucción, en este caso lo coloco a 10 minutos, nunca sabemos si nuestro administrador de sistema solo fue por agua, no seamos exagerados, pero si ya se está echando unas partidas del LoL en lugar de trabajar, entonces si hay que velar por los recursos del servidor
ClientAliveInterval 600
ClientAliveCountMax 0
Por otro lado y aunque no lo creas, advertir a quienes se conectan también puede ser un método de seguridad efectivo, pues puedes colocar mensajes para avisar a los empleados que, por ejemplo, se están monitoreando todas las direcciones IP que acceden o cualquier mensaje personalizado que quieras mostrar, este mensaje lo puedes escribir en un fichero de texto para que en el fichero /etc/ssh/sshd_config solo indiques la ruta de este
Banner (ruta)
Seguidamente, podemos establecer que solo ciertos usuarios puedan acceder, a modo de lista blanca
AllowUsers (usuarios)
# Ejemplo
# AllowUsers elbichosiu messirve elpanaeduardo
Ya para finalizar, comentarte que puedes hacer que solo se permita acceder desde la red local o que sean grupos creados para los respectivos accesos a los que los usuarios deberían pertenecer si quieren acceder
AllowUsers (usuario)@(ip)
AllowGroups (grupos)
# Ejemplo
# AllowGroups grupodelbicho grupodelpanarabbit
Y estas fueron algunas de las tantas maneras que podemos emplear para mantener seguro nuestro servicio SSH, recuerda mantener actualizado tu sistema operativo y todo el software en él, con esto también estás mejorando la seguridad de los mismos y también toma agua, el agua es vida.