¡Hola, amigo! ¡Enhorabuena! Ya tienes tu propio VPS Linux – un pedazo de internet donde eres el dueño absoluto. ¡Genial, verdad? Puedes desplegar un sitio web, configurar una VPN, ejecutar un bot, o incluso un servidor de juegos para tus amigos – las posibilidades solo están limitadas por tu imaginación (y por tu plan de tarifa, claro). Pero con esta libertad llega también la responsabilidad. Tu servidor está conectado a internet 24/7, y créeme, hay muchos que quieren «llamar a la puerta» de un sistema sin protección. No te preocupes, estoy aquí para ayudarte a dar los primeros pasos, pero los más importantes, para fortalecer la defensa de tu nuevo hogar digital. Es como poner un buen cerrojo en la puerta de tu apartamento después de mudarte.
Esta guía es tu kit de inicio para la configuración de la seguridad de tu VPS. No nos adentraremos en los detalles de la criptografía ni construiremos una fortaleza inexpugnable (esos son temas para otras conversaciones), pero sí cerraremos las vulnerabilidades más evidentes por las que suelen entrar los invitados no deseados. Revisaremos los puntos principales: cambiaremos la contraseña predeterminada, crearemos un usuario aparte (¡porque trabajar constantemente como root es mala idea!), configuraremos el inicio de sesión con claves SSH (¡olvídate de las contraseñas como de una pesadilla!), ajustaremos el propio servidor SSH, configuraremos un firewall básico con UFW (¡es más sencillo de lo que parece!) e instalaremos Fail2Ban – un fiel guardián que ahuyentará a los aficionados a adivinar contraseñas.
Incluso si eres un completo novato y palabras como `sudo` o `sshd_config` te causan un poco de pánico – relájate. Te lo explicaré todo de la forma más sencilla y paso a paso. ¡Vamos a reforzar tu VPS Ubuntu (o VPS CentOS, los principios son muy similares)!
Índice
- 1. Primer inicio de sesión y cambio de contraseña root: Lo primero es lo primero
- 2. Creación de un nuevo usuario: ¡No trabajes como root!
- 3. Configuración de claves SSH: Olvida las contraseñas, ¡bienvenida la seguridad!
- 4. Protección del servidor SSH: Aseguramos los tornillos
- 5. Configuración del Firewall con UFW: Construimos un muro
- 6. Instalación y configuración de Fail2Ban: Martillo de baneos automático
- 7. Un poco de sabiduría
- 8. Conclusiones: ¿Qué hemos aprendido?
1. Primer inicio de sesión y cambio de contraseña root: Lo primero es lo primero
Cuando alquilaste el VPS, el proveedor seguramente te envió la dirección IP del servidor y la contraseña para el usuario `root`. Root es el superusuario en Linux, puede hacer *absolutamente todo*. Y lo primero que debes hacer es cambiar la contraseña predeterminada, a menudo generada automáticamente, por una propia, compleja y única.
Conectémonos al servidor mediante SSH. Si usas Windows, utiliza un cliente como PuTTY. Si usas Linux o macOS – simplemente abre una terminal.
ssh root@TU_DIRECCION_IP_DEL_SERVIDOR
El sistema te pedirá la contraseña – introduce la que te envió el proveedor. Al introducir la contraseña en la terminal, los caracteres no se muestran – esto es normal, así debe ser por seguridad. Pulsa Enter.
Una vez dentro, cambia inmediatamente la contraseña con el comando:
passwd
El sistema te pedirá que introduzcas la nueva contraseña y luego que la repitas para confirmarla. Invéntate algo realmente seguro: larga (12+ caracteres), con letras mayúsculas y minúsculas, números y símbolos especiales. ¡Olvídate de «qwerty», «123456» o el nombre de tu gato! Anota la contraseña en un lugar seguro (un gestor de contraseñas es tu mejor amigo).
2. Creación de un nuevo usuario: ¡No trabajes como root!
Trabajar constantemente como `root` es como caminar por un campo minado con los ojos vendados. Un simple error tipográfico en un comando y puedes eliminar accidentalmente algo importante. Por eso, crearemos un usuario normal al que le daremos permisos de superusuario (`sudo`) solo cuando sea realmente necesario. Este es uno de los pilares de la configuración de seguridad de un VPS.
Vamos a crear un usuario, por ejemplo, con el nombre `alex` (sustitúyelo por el que desees):
adduser alex
El sistema te hará algunas preguntas: primero te pedirá que inventes una contraseña para el nuevo usuario (¡de nuevo, compleja!), y luego te ofrecerá introducir información adicional (nombre, teléfono, etc.) – puedes omitirlo, simplemente pulsando Enter.

