Lista de verificación posterior a la instalación de Linux: configuración inicial del servidor | INTROSERV
EUR
european

EUR

usa

USD

Spanish Es
Ex. VAT Ex. VAT 0%

Lista de verificación posterior a la instalación de Linux: configuración inicial del servidor

Nivel: Principiante / Intermedio
Tiempo estimado: ~40 minutos
Objetivo: Completar la configuración inicial esencial de un servidor VPS Linux: reforzar el acceso SSH, crear un usuario con privilegios sudo, configurar un cortafuegos, habilitar actualizaciones de seguridad automáticas y programar tareas básicas de mantenimiento con cron.

Introducción

Los primeros 30 minutos tras aprovisionar un VPS son los más importantes. Un servidor Linux recién instalado está completamente expuesto: el inicio de sesión como root por SSH suele estar habilitado, no hay reglas de cortafuegos configuradas y los paquetes ya están desactualizados. Esta lista de verificación posterior a la instalación de Linux cubre todos los pasos relevantes para preparar un entorno listo para producción o de desarrollo: desde crear un usuario sudo y configurar la autenticación mediante clave SSH, hasta habilitar UFW y programar actualizaciones de seguridad automáticas. Seguir esta guía una vez te protege de los vectores de ataque más comunes antes de desplegar cualquier otra cosa sobre el servidor.

Esta guía cubre instancias VPS de Ubuntu, Debian y AlmaLinux (compatible con RHEL).

Requisitos previos

Antes de comenzar, asegúrate de cumplir las siguientes condiciones:

  • Sistema operativo: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12/13 o AlmaLinux 8/9/10
  • Acceso: acceso SSH como root al servidor (contraseña o clave; lo reforzarás a lo largo de esta guía)
  • Equipo local: cliente SSH disponible (ssh en Linux/macOS, PuTTY o Windows Terminal en Windows)
  • Conocimientos necesarios: uso básico de la línea de comandos de Linux: navegar por directorios, editar archivos con nano
  • Tiempo estimado: ~40 minutos para una primera ejecución limpia

Info

Esta guía se ha probado en Ubuntu 24.04 LTS, Debian 12/13 y AlmaLinux 9/10. Los pasos son idénticos salvo que se indique lo contrario.

Paso 1: Configurar el nombre de host del servidor

Un nombre de host adecuado facilita la lectura de los registros y evita confusiones al gestionar varios servidores.

Primero, actualiza /etc/hosts para que el sistema pueda resolver localmente su nuevo nombre de host. Abre el archivo:

sudo nano /etc/hosts

Añade o actualiza la línea correspondiente a 127.0.1.1 (o 127.0.0.1 si 127.0.1.1 no existe) para que coincida con tu nuevo nombre de host. Por ejemplo, si vas a usar web-01:

127.0.1.1 web-01

Guarda y sal (Ctrl+O, Enter, Ctrl+X).

A continuación, configura el nombre de host de forma global con hostnamectl:

sudo hostnamectl set-hostname <YOUR_HOSTNAME>

Verifica que se haya aplicado:

hostnamectl

Resultado esperado:

Static hostname: web-01 Icon name: computer-vm Chassis: vm Machine ID: a1b2c3d4e5f6... Boot ID: ... Operating System: Ubuntu 24.04.1 LTS Kernel: Linux 6.8.0-31-generic Architecture: x86-64

Tip

Muchos servicios —incluidos Postfix (correo) y herramientas de certificados SSL como Certbot— dependen de que el nombre de host se pueda resolver localmente. Actualizar /etc/hosts antes de ejecutar hostnamectl evita fallos de resolución difíciles de detectar.

Paso 2: Actualizar todos los paquetes

Ejecuta de inmediato una actualización completa del sistema. Los paquetes que vienen con una imagen de VPS recién creada casi siempre están desactualizados.

Ubuntu/Debian (APT):

sudo apt update && sudo apt upgrade -y

AlmaLinux/RHEL (DNF):

sudo dnf update -y

Cuando finalice la actualización, comprueba si es necesario reiniciar.

Debian/Ubuntu:

cat /var/run/reboot-required 2>/dev/null && echo "Reboot required" || echo "No reboot needed"

AlmaLinux/RHEL:

sudo dnf install -y dnf-utils needs-restarting -r

Si es necesario reiniciar, hazlo ahora antes de continuar: algunas actualizaciones del kernel y de las bibliotecas solo surten efecto tras un reinicio:

sudo reboot

Warning

