Configurando mi VPS

Por fin me he decidido a utilizar servidores privados virtuales para alojar algunos sitios web, después de muchas pruebas, mucha lectura, muchos errores y más lectura voy a contar en unos cuantos artículos los pasos que he ido dando para configurar mis sitios web (en mi caso con WordPress) en un VPS

La idea es instalar el menor software posible para aprovechar al máximo las capacidades y potencia del VPS y poder alojar el mayor número de servicios y sitios web

Utilizo servidores de OVH y Contabo, los más económicos, y los resultados han sido mejores de lo esperado: sitios más rápidos por un precio muy inferior a cualquier otra solución de alojamiento

Como software he optado por una pila LEMP: Sistema operativo Ubuntu 20.04, servidor de páginas web Nginx, servidor de bases de datos MySQL y PHP para conectar ambos

No utilizo phpMyAdmin ni otra solución equivalente para gestionar MySQL, de esta manera ahorro espacio y potencia en el VPS y de paso aumento un poco la seguridad

Uso Rclone para configurar copias de seguridad automáticas en una cuenta de Google Drive

En cuanto al correo electrónico por razones de índole técnica y de seguridad he decidido utilizar servicios de terceros (los MX Plan de OVH son muy económicos, por un pago único inferior a 10 € podemos disponer de cinco cuentas de correo, con 5 Gb de capacidad cada una, durante tiempo indefinido si mantenemos nuestro dominio rgistrado en OVH)

Para gestionar la Zona DNS he optado por la cuenta gratuita de CloudFlare, aunque tengamos los dominios registrados en otros proveedores usar los DNS de CloudFlare nos permite aumentar la seguridad de nuestros sitios y agilizar cualquier cambio en la configuración gracias a su velocidad de propagación

Empezamos configurando nuestro VPS para aumentar la seguridad antes de comenzar a instalar otras cosas

Iniciamos sesión en nuestro VPS con el usuario y contraseña suministrados por el proveedor

Al contratar nuestro VPS habremos recibido, normalmente por correo electrónico, los datos de acceso necesarios: dirección IP, usuario_inicial y contraseña

Algunos proveedores (Contabo) mantienen el usuario root activo y deberemos iniciar sesión en el VPS como root, otros proveedores (OVH) desactivan el acceso como root y nos proporcionan un usuario diferente. En cualquier caso para aumentar la seguridad lo primero que vamos a hacer será crear nuestro propio usuario

Nos conectamos vía SSH utilizando el terminal de Linux. Si somos usuarios de Windows 10 lo mejor es instalar la aplicación ‘Windows Terminal o PuTTY’, yo normalmente prefiero la primera

ssh usuario_inicial@XX.XX.XX.XX -p XXX

Normalmente el puerto será el nº 22 que es el usado por defecto para este tipo de conexión y no es necesario indicarlo

El servidor nos perdirá la contraseña y ya estamos dentro

Creamos un nuevo usuario

Por razones de seguridad no es buena idea iniciar sesión en el VPS con el usuario root ni con usuarios que nuestro proveedor de VPS haya creado por defecto, usaremos siempre un nuevo usuario creado por nosotros mismos

Vamos a crear un nuevo usuario con un grupo y carpeta de inicio propios, lo configuramos para que utilice el shell que más nos guste (en mi caso bash) y finalmente le añadimos una contraseña:

  • groupadd nuevousuario
  • useradd -m -s»/bin/bash» nuevousuario -g nuevousuario
  • passwd nuevousuario

Si nos equivocamos y queremos eliminar un usuario, su grupo y todos los archivos de su carpeta de inicio: userdel -r nuevousuario

Añadimos el nuevo usuario al grupo ‘sudo’

Para que nuestro nuevo usuario pueda adquirir privilegios de administrador tenemos que incluirlo en el grupo sudo

Existen varias maneras de realizar este ajuste, la más rápida:

usermod -aG sudo nuevousuario

También lo podemos realizar manualmente editando el archivo /etc/sudoers (en estos artículos siempre usaré el editor nano incluido por defecto en Ubuntu 20.04):

nano /etc/sudoers

Añadiendo el nuevo usuario en el apartado # User privilege specification debajo de root

nuevousuario ALL=(ALL:ALL) ALL

Si deseamos que el sistema no nos pida la contraseña periódicamente al usar el comando sudo podemos poner (pero no es recomendable por razones de seguridad):

nuevousuario ALL=(ALL) NOPASSWD: ALL

Y salimos del editor guardando los cambios: Ctrl + X (Yes)

Deshabilitamos el acceso del root vía SSH

Antes de continuar debemos asegurarnos de que ya podemos iniciar sesión con el nuevo usuario, sin salir de la sesión iniciada como root abrimos una nueva ventana de terminal y lo comprobamos