Ahora daremos a nuestro `alex` el permiso para ejecutar comandos en nombre de `root` usando `sudo`. Esto es necesario para que pueda instalar programas, editar archivos del sistema y realizar otras tareas importantes. En Ubuntu/Debian, para ello se añade el usuario al grupo `sudo`:
usermod -aG sudo alex
(Nota: En CentOS/RHEL el grupo suele llamarse `wheel`, el comando sería `usermod -aG wheel alex`)
Listo, el usuario está creado y tiene los permisos necesarios. Ahora sal del servidor (`exit`) e inicia sesión con el nuevo usuario:
ssh alex@TU_DIRECCION_IP_DEL_SERVIDOR
Ahora, si necesitas ejecutar un comando con permisos de superusuario, simplemente añade `sudo` antes. Por ejemplo, para actualizar la lista de paquetes:
sudo apt update
El sistema te pedirá la contraseña del usuario `alex` (¡no `root`!). La primera vez puede aparecer una pequeña advertencia sobre la responsabilidad – es normal.
3. Configuración de claves SSH: Olvida las contraseñas, ¡bienvenida la seguridad!
El inicio de sesión con contraseña es, por supuesto, familiar, pero no es la opción más segura. Las contraseñas se pueden descifrar (fuerza bruta), espiar, y simplemente es incómodo introducirlas constantemente. Es mucho más seguro usar claves SSH. Se trata de un par de archivos: privado (secreto, se guarda en tu ordenador) y público (no secreto, se coloca en el servidor). Cuando te conectas, el sistema comprueba si tu clave privada coincide con la pública del servidor. Si es así, entras sin necesidad de contraseñas.
3.1. Generamos las claves en tu ordenador
Primero, debes crear este par de claves en tu ordenador local.
- En Linux/macOS: Abre una terminal y ejecuta:
ssh-keygen -t rsa -b 4096
El sistema te preguntará dónde guardar las claves (normalmente la ruta predeterminada `~/.ssh/id_rsa` es adecuada, simplemente pulsa Enter). Luego te pedirá que establezcas una frase de contraseña (passphrase) para una protección adicional de la clave privada. ¡Es como una contraseña para la propia clave! ¡Te recomiendo encarecidamente que la establezcas! Introduce la frase y luego repítela.
- En Windows: Lo más cómodo es usar la utilidad PuTTYgen (normalmente viene incluida con PuTTY, puedes descargarla por separado). Inicia PuTTYgen, asegúrate de que el tipo de clave sea RSA y que el número de bits no sea inferior a 2048 (mejor 4096), pulsa «Generar». Mueve el ratón por el espacio vacío para generar aleatoriedad. Después de la generación, establece una frase de contraseña en los campos «Key passphrase» y «Confirm passphrase». Guarda *ambas* claves: la pública («Save public key») y la privada («Save private key»). También necesitarás la clave pública en formato de texto del campo superior «Public key for pasting…».

3.2. Copiamos la clave pública al servidor
Ahora debes copiar la clave *pública* (normalmente el archivo `id_rsa.pub` o el que copiaste de PuTTYgen) a tu VPS Linux. La copiamos para el usuario `alex`, con el que planeamos trabajar.
La forma más sencilla (si tienes Linux/macOS y en el servidor hay `ssh-copy-id`):
ssh-copy-id alex@TU_DIRECCION_IP_DEL_SERVIDOR
Introduce la contraseña del usuario `alex`, y la utilidad hará todo lo demás: se conectará, creará las carpetas y archivos necesarios en el servidor y añadirá tu clave.

