SSH (Secure SHell) es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo la computadora mediante un intérprete de comandos, y también puede redirigir el tráfico de X para poder ejecutar programas gráficos si tenemos un Servidor X arrancado.
Con unas pequeñas y sencillas pautas, podemos securizar un servidor SSH, con la finalidad de evitar accesos no deseados. Nos vamos a centrar primero en el fichero de configuración del servicio, normalmente ubicado en:
/etc/ssh/sshd_config
Pautas a seguir para securizar el servicio SSH:
Cambiar el puerto de acceso(por defecto 22) por uno alternativo, por ejemplo el 1242 (debe ser superior a 1024:
Port 1242
Deshabilitar el acceso root vía SSH si no es estrictamente necesario:
PermitRootLogin no
Utilizar autenticación mediante llaves públicas/privadas (SSH Public-Key / Private-Key Authentication). De este modo, y si deshabilitamos el acceso mediante autenticación con clave de acceso, solamente podrá acceder al sistema aquel equipo que tenga una llave autorizada en el servidor. La forma más rápida de crear una llave, es ejecutar el siguiente comando en el equipo que va a conectarse al servidor ssh:
ssh-keygen -t rsa
Este comando generará una llave pública y una privada (no voy a detarllar ahora el uso del mismo, investigando encontraréis todas sus opciones), deberemos añadir el contenido de la llave pública en el servidor SSH, concretamente en el fichero authorized_keys del usuario con el que vayamos a conectar. Si fueramos a conectar como root, en el servidor destino añadiríamos el contenido al fichero:
/root/.ssh/authorized_keys
De este modo accederíamos sin clave al servidor, pues nuestra llave pública SSH está autorizada en el servidor. Si quisieramos entonces permitir solamente el acceso por llave, y no por passwords, lo configuraríamos de tal forma:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys RSAAuthentication no PasswordAuthentication no UsePAM no KerberosAuthentication no GSSAPIAuthentication no
Por supuesto, si dejamos activa la autenticación vía password, es encarecidamente necesario que no sea un password sencillo de averiguar.
En caso de permitir el acceso con password, es conveniente limitar el número de veces que un usuario puede introducir «incorrectamente» una clave, en este caso 5 veces:
MaxAuthTries 5
Otra parte extremadamente importante, independiente del fichero de configuración SSH, es permitir el acceso SSH solamente a redes o ips conocidas. Para ello, utilizaremos los siguientes ficheros:
/etc/hosts.deny /etc/hosts.allow
Lo más recomendable es prohibir el acceso SSH a cualquier IP o rango a través del fichero hosts.deny, y posteriormente permitir acceso a determinadas IPs/Rangos en el fichero hosts.allow:
Hosts.Deny (Denegamos acceso total a SSH):
$ cat /etc/hosts.deny # # hosts.deny This file describes the names of the hosts which are # *not* allowed to use the local INET services, as decided # by the '/usr/sbin/tcpd' server. # # The portmap line is redundant, but it is left to remind you that # the new secure portmap uses hosts.deny and hosts.allow. In particular # you should know that NFS uses portmap! sshd: all
Hosts.Allow (Permitimos acceso a determinadas IPs):
$ cat /etc/hosts.allow # # hosts.allow This file describes the names of the hosts which are # allowed to use the local INET services, as decided # by the '/usr/sbin/tcpd' server. # sshd: 93.42.132.43 86.34.22.122
Esto es básicamente lo principal a la hora de securizar el servicio, probablemente me haya dejado algo, en caso de querer añadir o debatir alguna opción podéis comentarlo.
2 comentarios en “Cómo securizar un servidor SSH”
Comments are closed.