No olvidemos que ahora será preciso anteponer el comando sudo cuando queramos ejecutar comandos con derechos de administrador, nos aseguramos también de que esto funciona

Podemos escribir sudo su y el sistema deberá solicitar la contraseña y cambiar al usuario root, para regresar a nuestro usuario tecleamos exit

Si todo es correcto podemos cerrar la  sesión actual e iniciar otra con el nuevo usuario

Si nuestro proveedor de VPS no ha bloqueado por defecto el inicio de sesión con el usuario root vamos a hacerlo ahora.

Para ello editamos el archivo de configuración del servicio ssh:

sudo nano /etc/ssh/sshd_config

Usando las flechas llegamos a la zona de “PermitRootLogin” y cambiamos el «yes» por un “no

Y salimos del editor guardando los cambios: Ctrl + X (Yes)

Reiniciamos el servicio ssh para que los cambios se apliquen:

sudo service ssh restart

Eliminamos el usuario proporcionado por nuestro proveedor del VPS

Si nuestro proveedor nos proporcionó inicialmente un usuario diferente a root para acceder al VPS, como ya hemos creado un nuevo usuario que solamemnte nosotros conocemos vamos a eliminarlo

userdel -r usuario_inicial

Cambiamos el puerto por defecto del servicio SSH

El puerto utilizado por defecto por el servicio ssh es el nº 22, vamos a cambiarlo para dificultar un poco los intentos de acceso no deseados, para ello volvemos a editar el archivo de configuración:

sudo nano /etc/ssh/sshd_config

Tenemos que localizar la línea que pone “Port 22” y sustituirlo por otro valor (asegurándonos de que el nuevo puerto no esté en uso)

Y salimos del editor guardando los cambios: Ctrl + X (Yes)

Reiniciamos el servicio ssh para aplicar el cambio

sudo service ssh restart

Antes de continuar debemos asegurarnos de que podemos iniciar sesión utilizando el nuevo puerto, sin salir de la sesión iniciada actualmente abrimos una nueva ventana de terminal y lo comprobamos:

ssh nuevousuario@XX.XX.XX.XX -p 2245

Configuramos un firewall básico

Ubuntu tiene instalado el firewall UFW por defecto, normalmente estará deshabilitado, lo podemos comprobar tecleando:

sudo ufw status verbose

UFW viene configurado inicialmente para denegar todas las conexiones entrantes y permitir todas las conexiones salientes. Esto significa que si lo habilitamos quien intente establecer conexión con el servidor no podrá hacerlo, mientras que cualquier aplicación dentro del servidor podrá llegar al mundo exterior

Esto significa que antes de activarlo debemos crear una regla que nos permita poder seguir conectándonos al servidor mediante SSH:

sudo ufw allow 2245/tcp comment ‘Puerto acceso ssh modificado’

2245: Nuestro puerto de conexión SSH, era el 22 pero por razones de seguridad lo hemos modificado en el paso anterior

Ya podemos habilitar el firewall:

sudo ufw enable

Nos avisará de que la conexión actual puede interrumpirse

Comprobamos que todo es correcto

sudo ufw status verbose

Si aparece nuestro puerto 2245 de conexión SSH como permitido abrimos una nueva ventana del terminal sin cerrar la sesión de conexión actual y verificamos que sigue siendo posible iniciar sesión sin problemas, si todo funciona podemos continuar

Configuramos un bloqueador de acceso

sudo apt install -y fail2ban && sudo systemctl start fail2ban && sudo systemctl enable fail2ban && sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

sudo apt install fail2ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Revisamos la configuración recomendada

sudo nano /etc/fail2ban/jail.local

# "bantime" is the number of seconds that a host is banned.*
bantime = 1hr

# A host is banned if it has generated "maxretry" during the last "findtime"*
findtime = 10m

# "maxretry" is the number of failures before a host get banned.*
maxretry = 3

[sshd]

# normal (default), ddos, extra or aggressive (combines all).* 
mode = aggressive 
port = ssh,2442 
logpath = %(sshd_log)s 
backend = %(sshd_backend)s 
enabled = true 
maxretry = 3 
findtime = 1d 
bantime = 4w 
ignoreip = 127.0.0.1/8 23.34.45.56

Guardamos el archivo y reiniciamos Fail2ban para que los cambios surtan efecto

sudo systemctl restart fail2ban

Desactivamos acceso por contraseña y usamos keys

Un paso más en la seguridad es utilizar claves público-privadas en vez de las contraseñas tradicionales para conectarnos a nuestro servidor VPS, incluso podemos añadir una contraseña a la key para aumentar la seguridad

2 comentarios en «Configurando mi VPS»

    • Lo mismo te digo, sigue contando en tu blog cosas, especialmente de la cuarentena que nos ha tocado vivir. Dentro de muchos años lo que escribamos ahora puede que sea interesante para los que no lo hayan vivido.

      Responder

Deja un comentario