Cuando recibimos un servidor Linux nuevo, instalar el sistema operativo es solamente el comienzo.
Antes de desplegar una aplicación o publicar un servicio, hay una serie de configuraciones iniciales que conviene realizar: actualizar el sistema, instalar herramientas básicas, crear usuarios administrativos, asegurar SSH, configurar un firewall, revisar servicios y preparar herramientas que nos permitan diagnosticar problemas.
En esta guía voy a mostrarte cómo preparo una VPS Linux desde cero, siguiendo una configuración base similar a la que utilizaría un administrador de sistemas.
Importante: no existe una configuración universal que convierta automáticamente un servidor en «apto para producción». El hardening y las medidas necesarias dependen de la aplicación, infraestructura y políticas de seguridad de cada entorno.
¿Por qué practicar Linux utilizando una VPS?
Podríamos realizar este laboratorio utilizando VirtualBox, VMware o cualquier otro hipervisor en nuestra computadora.
Sin embargo, utilizar una VPS para aprender administración Linux tiene algunas ventajas interesantes.
En un entorno profesional normalmente no tenemos acceso físico al servidor. Lo habitual es recibir una dirección IP, un usuario y algún mecanismo de autenticación para conectarnos remotamente.
Con una VPS podemos practicar situaciones mucho más cercanas a ese escenario:
Acceso remoto mediante SSH.
Direcciones IP públicas.
Configuración de firewall.
Servicios expuestos a Internet.
Administración remota.
Troubleshooting de red.
Seguridad de SSH.
Servidores web.
Logs reales.
Además, tener un servidor conectado a Internet nos permite comprender rápidamente por qué la seguridad debe formar parte de la configuración inicial.
1. Conectarnos al servidor Linux mediante SSH
Una vez creada nuestra VPS necesitamos conocer su dirección IP.
Inicialmente podemos conectarnos mediante:
ssh root@IP_DEL_SERVIDOR
En este caso utilizaremos root únicamente para realizar la configuración inicial. Más adelante crearemos nuestro propio usuario administrativo.
Una vez dentro podemos comprobar qué usuario estamos utilizando:
whoami
También podemos obtener información del servidor:
hostnamectl
Para conocer la distribución instalada:
cat /etc/os-release
Y para consultar la versión del kernel:
uname -r
Estos comandos son una buena primera comprobación cuando recibimos un servidor que no conocemos.
2. Actualizar Ubuntu Server
Antes de instalar aplicaciones, conviene comprobar que nuestro sistema esté actualizado.
En Ubuntu o Debian podemos ejecutar:
apt update
Y posteriormente:
apt upgrade -y
Podemos comprobar si todavía existen paquetes pendientes de actualización mediante:
apt list --upgradable
Una imagen de una VPS puede haber sido generada tiempo atrás y desde entonces pueden haberse publicado actualizaciones, correcciones de errores y parches de seguridad.
Por eso actualizar el sistema es una de las primeras tareas que suelo realizar.
3. Instalar herramientas básicas para administrar Linux
Hay determinadas herramientas que termino utilizando constantemente cuando trabajo con servidores Linux.
Para este laboratorio podemos instalar un pequeño «kit de Sysadmin»:
apt install -y curl wget vim nano git htop tree rsync unzip zip net-tools dnsutils lsof tcpdump traceroute jq ca-certificates
No significa que todos los servidores necesiten obligatoriamente cada uno de estos paquetes.
La idea es disponer de herramientas útiles para nuestro laboratorio y aprender para qué sirven.
curl
curl es probablemente una de las herramientas que más utilizo administrando servidores.
Podemos probar una página web:
curl https://example.com
O consultar solamente las cabeceras HTTP:
curl -I https://example.com
También resulta extremadamente útil para trabajar con APIs, endpoints, balanceadores y servicios internos.
wget
wget permite descargar archivos directamente desde la terminal.
wget URL_DEL_ARCHIVO
Es habitual utilizarlo para descargar paquetes, scripts, binarios o archivos comprimidos.
htop
Para visualizar procesos y consumo de recursos:
htop
También disponemos del clásico:
top
htop simplemente ofrece una interfaz más cómoda e interactiva.
tree
Podemos visualizar la estructura de directorios de forma mucho más clara:
tree /etc
Por ejemplo, después de instalar Nginx podemos utilizar:
tree /etc/nginx
rsync
rsync es una herramienta muy utilizada para copiar y sincronizar archivos.
Resulta especialmente interesante para transferencias entre servidores y determinadas estrategias de backup.
Herramientas DNS
Cuando un servidor no puede comunicarse con determinado servicio, no siempre significa que el servicio esté caído.
Podemos tener un problema de resolución DNS.
Dos herramientas básicas son:
dig google.com
y:
nslookup google.com
ss
Para conocer qué puertos están escuchando en nuestro servidor:
ss -tulpn
Este es uno de esos comandos que conviene tener siempre a mano.
Si acabamos de crear nuestro servidor probablemente encontremos, entre otros, el puerto 22 correspondiente a SSH.
lsof
Podemos utilizar lsof para averiguar qué proceso está utilizando determinado puerto.
Por ejemplo:
lsof -i :22
Resulta especialmente útil cuando intentamos levantar una aplicación y recibimos el clásico error indicando que el puerto ya está siendo utilizado.
tcpdump
Otra herramienta fundamental para troubleshooting de red es tcpdump.
Por ejemplo:
tcpdump -i any port 22
Esto permite capturar tráfico relacionado con SSH.
Quizás no sea una herramienta que un administrador utilice todos los días, pero cuando aparece un problema complejo de conectividad puede resultar extremadamente útil.
4. Crear un usuario administrativo
Trabajar permanentemente como root no es una buena práctica.
Podemos crear nuestro propio usuario:
adduser sysadmin
Luego lo agregamos al grupo sudo:
usermod -aG sudo sysadmin
Podemos comprobar sus grupos y permisos:
id sysadmin
Cambiamos al nuevo usuario:
su - sysadmin
Y comprobamos:
whoami
Ahora podemos verificar que sudo funciona:
sudo whoami
La respuesta debería ser:
root
De esta manera trabajamos habitualmente con nuestro usuario y elevamos privilegios únicamente cuando necesitamos realizar tareas administrativas.
5. Configurar SSH utilizando claves
El siguiente paso es mejorar la forma en que accedemos al servidor.
En nuestra computadora podemos generar una clave SSH:
ssh-keygen -t ed25519
Obtendremos una clave privada y una clave pública.
La clave privada nunca debe compartirse.
Podemos copiar nuestra clave pública al servidor:
ssh-copy-id sysadmin@IP_DEL_SERVIDOR
Después comprobamos el acceso:
ssh sysadmin@IP_DEL_SERVIDOR
Si podemos ingresar correctamente utilizando nuestra clave, podemos continuar con el hardening básico de SSH.
6. Deshabilitar el acceso SSH de root y las contraseñas
Editamos la configuración de SSH:
sudo vim /etc/ssh/sshd_config
Entre las opciones que podemos revisar encontramos:
PermitRootLogin no
PasswordAuthentication no
Antes de aplicar los cambios conviene validar la configuración:
sudo sshd -t
Si no aparecen errores podemos recargar SSH:
sudo systemctl reload ssh
¡No cierres todavía tu conexión SSH!
Este punto es muy importante.
Antes de cerrar nuestra sesión actual debemos abrir otra terminal e intentar conectarnos nuevamente:
ssh sysadmin@IP_DEL_SERVIDOR
Solamente después de comprobar que el nuevo acceso funciona correctamente deberíamos cerrar nuestra conexión anterior.
Un error en la configuración de SSH podría dejarnos sin acceso remoto al servidor.
7. Configurar el firewall
Nuestro servidor tiene una dirección IP pública y está conectado a Internet.
Necesitamos controlar qué servicios pueden aceptar conexiones.
Podemos consultar las reglas existentes con:
sudo iptables -L -n -v
En distribuciones Linux modernas también nos encontraremos con nftables:
sudo nft list ruleset
Para este laboratorio utilizaremos UFW, que simplifica la administración del firewall.
Comprobamos su estado:
sudo ufw status
Antes de habilitarlo debemos permitir SSH:
sudo ufw allow OpenSSH
Ahora podemos activarlo:
sudo ufw enable
Y comprobar las reglas:
sudo ufw status verbose
El orden importa: primero permitimos SSH y después activamos el firewall.
De lo contrario podemos terminar bloqueando nuestro propio acceso al servidor.
8. Instalar Fail2ban
Tener una IP pública implica estar expuestos a intentos automatizados de conexión.
Podemos instalar Fail2ban:
sudo apt install fail2ban -y
Lo iniciamos y habilitamos:
sudo systemctl enable --now fail2ban
Comprobamos su estado:
sudo systemctl status fail2ban
Fail2ban puede detectar determinados comportamientos, como múltiples intentos fallidos de autenticación, y aplicar bloqueos temporales.
No reemplaza al firewall ni significa que nuestro servidor sea automáticamente seguro. Es simplemente una capa adicional dentro de nuestra estrategia.
Podemos revisar la actividad relacionada con SSH mediante:
sudo journalctl -u ssh
No te sorprendas si encontrás intentos de autenticación que no realizaste vos. Los escaneos automatizados sobre direcciones IP públicas son extremadamente comunes.
9. Instalar Nginx
Ya tenemos una configuración inicial bastante interesante.
Ahora vamos a instalar un servicio real:
sudo apt install nginx -y
Comprobamos su estado:
sudo systemctl status nginx
Administrar servicios con systemctl
Podemos detener Nginx:
sudo systemctl stop nginx
Iniciarlo:
sudo systemctl start nginx
Reiniciarlo:
sudo systemctl restart nginx
O recargar su configuración:
sudo systemctl reload nginx
También podemos hacer que Nginx inicie automáticamente cuando arranca el servidor:
sudo systemctl enable nginx
Es importante comprender la diferencia:
startinicia el servicio en este momento.enableconfigura el servicio para que pueda iniciarse automáticamente durante futuros arranques.
10. Permitir HTTP y HTTPS en el firewall
Para poder acceder a nuestro servidor web debemos permitir el tráfico correspondiente.
Con UFW podemos utilizar:
sudo ufw allow 'Nginx Full'
Comprobamos:
sudo ufw status
Y volvemos a mirar nuestros puertos:
ss -tulpn
Ahora deberíamos encontrar SSH y nuestro servidor web escuchando.
Podemos abrir desde nuestro navegador:
http://IP_DEL_SERVIDOR
Si todo está funcionando correctamente aparecerá la página de bienvenida de Nginx.
También podemos comprobarlo desde la terminal:
curl http://localhost
O solamente consultar la respuesta HTTP:
curl -I http://localhost
11. Cómo diagnosticar problemas en un servidor Linux
Saber instalar un servicio es importante.
Pero para trabajar administrando servidores es todavía más importante saber qué mirar cuando algo deja de funcionar.
Supongamos que nos informan que Nginx está caído.
Lo primero que podemos consultar es:
systemctl status nginx
Después podemos revisar los logs:
journalctl -u nginx
También podemos buscar errores generales:
journalctl -p err
Y revisar los logs tradicionales:
ls -lah /var/log/
Nginx dispone normalmente de:
/var/log/nginx/access.log
/var/log/nginx/error.log
Podemos observar los accesos en tiempo real:
sudo tail -f /var/log/nginx/access.log
Y los errores:
sudo tail -f /var/log/nginx/error.log
Una recomendación que considero fundamental:
Antes de empezar a modificar configuraciones al azar porque algo no funciona, revisá los logs.
Muchas veces el propio sistema ya nos está indicando exactamente cuál es el problema.
12. Comprobar CPU, RAM, disco y procesos
También conviene conocer algunos comandos que nos permitan obtener rápidamente una fotografía del estado del servidor.
Uptime y carga
uptime
Memoria RAM
free -h
Espacio en disco
df -h
Procesos
top
o:
htop
También:
ps aux
Puertos
ss -tulpn
Con apenas unos pocos comandos podemos realizar una primera evaluación del estado de un servidor Linux.
13. Buscar servicios fallidos
systemd también puede mostrarnos rápidamente unidades que se encuentran en estado fallido:
sudo systemctl --failed
Y podemos consultar errores producidos desde el último arranque:
sudo journalctl -p err -b
Son dos comandos simples que pueden ahorrarnos bastante tiempo durante un troubleshooting.
¿Nuestro servidor ya está listo para producción?
Llegados a este punto tenemos:
Sistema actualizado.
Herramientas básicas de administración.
Usuario administrativo.
sudo.Autenticación mediante claves SSH.
Restricciones de acceso SSH.
Firewall.
Fail2ban.
Nginx.
Administración mediante systemd.
Herramientas para analizar logs.
Comandos para revisar CPU, memoria, disco, procesos y red.
Es una excelente configuración base y un muy buen laboratorio para aprender administración Linux.
Pero esto no significa que el servidor esté automáticamente preparado para cualquier entorno productivo.
Dependiendo de nuestra infraestructura todavía tendremos que considerar aspectos como:
Backups y pruebas de restauración.
Monitoreo y alertas.
HTTPS y gestión de certificados.
Actualizaciones y gestión de parches.
Gestión de vulnerabilidades.
Centralización y retención de logs.
Gestión segura de secretos.
Políticas de usuarios y accesos.
Hardening específico del sistema y aplicaciones.
Automatización.
Alta disponibilidad, cuando corresponda.
Plan de recuperación ante incidentes.
La configuración de producción siempre debe adaptarse al servicio que vamos a ejecutar y a los requisitos de seguridad y disponibilidad del proyecto.
Mirá el tutorial completo en YouTube
Si querés ver todo este procedimiento realizado paso a paso sobre una VPS real, podés mirar el video completo en mi canal Cumpi Linux:
▶️ Así preparo un servidor Linux desde CERO para PRODUCCIÓN
En el video podés ver la ejecución de los comandos, las comprobaciones y la explicación de por qué realizo cada configuración.
Conclusión
Aprender comandos Linux es importante, pero hay un punto en el que tenemos que empezar a conectarlos entre sí.
SSH, usuarios, sudo, firewall, systemd, procesos, puertos, DNS, logs y troubleshooting no son temas aislados. Son herramientas que utilizamos juntas para administrar un sistema.
Por eso, si estás aprendiendo Linux, te recomiendo crear tu propio laboratorio.
Levantá una VPS, configurala desde cero, instalá servicios, detenelos, generá errores, revisá los logs e intentá solucionar los problemas.
Linux se aprende muchísimo cuando empezamos a resolver problemas reales.
Y ahora te toca a vos:
¿Qué herramienta o configuración considerás imprescindible cuando recibís un servidor Linux nuevo?
Te leo en los comentarios.