Si omites el reinicio cuando es necesario, el kernel en ejecución y algunas bibliotecas permanecerán en la versión anterior. Esto puede dejar vulnerabilidades conocidas sin parchear incluso después de la actualización.

Paso 3: Crear un usuario sudo

Iniciar sesión como root para el trabajo diario no es seguro y es una mala práctica. Crea un usuario normal y concédele privilegios sudo.

3.1 Añadir el usuario

sudo adduser <YOUR_USERNAME>

En Ubuntu/Debian, el comando te pedirá que establezcas una contraseña y rellenes campos de contacto opcionales. Introduce la contraseña y omite el resto pulsando Enter.

En AlmaLinux/RHEL, adduser es un enlace simbólico a useradd y se ejecuta de forma no interactiva sin solicitar contraseña, dejando la cuenta bloqueada. Debes establecer la contraseña manualmente:

sudo passwd <YOUR_USERNAME>

3.2 Conceder privilegios sudo

Ubuntu/Debian: añade el usuario al grupo sudo:

sudo usermod -aG sudo <YOUR_USERNAME>

AlmaLinux/RHEL: añade el usuario al grupo wheel:

sudo usermod -aG wheel <YOUR_USERNAME>

3.3 Verificar el acceso

Cambia al nuevo usuario y prueba sudo:

su - <YOUR_USERNAME> sudo whoami

Resultado esperado:

root

Si ves root, el usuario tiene privilegios sudo funcionando correctamente. Ahora puedes cerrar la sesión de root:

exit

Info

En AlmaLinux, la pertenencia al grupo wheel se define en /etc/sudoers mediante la línea %wheel ALL=(ALL) ALL, habilitada por defecto. En Ubuntu/Debian, el grupo sudo cumple la misma función.

Paso 4: Configurar la autenticación mediante clave SSH

El SSH basado en contraseña es vulnerable a ataques de fuerza bruta. La autenticación mediante clave SSH sustituye la contraseña por un par de claves criptográficas, mucho más difícil de atacar. Esta es una de las prácticas recomendadas más importantes que puedes aplicar en la configuración de SSH.

4.1 Generar un par de claves SSH (en tu equipo local)

Si aún no tienes un par de claves SSH, genera uno en tu equipo local (no en el servidor):

ssh-keygen -t ed25519 -C "<YOUR_USERNAME>@<YOUR_HOSTNAME>"

Acepta la ubicación predeterminada del archivo. Establece una passphrase cuando se te solicite: esto protege la clave si tu equipo local llega a verse comprometido.

Info

ed25519 es el tipo de clave preferido. Es más rápido, más corto y más seguro que el antiguo rsa (2048 bits). Si tu cliente SSH no lo admite, usa en su lugar ssh-keygen -t rsa -b 4096.

4.2 Copiar la clave pública al servidor

Desde tu equipo local, copia la clave a la cuenta del nuevo usuario:

ssh-copy-id <YOUR_USERNAME>@<YOUR_SERVER_IP>

Si ssh-copy-id no está disponible (por ejemplo, en Windows), copia manualmente el contenido de ~/.ssh/id_ed25519.pub y añádelo al final de ~/.ssh/authorized_keys en el servidor.

4.3 Probar el inicio de sesión mediante clave

Abre una nueva ventana de terminal (no cierres todavía la sesión actual) y prueba el inicio de sesión:

ssh <YOUR_USERNAME>@<YOUR_SERVER_IP>

Deberías iniciar sesión sin que se te pida contraseña (solo la passphrase de la clave, si has establecido una).

Warning

No cierres tu sesión SSH actual hasta que hayas confirmado que el inicio de sesión mediante clave funciona. Si algo está mal configurado, seguirás teniendo la sesión actual para solucionarlo.

Paso 5: Reforzar la configuración de SSH y desactivar el inicio de sesión como root

Una vez confirmado el inicio de sesión mediante clave (Paso 4), bloquea el demonio SSH. Desactivar el inicio de sesión como root y la autenticación por contraseña a través de SSH es uno de los pasos más eficaces en cualquier checklist de refuerzo de seguridad de un servidor Linux.

