Cómo preparar un servidor Linux desde cero para producción: guía paso a paso

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:

  • start inicia el servicio en este momento.

  • enable configura 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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio