Securizar acceso ssh

Es normal que si tenemos una máquina accesible desde Internet, de vez en cuando nos encontremos con cosas como esta en el archivo /var/log/auth.log:

Feb 13 03:59:54 server sshd[26021]: Invalid user staff from 47.43.278.456
Feb 13 03:59:56 server sshd[26027]: Invalid user sales from 47.43.278.456
Feb 13 03:59:58 server sshd[26033]: Invalid user recruit from 47.43.278.456
Feb 13 04:00:00 server sshd[26040]: Invalid user alias from 47.43.278.456
Feb 13 04:00:02 server sshd[26046]: Invalid user office from 47.43.278.456
Feb 13 04:00:04 server sshd[26054]: Invalid user samba from 47.43.278.456
Feb 13 04:00:06 server sshd[26060]: Invalid user tomcat from 47.43.278.456
Feb 13 04:00:08 server sshd[26066]: Invalid user webadmin from 47.43.278.456
Feb 13 04:00:10 server sshd[26073]: Invalid user spam from 47.43.278.456
.....
Feb 13 04:05:18 server sshd[27076]: Invalid user mailnull from 47.43.278.456
Feb 13 04:05:20 server sshd[27083]: Invalid user nfsnobody from 47.43.278.456
Feb 13 04:05:22 server sshd[27089]: Invalid user rpcuser from 47.43.278.456
Feb 13 04:05:24 server sshd[27096]: Invalid user rpc from 47.43.278.456
Feb 13 04:05:26 server sshd[27102]: Invalid user gopher from 47.43.278.456

En este ejemplo he cambiado la dirección IP del atacante, Sí, digo atacante, porque en casi 6 minutos ha efectuado 135 intentos de conexión a nuestra máquina, utilizando algunos nombres de usuarios y contraseñas por defecto, o algún que otro ataque mediante diccionario. Para evitar que consiga su objetivo, aquí os dejo algunos consejos:

Cuidado con los usuarios de prueba
Quién no ha creado alguna vez un usuario prueba con contraseña prueba (o test/test) para realizar alguna que otra prueba en nuestro sistema y después se nos ha olvidado borrarlo al finalizar. Pues juntemos esto con algún exploit local del kernel (como el que hemos sufrido hace poco con el fallo del vmsplice) y podemos ofrecer fácilmente un acceso como root a cualquier atacante.

Deshabilitar el acceso como usuario root
No deberíamos utilizar nunca la cuenta de root, salvo para realizar tareas de mantenimiento. Por tanto, siempre nos conectaremos como usuario sin privilegios, y posteriormente y solo cuando sea necesario ejecutaremos comandos como superusuario, bien con sudo, bien convirtiéndonos previamente en él mediante el comando

su -

Para evitar el acceso SSH como usuario root, debemos comprobar que en el archivo /etc/ssh/sshd_config tenemos una línea como esta:

PermitRootLogin no

Si tenemos que añadir o cambiar esta línea, no debemos olvidar reiniciar el demonio ssh para que los cambios tengan efecto

# /etc/iinit.d/ssh restart

Deshabilitar el acceso mediante contraseña
Una forma sencilla de proteger nuestra máquina personal frente a este tipo de ataques es prohibir el acceso mediante contraseña, y emplear solo un mecanismo de clave pública/privada. De este modo, solo aquellos que tengan la clave privada podrán entrar en nuestra máquina.

Para generar el par de claves, no tenemos más que ejecutar el comando:

$ ssh-keygen -t tipo -b bits

donde

  • tipo es el tipo de clave que emplearemos (RSA o DSA).
  • bits es el número de bits que tendrá nuestra clave. El número de bits permitidos dependerá del tipo de clave que elijamos.

También nos pedirá que protejamos la clave privada mediante una contraseña, de modo que aunque alguien la consiga, no pueda llegar a utilizarla sin conocer la frase de paso.

Solo nos queda copiar nuestra clave pública al servidor remoto al que queramos conectar. Para ello basta con ejecutar:

ssh-copy-id -i <clave_publica> <maquina_remota>

Nos pedirá la contraseña para conectar con la maquina_remota y copiará la clave pública en el archivo .ssh/authorized_keys del home del usuario.

Tras esto, comprobaremos que podemos conectar con la máquina remota sin teclear la contraseña de usuario. Os recomiendo usar algún gestor de claves, como Seahorse en Gnome, para no tener que teclear la frase de paso cada vez que queramos conectar con el servidor remoto.

El último paso, una vez hemos comprobado que podemos conectar mediante el mecanismo de clave pública y privada, es prohibir el acceso al servidor mediante contraseña. Para ello debemos comprobar que en el archivo /etc/ssh/sshd_config tenemos una línea como esta:

PasswordAuthentication no

De nuevo, si hemos tenido que modificar el archivo de configuración, deberemos reiniciar el servicio ssh.

Anuncios

2 pensamientos en “Securizar acceso ssh

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s