Configuración inicial de Ubuntu Server 16.04

Introducción

Cuando creamos un nuevo servidor Ubuntu 16.04, hay algunas cosas que debemos hacer lo más pronto posible como parte de su configuración inicial. Esto incrementará la seguridad y usabilidad de tu servidor y te dará una base sólida para las acciones subsequentes que vayas a tomar.

Paso 1 - Root Login

Para poder loguearte a tu servidor vas a necesitar saber su IP pública. También se requiere de un password (en algunas ocasiones) o si le indicaste una llave SSH podrás conectarte a tu servidor haciendo uso de ella.

Loguearte a tu servidor es tan sencillo como abrir una terminal en tu computadora y te teclear el siguiente comando (sustituye el texto indicado como tu_ip_publica con la IP de tu servidor)

ssh root@tu_ip_publica

Es posible que aparezca un mensaje preguntando si realmente deseas conectarte a ese servidor, en este caso deberás indicar que sí para poder finalizar el proceso de login por primera vez. En caso de que no hayas especificado una llave SSH en tu servidor te aparecerá un prompt donde deberás indicar la contraseña de tu usuario root.

Paso 2 - Crear un usuario nuevo

Una vez que te hayas podido conectar con el usuario root, estarás preparado para crear la cuenta de tu nuevo usuario. Como buena práctica, éste usuario será el que vamos a utilizar a partir de ahora ya que no es conveniente utilizar el usuario root a menos que sea estrictamente necesario.

Para crear tu usuario simplemente ejecuta el siguiente comando. Recuerda cambiar eddie por el nombre de usuario que desees crear.

adduser eddie

Una vez que ejecutes ese comando se te van a hacer algunas preguntas, iniciando por la contraseña de la cuenta nueva. Es recomendable utilizar un password lo suficientemente seguro (mayúsculas, minúsculas, numeros y/o síbmolos) para asegurar tu cuenta. El resto de datos son opcionales y puedes dejarlos en blanco si así lo deseas, en ese caso solo debes teclear ENTER para omitir los campos deseados.

Paso 3 - Privilegios de root

Ahora, ya tenemos una cuenta de usuario con privilegios regulares. Sin embargo, en muchas ocasiones vamos a necesitar hacer tareas administrativas.

Para evitar situaciones en las que tengas que estarte desconectando del usuario normal y volvernos a conectar con la cuenta root, puedes configurar lo que es conocido como un "super usuario" o mejor dicho, una cuenta normal con privilegios de root. Esto permitirá que un usuario normal pueda ejecutar comandos con permisos administrativos poniendo la palabra sudo antes de cada comando.

Como root, ejecuta este comando para añadir a tu nuevo usuario al grupo de sudo (sustituye el nombre del usuario por el que hayas creado):

usermod -aG sudo eddie

Ahora tu usuario podrá ejecutar comandos con privilegios de super usuario.

Si deseas incremenentar la seguridad de tu servidor, por favor continúa con el resto del tutorial.

Paso 4 - Agregar autenticación por llave pública (Recomendado)

El siguiente paso es asegurar tu servidor por medio de autenticación por llave pública para tu usuario nuevo. Configurar esto podrá incrementar la seguridad de tu servidor al requerir una llave privada SSH para poder loguearte.

Generar un par de llaves

Si no tienes actualmente un par de llaves SSH, que consisten en una llave pública y una privada, vas a tener que generar una. Si ya tienes alúna que desees usar puedes saltarte esta parte hasta el paso Copiar la llave pública.

Para generar un nuevo par de llaves, escribe el siguiente domando en la terminal de tu computadora local (no en tu servidor):

ssh-keygen -t rsa -b 4096

Teclea ENTER para aceptar el archivo y ubicación (o indica uno nuevo).

A continuación, deberá aparecerte en pantalla un prompt preguntando si deseas agregar una contraseña para asegurar tus llaves. Esto es opcional y puedes dejar la contraseña en blanco si lo deseas solamente tecleando ENTER.

Nota: Si dejas la contraseña en blanco, podrás loguearte a tu servidor sin tener que indicar una contraseña. Si especificaste una contraseña, vas a necesitar tanto la contraseña como tu llave privada para poderte loguear al servidor. Asegurar tus llaves con una contraseña es más seguro, pero ambos casos tienen sus usos y son más seguros que utilizar un password para loguearte al servidor sin llaves SSH.

