El acceso remoto a un servidor es un tema delicado. Normalmente la protección del acceso es una contraseña. No se suele tener la costumbre de usar contraseñas complejas, con números, mayúsculas y símbolos. Si a esto le sumamos que se accede al equipo con root lo que puede pasar es que te encuentres visitantes en tu servidor cualquier día.

Estas son unas medidas básicas:

  • Crear una contraseña compleja para cada cuenta de usuario
  • Desactivar el login local de root y configurar el sudo
  • Proteger el login con un sistema de llave pública/privada

Crear una contraseña compleja para cada cuenta de usuario

Muchos no han superado la fase de usar la fecha de nacimiento o su segundo apellido como contraseña. Cualquier contraseña puede ser "robada" asi que, al menos, vamos a intentar que además no la puedan averiguar.
Para no tener que inventarme las contraseñas, que al final todas se parecen demasiado, suelo usar generadores. Hay muchos; de los online los que mas me gustan son estos dos:

https://strongpasswordgenerator.com/
https://www.random.org/passwords/

Para cambiar la contraseña de una cuenta de usuario en Linux usa el siguiente comando:

passwd

Si quieres cambiar la contraseña de otro usuario pon:

passwd otro-usuario

Desactivar el login local de root y configurar el sudo

La cuenta de root tiene acceso a todo, un mal uso y se puede liar parda. Por eso cuanto menos se utilice mejor. En algunas distribuciones como Ubuntu esto ya viene hecho por defecto.

Primero, configurar el sudo para permitir que una cuenta normal pueda ejecutar comandos solo permitidos a root. Eso se se hace con el comando visudo. La primera vez que uses este comando tendrás que escoger un editor de texto, en mi caso suelo usar Nano. Escribe lo siguiente para dar acceso completo:

usuario ALL=(ALL:ALL) ALL

Si quieres configurar con más detalle el acceso al sudo de una cuenta de usuario o informarte de todas las posibilidades de visudo echa un ojo a la guía que se han currado los de Digital Ocean.

Ya tienes una cuenta que puedes usar para "romper cosas". Yo recomiendo tener dos, una para usar y otra por si las moscas.

Segundo, ya no necesitas usar la cuenta root para nada. Si desactivas el que se pueda hacer login en local con ella ganarás en seguridad. Esto también viene hecho por defecto en algunas distribuciones como Ubuntu. Bye, bye root:

sudo passwd -l root

Si hiciese falta reactivar esa cuenta de nuevo:

sudo -i
sudo passwd root

Ahora que ya no se puede iniciar sesión con root no está de más que le indiques al SSH que no admita peticiones de inicio remotas con esas cuenta. Edita el archivo de configuración del daemon SSH que suele estar en /etc/ssh/sshd_config y cambia la linea que pone PermitRootLogin no por PermitRootLogin yes

Proteger el login con un sistema de llave publica/privada

Cada vez que inicias sesión en tu servidor la contraseña viaja por ahí. Y aunque usando SSH ésta va encriptada no quita de que alguien pudiera pillarla. Además siempre cabe la posiblidad de que el equipo que uses como cliente este siendo "vigilado" y se quede guardada por ahí la contraseña.

Se puede evitar esto usando un sistema de clave publica/privada. La explicación sencilla de esto es que se crea una "llave" de autenticación para sustituir la contraseña. Esta llave se parte en dos trozos. La pública se queda en el servidor y la privada se coloca en los clientes. Cuando un cliente quiera conectarse al servidor no tiene que teclear una contraseña; lo que hace es presentarle la llave privada, el servidor validará que sea correcta y le dará acceso. Es importante mantener las llaves privadas a buen recaudo. Si caen en malas manos tendran acceso a tu servidor.

Al tema. Lo primero es crear las dos llaves. Inicias sesión con el usuario correspondiente y ejecutas:

ssh-keygen

Si guardas los dos archivos en el directorio .ssh del HOME del usuario mejor, por comodidad para buscarlos luego mas que nada.

Veras que se generan dos archivos, uno de ellos con la extensión .pub que vamos a incorporar al fichero authorized_keys. Luego aseguramos el directorio .ssh dando los permisos adecuados.

cat fichero-llave.pub >> .ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

El servidor está listo. Vamos a por el cliente. Hay que descargarse la llave privada. Si usas Linux o Mac lo más rápido es usar el comando scp y desde Windows puedes descargar la llave via SFTP, por ejemplo.

scp usuario@host:/home/usuario/.ssh/fichero ./

Ya con la llave en tu equipo, para iniciar sesión esta es la sintaxis del comando ssh:

ssh -i fichero-llave-privada usuario@host

Desde Windows lo normal es que uses Putty. Guardas una sesión con los datos de acceso de tu servidor y luego en la sección SSH/Auth puedes especificar tu fichero de llave privada.

Configuración Putty

Y ya. Con esto el servidor ya está un poco más seguro. Lo mejor es hacerlo al principio y no dejarlo, en cuanto coges soltura lo despachas en 5 minutos.