Cómo securizar un servidor SSH

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.

Wikipedia

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.