El comando anterior va a generar una llave privada, id_rsa, y una llave pública, id_rsa.pub, en el directorio .ssh del home de tu usuario local. Recuerda que la llave privada no debe ser compartida con nadie que quieras que tenga acceso a tu servidor.

Copiar la llave pública

Después de generar tu par de llaves SSH, tendrás que copiar tu llave pública en tu servidor. Existen dos formas de hacer esto.

Opción 1: Usar ssh-copy-id

Si tu computadora local cuenta con el script ssh-copy-id, podrás utilizarlo para copiar tu llave pública, siempre y cuando tengas las credenciales para loguearte.

Ejecuta el script ssh-copy-id especificando el usuario y la IP del servidor al que le quieres instalar la llave, similar al siguiente ejemplo:

ssh-copy-id eddie@tu_ip_pública

Después de indicar tu password, tu llave pública será agregada al archivo .ssh/authorized_keys de tu usuario remoto. Su llave privada correspondiente podrá entonces ser utilizada para loguearte al servidor.

Opción 2: Instalar la llave manualmente

Asumiendo que generaste el par de llaves SSH usando los pasos previamente mencionados, usal el siguiente comando desde tu computadora local (no en el servidor) para mostrar en pantalla tu llave pública (id_rsa.pub):

cat ~/.ssh/id_rsa.pub

Esto deberá mostrar tu llave pública SSH, la cuál deberá verse parecido a esto:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCmqsECd7VeDx8C94mETIh3McDlqIxxHhxcMtR66VKUp5VMDsOuzoa5mYu1YLvtJ4HGxo1WTAd7vclr8Zeg4zfZNW53rDVy0M7OVisjKHFHh9wonGdoHpVY8Bh2tCQ21CNpQOIvUX75l874Zfz3PV5g993RUeZzV0o9mtXtF80sBN9+DNpZS55wMpEYRM3JFZjxxAARk/xNt5nlegCucaY0K4luAlm5YdhRSXTOgPHzqSGzSUaQ8UaJjinQOrayoCvQ0kTFnqPIdQinwQYoLp1UyqkzQ6dJJ0ECFBlBELekhR96M2IBdzQwD5/MkikbYphODgzuhhk73WOfBtKSKzaxb7uHggpHJ0zGw84Jn7jAYKLu1aGxA4XKi5XJJpSjT3gAaCIW0w4I47P2cL85bM2iotN6XQ/E55DcOo7y2UvLHGXE1hooiFWzn7lUB6cxt5TzuPzhRwWDieRh32Yaw5RsMBDYZF9gVF7TpHSMEjiiICm8KYs1Q+kco3U8FXdwFbPIxyEF7YQvzA+mLWQ48LFvXeaCp3U8Gm0rbq+kpR4hgxC7Ryetgn5VtRXKZCyhoXCk9tl79Dt8BEw9jtHiSL+fymhOky1R7WSNbWviPaJvSjrWvJo7BNwcgTUbGOQ6Wm/vOPDP1c0iY+Nu0IepIMUDxfPc8zR1aeVWwbRFTbe41w== user@machine.local

Selecciona con el mouse la llave pública, y cópiala en el portapapeles.

Para habilitar el uso de SSH para autenticarte como el nuevo usuario remoto, debes añadir la llave pública a un archivo especial en el directoirio home de tu usuario.

En el servidor, como usuario root teclea el siguiente comando para cambiarte al nuevo usuario de manera temporal (sustituye por tu nombre de usuario)

su - eddie

Ahora estarás en el directorio home de tu nuevo usuario.

Crea un nuevo directorio llamado .ssh y modifica sus permisos con los siguientes comandos:

mkdir ~/.ssh
chmod 700 ~/.ssh

Ahora abre un archovo en el directorio .ssh llamado authorized_keys con un editor de texto. Usaremos nano para editar este arcihvo:

nano ~/.ssh/authorized_keys

Ahora inserta tu llave pública (que debes tener en el portapapeles) pegando el contenido en el editor.

Después presiona CTRL-X para salir del archivo, luego la letra y para guardar los cambios que hayas hecho, y por último ENTER para confirmar el nombre del archivo.

