Ubuntu Server recién instalado: mi checklist de seguridad
Un Ubuntu Server recién instalado no necesita una colección de trucos secretos. Necesita pocas decisiones, aplicadas en el orden correcto y comprobadas antes de cerrar la sesión que todavía funciona. Mi lista inicial consiste en actualizar, crear un acceso recuperable, reducir lo expuesto y dejar señales cuando algo falla.
Esta guía está pensada para una máquina que administramos por SSH. Antes de tocar el acceso, hago una instantánea o verifico que existe una consola de recuperación en el proveedor. Bloquearse fuera del servidor es una manera bastante eficaz de aprender, pero no la recomiendo.
1. Actualizar con los ojos abiertos
sudo apt update
apt list --upgradable
sudo apt upgrade
sudo systemctl --failed
Leo la lista antes de aceptar. En una máquina en producción también compruebo si hay un reinicio pendiente y lo programo; que una actualización esté instalada no significa que el kernel o un servicio ya estén usando la versión nueva.
2. Crear un administrador identificable
sudo adduser operador
sudo usermod -aG sudo operador
sudo -l -U operador
Cada persona debería tener su cuenta. Compartir root borra la trazabilidad y convierte una baja o una clave filtrada en una emergencia. Copio una clave pública al nuevo usuario y dejo permisos estrictos:
sudo install -d -m 700 -o operador -g operador /home/operador/.ssh
sudo install -m 600 -o operador -g operador clave.pub /home/operador/.ssh/authorized_keys
Abro una segunda terminal y confirmo que la clave y sudo funcionan. Mantengo la sesión original abierta hasta acabar toda la prueba.
3. Ajustar SSH sin jugar a la ruleta
Creo un archivo separado para no pelearme con el fichero distribuido por el paquete:
sudoedit /etc/ssh/sshd_config.d/10-local-hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
Desactivo contraseñas únicamente después de entrar con la clave desde otra sesión. Antes de recargar:
sudo sshd -t
sudo systemctl reload ssh
sshd -t debe terminar sin errores. Cambiar el puerto de SSH puede quitar ruido de los logs, pero no reemplaza las claves, las actualizaciones ni un control de acceso correcto.
4. Encender el firewall sin cortar SSH
sudo ufw allow OpenSSH
sudo ufw --dry-run enable
sudo ufw enable
sudo ufw status verbose
Después abro solo los servicios que realmente ofrece la máquina, por ejemplo http y https en un servidor web. Una base de datos que solo usa la aplicación local debe escuchar en localhost, no depender exclusivamente del firewall.
5. Comprobar las actualizaciones automáticas
Ubuntu Server incluye unattended-upgrades en sus versiones LTS modernas. En lugar de asumir que funciona, reviso el temporizador y sus registros:
systemctl list-timers 'apt-daily*'
sudo systemctl status unattended-upgrades --no-pager
sudo tail -n 80 /var/log/unattended-upgrades/unattended-upgrades.log
Las actualizaciones automáticas reducen el tiempo durante el que una vulnerabilidad conocida queda abierta. También necesitan observación: una máquina que lleva meses sin actualizar por un repositorio roto sigue pareciendo tranquila.
6. Saber qué está escuchando
sudo ss -lntup
systemctl --type=service --state=running
sudo journalctl -p warning -b --no-pager
Busco puertos inesperados, servicios que ya no uso y errores del arranque actual. No desactivo algo solo porque su nombre me resulte desconocido: primero identifico qué paquete lo instaló y qué depende de él.
7. Copia de seguridad y prueba de restauración
Una copia conectada permanentemente al mismo servidor comparte demasiados riesgos con el original. Guardo al menos otra copia fuera de la máquina y pruebo una restauración pequeña. Documento además qué hay que recuperar: configuración, datos, claves y versiones. Copiar todo sin saber arrancarlo después solo crea una colección cara de archivos.
Mi comprobación final
sudo sshd -t
sudo ufw status numbered
sudo ss -lntup
sudo systemctl --failed
sudo apt update
El endurecimiento no es un botón ni una tarde heroica. Es una base pequeña que se puede auditar, actualizar y recuperar. A partir de aquí vendrán medidas propias de cada servicio: permisos de la aplicación, TLS, copias, alertas y límites.
Referencias: documentación de Ubuntu sobre UFW, OpenSSH y actualizaciones de seguridad.
0 comentarios
Sé concreto, añade contexto (versión, distro, stack) y si puedes pega logs en bloque de código. Menos drama, más señales.