SSH (Secure SHell) nos permite acceder a máquinas remotas de forma segura, gracias a que cifra toda la información que transmite, para abrir un terminal, iniciar una sesión gráfica o enviar y recibir ficheros.
En este mini-tutorial vamos a ver como blindar un servidor OpenSSH, usado frecuentemente en sistemas Unix, para protegernos de los ataques más comunes.
Cambiar el puerto por defecto
SSH usa por defecto el puerto 22, esto es algo que todos los posibles juankers y script kiddies que traten de hacerse con el control de tu servidor saben, por lo que es una buena idea cambiarlo.
Para modificar esta opción y las siguientes editaremos el fichero de configuración shd_config, que por defecto se encuentra en el directorio /etc/ssh/. Utilizad vuestro editor de texto favorito, aquí usaré nano:
sudo nano /etc/ssh/sshd_config
Tenemos que usar un puerto cualquiera por encima del 1024, así que escoged el que queráis. En este ejemplo usaré el 3729, así que la opción Port del fichero de configuración quedaría así:
Port 3729
Apuntadlo para abrirlo en el router y poder especificarlo en el cliente al conectaros con la opción -p.
Desactivar el Protocolo 1
La primera versión del protocolo SSH tiene varias vulnerabilidades conocidas y por tanto no hay razón para permitir su uso.
Buscamos la opción Protocol y nos aseguramos de que quede así:
Protocol 2
De esta forma sólo aceptaremos conexiones que usen la segunda versión del protocolo SSH.
Deshabilitar el acceso del superusuario (root)
No es muy recomendable permitir el acceso remoto directo al usuario root, por lo que lo desactivaremos:
PermitRootLogin no
Una vez logueados con otro usuario podremos cambiar a root usando su.
Definir un número máximo de intentos de conexión
Muchos de los ataques llevados a cabo por los malvados script kiddies se basan en fuerza bruta, estableciendo un número máximo de intentos de conexión lograremos disuadirles o, al menos, retrasar su «sofisticado» intento de hacking:
MaxAuthTries 2
El número de intentos de logueo fallidos antes de desconectar ya depende de la torpeza o mala memoria de los usuarios legítimos del sistema 🙂 .
Restringir el acceso a determinados usuarios
Si un usuario de nuestro sistema no necesita acceder de forma remota al mismo, no hay razón para permitírselo. Para hacerlo modificaremos la siguiente opción:
AllowUsers yo
De esta forma el usuario «yo» sería el único que puede hacer login remoto de forma directa a nuestro sistema.
Activar el modo estricto
La opción StrictModes debe activarse para que, por ejemplo, los usuarios despistados que establecen permisos de escritura para todo el mundo en sus archivos y directorios no se lleven una desagradable sorpresa cuando otro usuario los modifique 😛 .
StrictModes yes
Impedir la conexión al servidor gráfico
Si nuestro servidor no tienen entorno gráfico instalado, o no queremos que los usuarios se conecten a él, definiremos esta opción en el fichero de configuración:
X11Forwarding no
Desactivar todo autenticación basada en .rhosts
La autenticación basada en ficheros .rhosts está obsoleta y es insegura, así que la desactivaremos:
IgnoreRhosts yes
HostbasedAuthentication no
RhostsAuthentication no
RhostsRSAAuthentication no
Ahora guardamos los cambios realizados en el fichero de configuración y reiniciamos el servidor para que sean efectivos:
sudo /etc/init.d/ssh restart
Una vez seguidos todos estos pasos tendremos funcionando un servidor OpenSSH medianamente seguro al que podremos conectarnos usando el comando ssh y especificando el puerto destino de la siguiente forma:
ssh -p 3729
Donde 3729 es el puerto usado en este ejemplo.
Si queréis más información sobre las diferentes opciones de configuración del servidor OpenSSH, podéis consultad las páginas del manual en internet o ejecutar:
man sshd_config
Para terminar, una frase de Gene Spafford sobre seguridad:
El único sistema seguro es aquél que está apagado en el interior de un bloque de hormigón protegido en una habitación sellada rodeada por guardias armados.