Método manual (si no hay `ssh-copy-id` o usas Windows):
- Conéctate al servidor mediante SSH con el usuario `alex`, usando la contraseña.
- Crea la carpeta `.ssh` en el directorio de inicio, si aún no existe, y establece los permisos correctos:
mkdir -p ~/.ssh
chmod 700 ~/.ssh - Crea (o abre) el archivo `authorized_keys` en esta carpeta y establece los permisos:
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys - Ahora abre este archivo en un editor de texto, por ejemplo, `nano`:
nano ~/.ssh/authorized_keys
- Copia el contenido de tu clave *pública* (el contenido del archivo `id_rsa.pub` o el texto de PuTTYgen) e introdúcelo en el editor `nano`. Si el archivo ya contiene claves, inserta la nueva clave en una línea nueva.
- Guarda el archivo (en `nano` es Ctrl+O, Enter) y sal del editor (Ctrl+X).
3.3. Comprobamos el inicio de sesión con clave
Ahora intenta conectarte de nuevo al servidor con el usuario `alex`. Si has establecido una frase de contraseña para la clave, el sistema te pedirá que la introduzcas. Ya no debería pedir la contraseña del usuario `alex`. Si todo ha ido bien – ¡felicidades, el inicio de sesión con claves está configurado!
4. Protección del servidor SSH: Aseguramos los tornillos
Ya que hemos configurado el inicio de sesión con claves, podemos hacer el acceso SSH aún más seguro. Para ello, debemos editar el archivo de configuración del servidor SSH. Normalmente se encuentra aquí: `/etc/ssh/sshd_config`. Lo abrimos con permisos `sudo`:
sudo nano /etc/ssh/sshd_config
Buscamos y cambiamos (o añadimos, si no existen) las siguientes líneas:
4.1. Desactivamos el inicio de sesión para root
Hemos creado un usuario aparte, así que `root` ya no es necesario para el inicio de sesión directo. Esto reduce considerablemente los riesgos, ya que el nombre `root` es estándar y siempre se intenta atacar primero.
Busca la línea `#PermitRootLogin prohibit-password` o `PermitRootLogin yes`. Descomenta (quita el `#` al principio, si lo hay) y cambia el valor a `no`:
PermitRootLogin no
4.2. Desactivamos el inicio de sesión con contraseña
¡Atención! Haz esto *solo* después de que estés 100% seguro de que el inicio de sesión con claves SSH funciona para tu usuario (`alex` en nuestro ejemplo). De lo contrario, te arriesgas a perder el acceso al servidor.
Busca la línea `#PasswordAuthentication yes`. Descomenta y cambia el valor a `no`:
PasswordAuthentication no
Esto desactivará completamente la posibilidad de iniciar sesión con contraseña, dejando solo las claves. ¡Adiós, ataques de fuerza bruta!
4.3. (Opcional) Cambiamos el puerto SSH predeterminado
Por defecto, SSH escucha en el puerto 22. Todos los bots y escáneres de internet intentan entrar precisamente por ahí. Cambiando el puerto a uno no estándar (por ejemplo, 2222 o cualquier otro libre por encima de 1024), harás que tu servidor sea menos visible para los ataques automáticos. Es «seguridad por oscuridad» (security through obscurity), no reemplaza otras medidas, pero puede ser un complemento útil.
Busca la línea `#Port 22`. Descomenta y cambia el 22 por el puerto que hayas elegido, por ejemplo:
Port 2222
Importante: Si cambias el puerto, no olvides luego permitirlo en el firewall (ver más abajo) e indicarlo al conectarte:
ssh -p 2222 alex@TU_DIRECCION_IP_DEL_SERVIDOR
Después de realizar los cambios en `sshd_config`, guarda el archivo (Ctrl+O, Enter en `nano`) y sal (Ctrl+X). Para que los cambios surtan efecto, debes reiniciar el servicio SSH:
sudo systemctl restart sshd
(En sistemas antiguos o algunas distribuciones, el comando puede ser `sudo systemctl restart ssh` o `sudo service sshd restart`).
Consejo: Antes de cerrar la sesión SSH actual, abre una nueva ventana de terminal e intenta conectarte con la nueva configuración (con la clave, sin contraseña, posiblemente con el nuevo puerto). ¡Asegúrate de que todo funciona antes de desconectarte!
5. Configuración del Firewall con UFW: Construimos un muro
Un firewall (cortafuegos) es como un guardia de seguridad en la entrada, que solo deja pasar a quienes están en la lista. Controla el tráfico entrante y saliente, permitiendo solo las conexiones necesarias. En Ubuntu, a menudo viene preinstalado `UFW` (Uncomplicated Firewall) – una herramienta muy sencilla y cómoda para `iptables`. Si tienes CentOS, puede que tengas `firewalld`, pero puedes instalar `UFW`.
Comprobemos si UFW está instalado y, si no, lo instalamos (para Ubuntu/Debian):
sudo apt update
sudo apt install ufw
Ahora configuraremos las reglas básicas. Primero, prohibiremos todas las conexiones entrantes de forma predeterminada y permitiremos todas las salientes:
sudo ufw default deny incoming
sudo ufw default allow outgoing
Ahora debemos permitir los puertos que necesitamos. ¡Lo más importante es permitir SSH, de lo contrario nos bloquearemos a nosotros mismos!
sudo ufw allow ssh
Este comando permite automáticamente el puerto estándar 22. Si has cambiado el puerto SSH a otro (por ejemplo, 2222), usa el número de puerto:
sudo ufw allow 2222/tcp
Si planeas ejecutar un servidor web, debes permitir los puertos HTTP (80) y HTTPS (443):
sudo ufw allow http
sudo ufw allow https
O puedes especificar los números de puerto:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Añade aquí los demás puertos que puedan necesitar tus aplicaciones.
Cuando se hayan añadido todas las reglas necesarias, activamos el firewall:
sudo ufw enable
El sistema te advertirá de que esto puede interrumpir las conexiones SSH actuales (normalmente no las interrumpe si la regla para SSH se ha añadido correctamente). Confirma (`y`).
Puedes comprobar el estado y las reglas actuales con el comando:
sudo ufw status verbose

