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
Hola:
Espero que por El Rocho no estés muy liado y puedas ir añadiendo entradas para entretenernos leyendo como tú.
Un saludo
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.