Ahora restringe los permisos para el archivo authorized_keys con el siguiente comando:

chmod 600 ~/.ssh/authorized_keys

Ahora escribe exit una vez para volver al usuario root:

exit

Ahora tu llave pública ha sido instalada y puedes usar tus llaves SSH para loguearte en tu servidor.

A continuación, veamos como incrementar la seguridad de tu servidor al deshabilitar la autenticación por password.

Paso 5 - Deshabilitar la autenticación por password (Recomendado)

Ahora que tu nuevo usuario puede usar llaves SSH para loguearse, vamos a incrementar la seguridad al deshablitar la autenticación por password. Hacer esto va a restringir el acceso a tu servidor para que puedas autenticarte solamente por SSH utilizando tu llave pública. Esto significa, que la única manera para poderte loguear a tu servidor será si posees la llave privada que corresponda a la llave pública que está instalada en el servidor.

Nota: Solo debes deshabilitar la autenticación por password si has instalado una llave pública para tu usuario como se recomendó en el paso 4. De otra manera, bloquearás todo acceso a tu servidor.

Para deshabilitar la autenticación por password debes seguir estos pasos.
Como usuario root o tu nuevo usuario sudo, abre la configuración del daemon SSH:

sudo nano /etc/ssh/sshd_config

Encuentra la linea que dice PasswordAuthetication, descomentala eliminando el símbolo de # que la precede y cambia su valor a "no". Debe quedar como se muestra a continuación:

PasswordAutentication no

Aquí hay otras dos opciones más que son importantes para la autenticación por llaves solamente. Si no has modificado nada en este archivo con anterioridad es probable que no tengas que cambiar nada de la configuración, aún así verifica que existan las opciones mencionadas a continuación:

PubkeyAuthentication yes
ChallengeResponseAuthentication no

Cuando hayas finalizado de modificar la configuración, guarda y cierra este archivo como lo hiciste anteriormente (CTRL-X, luego presiona y y da ENTER).

Ahora usa el siguiente comando para reiniciar el daemon SSH:

sudo systemctl reload sshd

La autenticación por password ahora está deshabilitada. Tu servidor sólo será accesible por medio de autenticación por llaves SSH.

Paso 6 - Probar el log in

Ahora, antes de que te desconectes de tu servidor, deberías probar la nueva configuración. No vayas a desconectarte hasta que hayas confirmado que puedes loguearte satisfactoriamente por medio de SSH.

En una nueva terminal en tu computadora local, logueate a tu servidor utilizando el nuevo usuario que acabas de crear, esto lo puedes hacer usando el siguente comando (recuerda sustituir tu nombre de usuario):

ssh eddie@tu_ip_publica

Si agregaste tu llave pública como lo descrito en el paso 4 y 5, tu llave privada será usada para autenticarte. De otra manera, te va a pedir el password de tu usuario.

Not sobre la autenticación con llave: Si creaste un par de llaves con una contraseña, se te va a pedir que ingreses esa contraseña. De otra manera, si tus llaves las creaste sin indicar una contraseña, te podrás autenticar en tu servidor automáticamente.

Una vez que se haya verificado la autenticación, estarás logueado a tu servidor con tu nuevo usuario.

Recuerda, si necesitas ejecutar algún comando con privilegios de root, debes teclear "sudo" antes como se muestra"

sudo comando_a_ejecutar

Paso 7 - Configuración básica de firewall

Ubuntu Server 16.04 viene con un firewall perinstalado llamado UFW, en él vamos a permitir el paso de SSH para poder conectarnos al servidor y a bloquear todas las demás conexiónes entrantes, esto con el fin de mejorar la seguridad el servidor.

Si queremos ver las aplicaciones que UFW tiene permitidas por nombre podemos verlas tecleando el siguiente comando:

sudo ufw app list

Veremos que en su resultado se encuentra OpenSSH. Vamos a hacer que este servicio esté disponible en el firewall tecleando el siguiente comando:

sudo ufw allow OpenSSH

Después, solo debemos habilitar el firewall:

sudo ufw enable

Luego tecleamos y y damos ENTER para proceder. Podemos confirmar que las conexiones SSH están habilitadas tecleando:

sudo ufw status

Y veremos algo como lo siguiente

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)