¡Ahora tu VPS Linux está protegido por un firewall básico!
6. Instalación y configuración de Fail2Ban: Martillo de baneos automático
Incluso con el inicio de sesión con contraseña desactivado y un puerto no estándar, los bots aún pueden intentar acceder a tu SSH (y otros servicios). Fail2Ban es una excelente utilidad que supervisa los registros del servidor (por ejemplo, los registros de intentos de inicio de sesión SSH) y bloquea automáticamente las direcciones IP desde las que hay actividad sospechosa (por ejemplo, muchos intentos fallidos de inicio de sesión). Esto reduce considerablemente la carga del servidor y elimina la fuerza bruta automática.
Instalamos Fail2Ban (para Ubuntu/Debian):
sudo apt update
sudo apt install fail2ban
Después de la instalación, Fail2Ban normalmente se inicia inmediatamente con la configuración predeterminada, que ya incluye la protección para SSH. El archivo de configuración principal es `/etc/fail2ban/jail.conf`, pero no se recomienda editarlo directamente, ya que puede sobrescribirse al actualizar. En su lugar, crearemos un archivo de configuración local `/etc/fail2ban/jail.local`, donde realizaremos nuestros cambios.
Copiamos el archivo estándar:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ahora abrimos `jail.local` para editarlo:
sudo nano /etc/fail2ban/jail.local
¿Qué podemos configurar aquí? Busca la sección `[DEFAULT]`. Aquí puedes cambiar los parámetros generales, por ejemplo:
bantime
: Durante cuánto tiempo bloquear una IP (por ejemplo, `1h` — 1 hora, `1d` — 1 día).findtime
: Período de tiempo durante el cual se cuentan los intentos fallidos.maxretry
: Número de intentos fallidos después de los cuales se bloquea la IP.
Por ejemplo, puedes establecer `bantime = 1d` para bloquear durante un día.
A continuación, busca la sección `[sshd]` (o `[ssh]` en versiones antiguas). Asegúrate de que haya una línea `enabled = true`. Si has cambiado el puerto SSH, en esta sección debes indicar el nuevo puerto, cambiando la línea `port = ssh` por `port = 2222` (o tu puerto).
[sshd]
enabled = true
port = ssh # o tu puerto, por ejemplo, 2222
# el resto de parámetros se pueden dejar por defecto o configurar
Guarda el archivo (Ctrl+O, Enter) y sal (Ctrl+X).
Reiniciamos Fail2Ban para aplicar los cambios:
sudo systemctl restart fail2ban
Puedes comprobar el estado del servicio y ver si ya ha bloqueado a alguien para SSH de esta manera:
sudo fail2ban-client status sshd