Uno de los protocolos más usados a nivel de seguridad para establecer conexiones en ambientes UNIX es el protocolo SSH (Secure Shell) el cual nos ofrece una serie de funcionalidades y características especiales para proteger los datos y las conexiones realizadas.
SSH es un protocolo que ha sido desarrollado enfocándose en la seguridad de las comunicaciones entre dos sistemas a través del modelo de cliente/servidor y gracias al cual se permite a los usuarios conectarse a un host de forma remota.
Una de las principales características de SSH es que este encripta la sesión de conexión, lo cual impide que algún usuario pueda obtener contraseñas no encriptadas.
- Una vez se establezca la conexión inicial, el cliente puede verificar que está conectando al mismo servidor al cual se conectó anteriormente
- El cliente envía la información de autenticación al servidor a través de una encriptación de 128 bits
- Todos los datos enviados y recibidos durante la sesión son transferidos por medio de encriptación de 128 bits, lo cual hace difícil que se puedan descifrar y leer
- El cliente tiene la oportunidad de reenviar aplicaciones X11 desde el servidor., esta es una técnica llamada reenvío por X11 la cual proporciona un medio seguro para usar aplicaciones gráficas sobre una red local o externa
Ahora, en los sistemas operativos Linux encontramos el archivo de configuración de SSH en la ruta /etc/ssh/ssh_config y gracias a este archivo será posible efectuar todas las medidas de seguridad para las conexiones SSH.
En el caso de los sistemas macOS, este archivo se encuentra en la ruta /private/etc/ssh/ssh_config y esta tiene un enlace simbólico a /etc/ssh/ssh_config para fines de compatibilidad.
Al editar este archivo debemos tener presente lo siguiente.
- Las líneas vacías y las líneas que comienzan con '#' son comentarios
- Cada línea comienza con una palabra clave, seguida de argumento (s)
- Las opciones de configuración pueden estar separadas por espacios en blanco o espacios en blanco opcionales y un signo =
- Los argumentos se pueden incluir entre comillas dobles (") para especificar argumentos que contengan espacios
1. Cómo editar el archivo ssh_config Linux
Para editar este archivo con el fin de establecer valores propios, debemos ejecutar lo siguiente con algún editor:
sudo nano /etc/ssh/ssh_configVeremos lo siguiente:
El archivo ssh_config está organizado por hosts y allí cada host contiene configuraciones específicas para ese host en particular, allí podemos usar comodines como * para hacer coincidir varios nombres de host con una sola declaración.
Algunos de los parámetros que podemos usar en este archivo son:
A continuación, veremos algunos consejos prácticos para mejorar la seguridad de las conexiones SSH a Linux y así obtener las mejores prestaciones de acceso.
2. Cómo bloquear archivos SSH Linux
El primer paso antes de editar el archivo, es asegurarnos de que tanto el archivo ssh_config como el archivo sshd_config tienen el propietario y el usuario configurados como root, esto debido a que es el super usuario de Linux y nadie mejor que este sea el dueño.
Para ello ejecutamos lo siguiente:
sudo chown root:root /etc/ssh/sshd_config sudo chmod og-rwx /etc/ssh/sshd_config
3. Cómo confirmar el protocolo SSH versión 2 Linux
La versión 2 de SSH posee un algoritmo de intercambio de claves mejorado el cual no es vulnerable al agujero de seguridad en la versión 1 mejorando así la seguridad general de las conexiones, de manera que es ideal confirmar que se está usando el nuevo Protocolo 2 en lugar del Protocolo 1 y para ello debemos confirmar la siguiente línea en el archivo ssh_config:
Protocol 2
Allí también podemos configurar el protocolo de forma implícita a través de Ciphers, el cual automáticamente establecerá Protocol en 2 para usar Ciphers modernos, para esto validamos la siguiente línea justo bajo la línea Protocol:
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
4. Cómo deshabilitar contraseñas vacías SSH Linux
Es importante validar que cada cuenta SSH debe usar una contraseña al iniciar sesión bloqueando las contraseñas vacías las cuales permitirían el acceso simple ocasionando riesgos de seguridad en el sistema, para validar esto usaremos la siguiente línea o, si no existe, la añadimos anteponiendo el símbolo #:
PermitEmptyPasswords no
5. Cómo deshabilitar el inicio de sesión de root SSH Linux
Al evitar del inicio de sesión del usuario root será posible bloquear cuentas específicas y no permitir el uso de estas en todo el sistema, las opciones para PermitRootLogin incluyen "yes", "without-password", "forced-commands-only" o "no". El valor predeterminado es "sí". Para detener completamente el inicio de sesión de root usaremos la siguiente línea:
PermitRootLogin no
6. Cómo establecer un nuevo puerto SSH Linux
Por defecto el puerto asignado para SSH es el 22, de modo que los atacantes saben con certeza a través de cual puerto accederán para realizar sus ataques de modo que un buen método de seguridad es cambiar este puerto por defecto e indicarles solo a los usuarios autorizados el nuevo puerto.
Para esto, debemos ubicar la línea Port y añadir la siguiente sintaxis:
Port XXXXX
7. Cómo restringir acceso SSH Linux
En caso de que el acceso al servidor SSH este compuesto por varios usuarios, es posible aplicar determinadas restricciones creando grupos donde estén incluidos estos usuarios, esto es posible añadiendo palabras clave como:
AllowUsers (Permite el acceso de los usuarios) AllowGroups (Permite el acceso de grupos) DenyUsers (Restringe el acceso de usuarios) DenyGroups (Restringe el acceso de grupos)Por ejemplo, podemos ejecutar lo siguiente en el archivo de configuración:
AllowUsers Solvetic pruebas DenyGroups test
8. Cómo actualizar el tiempo de gracia de SSH Linux
Por defecto, la cantidad de tiempo en que un usuario puede permanecer inactiva sin iniciar sesión es de dos minutos, esto con el fin de esto ayudará a prevenir conexiones no autorizadas al sistema, este tiempo lo podemos editar en la línea LoginGraceTime aumentando o disminuyendo este tiempo:
LoginGraceTime 1m
9. Cómo crear un alias SSH Linux
Dentro de las configuraciones SSH es posible especificar un alias, estos permiten conectarse a un servidor especifico a través de un puerto y usuarios definidos, por ejemplo, podemos añadir lo siguiente:
Host dev HostName dev.solvetic.com Port 3333 User SolveticEn este caso puntual debemos acceder del siguiente modo:
ssh Solvetic@dev.solvetic.com -p 3333
10. Autenticación con llaves seguras SSH Linux
ssh será mucho más seguro y útil cuando se usa con pares de llaves públicas / privadas para los temas de la autenticación, en lugar de usar contraseñas. El archivo ssh_config puede declarar una clave específica para un host específico usando la clave IdentityFile, en este caso ingresaríamos lo siguiente:
Host dev HostName dev.solvetic.com Port 3333 User Solvetic IdentityFile ~/.ssh/dev.solvetic.keyPara este caso la conexión seria de la siguiente forma:
ssh -i ~/.ssh/dev.solvetic.key Solvetic@dev.solvetic.com -p 3333Algunos parámetros adicionales son:
Así, contamos con diferentes opciones para mejorar la seguridad y conectividad SSH en Linux.