En las tres distribuciones, /etc/ssh/sshd_config tiene una línea Include /etc/ssh/sshd_config.d/*.conf cerca del principio del archivo, y SSH aplica el primer valor que encuentra para cada opción. Los archivos drop-in del proveedor ya están presentes y anulan cualquier cosa que añadas después en el archivo principal:

  • Ubuntu 24.04: 50-cloud-init.conf establece PasswordAuthentication yes
  • AlmaLinux: 50-redhat.conf establece X11Forwarding yes

Por ese motivo, editar el sshd_config principal no es fiable. En su lugar, crea un archivo drop-in de refuerzo con un número bajo (00-) para que se lea primero y anule los archivos del proveedor. El mismo archivo funciona en las tres distribuciones.

Crea el archivo drop-in:

sudo tee /etc/ssh/sshd_config.d/00-hardening.conf > /dev/null <<'EOF' PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys X11Forwarding no EOF

El prefijo 00- garantiza que este archivo se analice antes que los drop-in del proveedor, como 50-cloud-init.conf y 50-redhat.conf. Dado que SSH aplica el principio de que la primera coincidencia prevalece, no necesitas editar esos archivos.

Valida la sintaxis de la configuración antes de reiniciar el servicio:

sudo sshd -t

Si el comando no devuelve ninguna salida, la sintaxis es válida. Ahora verifica los ajustes efectivos que realmente usará el demonio:

sudo sshd -T | grep -iE "permitrootlogin|passwordauthentication|x11forwarding"

Resultado esperado:

permitrootlogin no passwordauthentication no x11forwarding no

Warning

Confirma que los tres valores sean correctos antes de reiniciar. Si passwordauthentication sigue mostrando yes, un drop-in del proveedor está anulando tu archivo: comprueba que 00-hardening.conf se haya guardado correctamente. No cierres tu sesión SSH actual hasta haber verificado que el inicio de sesión mediante clave sigue funcionando.

Reinicia el demonio SSH para aplicar los cambios.

Ubuntu 24.04 (activación por socket):

sudo systemctl restart ssh.socket

Debian y versiones anteriores de Ubuntu:

sudo systemctl restart ssh

AlmaLinux/RHEL:

sudo systemctl restart sshd

Verifica que el servicio esté en ejecución (usa sshd en AlmaLinux, ssh.socket en Ubuntu 24.04):

sudo systemctl status ssh

Deberías ver Active: active (running) (o active (listening) si SSH se activa mediante socket).

Ahora confirma que el inicio de sesión como root está bloqueado. Desde tu equipo local:

ssh root@<YOUR_SERVER_IP>

Resultado esperado: la conexión se rechaza con Permission denied (publickey). El inicio de sesión como root por SSH ya está desactivado.

Paso 6: Configurar el cortafuegos (UFW)

UFW (Uncomplicated Firewall) es la herramienta de cortafuegos estándar en Ubuntu y Debian. En AlmaLinux, firewalld es la opción predeterminada, pero UFW también se puede instalar allí. Este paso cubre ambos enfoques.

Warning

Antes de habilitar cualquier cortafuegos, asegúrate de que SSH (puerto 22) esté explícitamente permitido. Si te equivocas en esto, quedarás bloqueado fuera del servidor.

6.1 UFW (Ubuntu/Debian)

En Debian (especialmente en Debian 13), es posible que ufw no esté instalado por defecto. Instálalo primero:

sudo apt update && sudo apt install -y ufw

Comprueba el estado actual:

sudo ufw status

Permite SSH antes de habilitar el cortafuegos:

sudo ufw allow ssh

Permite HTTP y HTTPS si vas a ejecutar un servidor web:

sudo ufw allow http sudo ufw allow https

Habilita el cortafuegos:

sudo ufw enable

Verifica las reglas activas:

sudo ufw status verbose

Resultado esperado:

Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere 80/tcp ALLOW IN Anywhere 443/tcp ALLOW IN Anywhere

6.2 Firewalld (AlmaLinux/RHEL)

Habilita e inicia firewalld:

sudo systemctl enable --now firewalld

Permite SSH, HTTP y HTTPS:

sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload

Verifica:

sudo firewall-cmd --list-all

Info

Configurar el cortafuegos en Linux significa elegir la herramienta adecuada para tu distribución y no ejecutar dos demonios de cortafuegos a la vez. Si instalaste UFW en AlmaLinux, desactiva primero firewalld con sudo systemctl disable --now firewalld.

Paso 7: Sincronizar el reloj del sistema (NTP)

Una hora precisa es necesaria para los protocolos de seguridad (validación SSL/TLS, Kerberos), marcas de tiempo correctas en los registros y tareas programadas. Un reloj desincronizado puede provocar errores de certificado SSL, fallos de autenticación y entradas de registro confusas.

Comprueba el estado actual de sincronización:

timedatectl status

Resultado esperado:

System clock synchronized: yes NTP service: active

Info

En Ubuntu 24.04 y Debian 13, NTP suele estar activo mediante systemd-timesyncd. En AlmaLinux 10, normalmente está activo mediante chrony. Si timedatectl muestra System clock synchronized: yes y NTP service: active, no necesitas cambiar nada.

Si el servicio NTP aparece como inactivo o n/a, instala y habilita chrony, el demonio NTP recomendado para servidores en producción:

Ubuntu/Debian:

sudo apt install chrony -y sudo systemctl enable --now chrony

Tip

En Debian 13, instalar chrony puede hacer que `timedatectl` muestre `NTP service: n/a`. En su lugar, usa `chronyc tracking` para verificarlo.

AlmaLinux/RHEL:

sudo dnf install chrony -y sudo systemctl enable --now chronyd

Espera entre 30 y 60 segundos tras iniciar el servicio y, después, verifica que la sincronización esté activa:

chronyc tracking

Busca Leap status: Normal. Eso confirma que el reloj del sistema está sincronizado y que NTP funciona correctamente.

Tip

Si gestionas servidores en varias zonas horarias, configura la zona horaria del sistema antes de configurar NTP, de modo que las marcas de tiempo de los registros queden en la hora local esperada. Ejemplo: sudo timedatectl set-timezone Europe/Warsaw.

Paso 8: Habilitar actualizaciones de seguridad automáticas

Las actualizaciones manuales funcionan, pero dependen de que te acuerdes de hacerlas. Las actualizaciones de seguridad automáticas son una red de seguridad, especialmente críticas para instancias VPS sin supervisión. Así es como se configuran las actualizaciones de seguridad automáticas en Linux sin afectar a la estabilidad.

8.1 Ubuntu/Debian - unattended-upgrades

Instala el paquete:

sudo apt install unattended-upgrades -y

Habilítalo y configúralo:

sudo dpkg-reconfigure --priority=low unattended-upgrades

Warning

Es fundamental seleccionar Yes cuando se te solicite. Si seleccionas No, el archivo de configuración necesario (/etc/apt/apt.conf.d/20auto-upgrades) no se creará, y las comprobaciones posteriores fallarán con un error de "No such file or directory". Esto habilita únicamente la instalación automática de actualizaciones de seguridad; las actualizaciones de funciones habituales siguen siendo manuales.

Verifica la configuración:

cat /etc/apt/apt.conf.d/20auto-upgrades

Resultado esperado:

APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";

Para probar sin aplicar cambios:

sudo unattended-upgrade --dry-run --debug

8.2 AlmaLinux/RHEL - dnf-automatic

Instala:

sudo dnf install dnf-automatic -y

Abre el archivo de configuración y establece el tipo de actualización solo en seguridad. Primero, haz una copia de seguridad:

sudo cp /etc/dnf/automatic.conf /etc/dnf/automatic.conf.bak sudo nano /etc/dnf/automatic.conf

Busca y establece:

apply_updates = yes upgrade_type = security

Habilita e inicia el temporizador:

sudo systemctl enable --now dnf-automatic.timer

Verifica:

sudo systemctl status dnf-automatic.timer

Paso 9: Programar mantenimiento básico con Cron

Cron gestiona tareas programadas: cosas que deben ocurrir regularmente sin intervención manual. Una tarea cron sencilla para operaciones como la limpieza de registros o la comprobación de la renovación de certificados es una práctica habitual en cualquier servidor gestionado.

Preparación para AlmaLinux/RHEL:

En un sistema AlmaLinux 10 limpio, es posible que nano no esté instalado, y crontab -e abrirá vi. Para usar nano en su lugar, ejecuta esta única línea para hacerlo correctamente en secuencia y asegurar que la variable de entorno se mantenga:

sudo dnf install nano -y && export EDITOR=nano && crontab -e

En otros sistemas (como Ubuntu/Debian), simplemente abre el crontab del usuario actual:

crontab -e

En la primera ejecución (en Ubuntu/Debian), se te pedirá que elijas un editor. Selecciona nano (opción 1).

Ejemplos comunes de tareas cron

Ejecutar una tarea cada noche a las 2:00 AM:

0 2 * * * /usr/local/bin/my-maintenance-script.sh >> /var/log/maintenance.log 2>&1

Renovar certificados SSL semanalmente (para usuarios de Certbot):

0 3 * * 0 certbot renew --quiet >> /var/log/certbot-renew.log 2>&1

Borrar archivos temporales mensualmente:

0 4 1 * * find /tmp -type f -atime +30 -delete

Info

Cron utiliza el formato minuto hora día-del-mes mes día-de-la-semana comando. La parte >> /var/log/task.log 2>&1 redirige tanto stdout como stderr a un archivo de registro, para que puedas revisar lo ocurrido.

Verifica que tus tareas cron estén registradas:

crontab -l

Deberías ver las entradas que añadiste. Cron lee el archivo automáticamente; no es necesario recargar nada. Para comprobar si el servicio cron está en ejecución, usa:

Ubuntu/Debian:

sudo systemctl status cron

AlmaLinux/RHEL:

sudo systemctl status crond

Verificación

Repasa esta lista de comprobación para confirmar que todo se aplicó correctamente:

Comprueba el nombre de host:

hostnamectl | grep hostname

Confirma que el inicio de sesión SSH como root y la autenticación por contraseña estén desactivados (esto comprueba la configuración activa en tiempo de ejecución):

sudo sshd -T | grep -iE "permitrootlogin|passwordauthentication"

Esperado:

permitrootlogin no passwordauthentication no

Confirma que el servicio SSH esté en ejecución:

# Para Ubuntu 24.04: sudo systemctl status ssh.socket # Para Debian / Ubuntu antiguo: sudo systemctl status ssh # Para AlmaLinux: sudo systemctl status sshd

Comprueba el estado del cortafuegos (Ubuntu/Debian):

sudo ufw status verbose

Comprueba la sincronización NTP:

timedatectl status | grep -E "synchronized|NTP"

Esperado:

System clock synchronized: yes NTP service: active

Comprueba las actualizaciones automáticas (Ubuntu/Debian):

cat /etc/apt/apt.conf.d/20auto-upgrades

Lista las tareas cron activas:

crontab -l

Reversión

Para deshacer pasos concretos si algo salió mal:

Volver a habilitar el inicio de sesión SSH como root (si te quedaste bloqueado fuera y estás recuperando el acceso mediante consola):

# Reactivar temporalmente el inicio de sesión root/contraseña para recuperación sudo rm /etc/ssh/sshd_config.d/00-hardening.conf sudo sshd -t # Reinicia SSH (usa la variante para tu sistema): sudo systemctl restart ssh.socket # Ubuntu 24.04 sudo systemctl restart ssh # Debian / Ubuntu antiguo sudo systemctl restart sshd # AlmaLinux/RHEL

Desactivar UFW:

sudo ufw disable

Eliminar unattended-upgrades (Ubuntu/Debian):

sudo apt remove unattended-upgrades -y

Eliminar dnf-automatic (AlmaLinux):

sudo systemctl disable --now dnf-automatic.timer sudo dnf remove dnf-automatic -y

Eliminar una tarea cron:

crontab -e # Elimina la línea correspondiente, guarda y sal

Warning

Volver a habilitar el inicio de sesión como root o la autenticación por contraseña anula la mayor parte del refuerzo de seguridad realizado en esta guía. Hazlo solo temporalmente para recuperar el acceso y, después, vuelve a bloquearlo.

Conclusión

Con esto se cubre la lista de verificación completa posterior a la instalación de Linux. Ahora tienes un servidor con un nombre de host adecuado, paquetes totalmente actualizados, un usuario sudo distinto de root, autenticación mediante clave SSH configurada, inicio de sesión como root desactivado, un cortafuegos configurado, NTP sincronizado, actualizaciones de seguridad automáticas en funcionamiento y una programación de tareas cron lista para ampliar. Esta es la configuración base de un servidor Linux tras la instalación que todo VPS debería tener antes de desplegar cualquier otra cosa sobre él.

A partir de aquí, los siguientes pasos lógicos dependen del propósito del servidor:

  • Servidor web: instala Nginx o Apache, configura un host virtual y configura SSL con Certbot
  • Base de datos: instala y refuerza la seguridad de MySQL/MariaDB o PostgreSQL
  • Monitorización: configura la agregación de registros (por ejemplo, logrotate) o un agente de monitorización ligero
  • Control de acceso: revisa la configuración de sudoers y añade miembros del equipo siguiendo el mismo patrón del Paso 3

La lista de verificación de configuración inicial de un servidor Linux no termina aquí: evoluciona a medida que crece el rol del servidor. Pero esta base es el punto de partida innegociable.

Versión del documento: 1.0
Última actualización: mayo de 2026
Responsable: Equipo de Documentación Técnica

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA