du_setup: el script que automatiza el hardening inicial de servidores Debian y Ubuntu

En muchos proyectos, el momento más delicado de un servidor es el primer día de vida. Un Debian o Ubuntu recién instalado llega “limpio”, pero también expuesto: servicios innecesarios activos, puertos abiertos, usuarios por defecto y configuración SSH poco estricta. En ese contexto, es fácil cometer errores manuales y dejar huecos que, con el tiempo, se convierten en puertas de entrada para atacantes.

Para abordar precisamente ese problema nace du_setup, un script en Bash de código abierto pensado para automatizar la configuración inicial y el endurecimiento de servidores Debian y Ubuntu. El proyecto, alojado en GitHub, va por la versión v0.78.4 y se presenta como una herramienta idempotente, segura y apta para entornos de producción.

Un “arranque seguro” para servidores Debian y Ubuntu

El objetivo de du_setup es claro: proporcionar una línea base de seguridad y configuración sobre la que luego el administrador pueda construir el resto del sistema (servicios, aplicaciones, contenedores, etc.).

El script es compatible con:

  • Debian 12 y 13
  • Ubuntu 20.04, 22.04 y 24.04 (con soporte experimental para 24.10 y 25.04)

Está pensado tanto para máquinas en la nube (DigitalOcean, OVH, Hetzner, Oracle Cloud, Netcup, etc.) como para servidores dedicados, siempre que se trate de instalaciones frescas o entornos donde se quiera estandarizar el despliegue.

Ejecución interactiva o en modo silencioso

Uno de los puntos fuertes de du_setup es que puede ejecutarse de dos maneras:

  • Modo interactivo (recomendado):
    El script guía al usuario paso a paso, planteando decisiones clave (usuario administrador, puerto SSH, backup remoto, instalación de Docker, Tailscale, etc.). Es ideal para quien quiere entender qué se cambia en cada fase.
  • Modo silencioso (--quiet):
    Pensado para provisión automática en pipelines de CI/CD, scripts de infraestructura como código o plantillas en proveedores cloud. En este caso, du_setup se apoya en valores preconfigurados y minimiza las preguntas.

La instalación es sencilla:

wget https://raw.githubusercontent.com/buildplan/du_setup/refs/heads/main/du_setup.sh
chmod +x du_setup.sh
sudo -E ./du_setup.sh
Lenguaje del código: JavaScript (javascript)

Antes de ejecutarlo en producción, los autores recomiendan verificar la integridad del script mediante SHA256, usando el fichero oficial .sha256 disponible en el propio repositorio.

Gestión de usuarios y endurecimiento de SSH

El primer bloque de trabajo se centra en usuarios y acceso remoto, uno de los puntos más críticos en cualquier servidor expuesto a Internet.

  • Creación o uso de un usuario administrador con permisos sudo.
  • Posibilidad de configurar claves SSH para ese usuario y forzar contraseñas robustas.
  • Desactivación del acceso SSH directo como root, una de las mejores prácticas básicas en seguridad.
  • Configuración de un puerto SSH personalizado, clave para reducir ruido de bots que atacan el puerto 22 por defecto.
  • Aplicación de un fichero de configuración endurecida para SSH, con soporte de rollback: si algo va mal y se pierde acceso, se puede restaurar la configuración previa desde las copias que el propio script guarda en /root/setup_harden_backup_*.

Firewall, Fail2Ban y actualizaciones automáticas

En cuanto a defensa perimetral, du_setup automatiza varios pasos que muchos administradores realizan a mano en cada servidor nuevo:

  • Activación y configuración de UFW (Uncomplicated Firewall) con política “deny incoming” por defecto y apertura únicamente de los puertos necesarios.
  • Instalación y configuración de Fail2Ban para monitorizar logs de SSH y del propio firewall, bloqueando IPs con comportamiento sospechoso.
  • Habilitación de unattended-upgrades, el sistema de actualizaciones automáticas de seguridad de Debian/Ubuntu, para mantener el servidor parcheado sin intervención constante.

Además, comprueba la sincronización de hora mediante chrony, pieza clave para que los logs, certificados y mecanismos de seguridad funcionen de forma consistente.

Hardening del kernel y configuración del sistema

Para quienes quieran ir un paso más allá, el script ofrece la opción de aplicar ajustes de kernel hardening mediante parámetros sysctl:

  • Protección de enlaces duros y blandos.
  • Mitigación de ciertos ataques de red habituales (como el abuso de paquetes SYN).
  • Endurecimiento de políticas relacionadas con ptrace y otros vectores de escalada.

Estos cambios se guardan en un fichero específico (/etc/sysctl.d/99-du-hardening.conf), lo que facilita su auditoría y modificación posterior. El propio script sugiere comandos para comprobar que los valores están aplicados y activos.

También puede crear un fichero de swap optimizado para sistemas con poca RAM, ajustando parámetros como swappiness y vfs_cache_pressure.

Backups remotos automatizados con rsync

Uno de los apartados más prácticos del script es la configuración opcional de copias de seguridad remotas usando rsync sobre SSH:

  • Permite definir un servidor de destino (como una Hetzner Storage Box, que por defecto usa el puerto 23 para SSH) o cualquier otro sistema accesible por SSH.
  • Automatiza la gestión de claves SSH, bien mediante sshpass o por intercambio manual.
  • Crea un script de backup (/root/run_backup.sh) y programa su ejecución con cron, además de gestionar un fichero de exclusiones personalizable.
  • Incluye un modo de test de backup para verificar que todo funciona antes de dejarlo en producción.
  • Opcionalmente integra notificaciones vía ntfy o Discord, útil para saber si las copias se completan correctamente.

Los logs de estas tareas se guardan en /var/log/backup_rsync.log, lo que facilita la supervisión y el diagnóstico de problemas.

Tailscale, Docker y otras herramientas opcionales

Además del hardening básico, du_setup ofrece instalar software adicional muy habitual en entornos modernos:

  • Tailscale:
    VPN tipo mesh para conectar servidores y dispositivos sin complicar la configuración de red. El script puede unir el servidor a una red Tailscale estándar (usando una pre-auth key generada en el panel de Tailscale) o a un servidor Tailscale autohospedado. También soporta flags como --ssh, --advertise-exit-node, --accept-dns o --accept-routes.
  • Docker y Docker Compose:
    Instala el motor de Docker, Docker Compose y añade el usuario administrador al grupo docker. Incluye también herramientas como dtop para monitorizar contenedores desde la terminal.

Además, el script instala utilidades de administración habituales (htop, ncdu, iotop, nethogs, etc.), siempre con la idea de dejar el servidor listo para trabajar desde el primer arranque.

Auditoría de seguridad con Lynis y debsecan

Para completar el ciclo, du_setup puede ejecutar auditorías de seguridad opcionales:

  • Lynis, una herramienta de hardening que analiza el sistema y genera un índice de seguridad junto con recomendaciones detalladas.
  • debsecan, que revisa paquetes instalados en busca de vulnerabilidades conocidas (CVEs) según la versión de Debian/Ubuntu.

Los resultados se guardan en /var/log/setup_harden_security_audit_*.log y se resumen en el informe final que genera el script, lo que ayuda a tener una visión clara del estado del servidor tras la primera configuración.

Limpieza de “restos” del proveedor y copias de seguridad de configuración

Pensando en entornos cloud, du_setup incluye un modo de limpieza de paquetes y agentes del proveedor:

  • Puede detectar y eliminar agentes de monitorización, herramientas de provisión y usuarios por defecto creados por plataformas como DigitalOcean, Hetzner, Vultr, etc.
  • Ofrece un modo de previsualización (--cleanup-preview) para ver qué se eliminaría antes de aplicar cambios, y un modo --cleanup-only para ejecutar solo esa parte en servidores ya existentes.

En todo momento, el script sigue una filosofía de “seguridad ante todo”:
antes de modificar archivos críticos como sshd_config, realiza copias con sello temporal en /root/setup_harden_backup_*. Esas copias permiten recuperar rápidamente el sistema si algo no sale como se esperaba.

Una base sólida para producción (pero no un sustituto de la arquitectura)

En sus notas, los autores insisten en varios puntos importantes:

  • El script está pensado para sistemas frescos y se recomienda probarlo primero en entornos de staging.
  • Es aconsejable mantener acceso de consola fuera de banda (por ejemplo, la consola del proveedor) por si una mala configuración de SSH deja el servidor inaccesible.
  • Tras su ejecución, se requiere un reinicio para aplicar correctamente cambios de kernel y servicios.

du_setup no pretende ser una solución mágica que sustituya el diseño de una buena arquitectura de seguridad y de backups, pero sí un atajo muy útil para que todos los servidores arranquen desde un estándar sólido, repetible y auditado, reduciendo errores humanos y ganando tiempo en cada despliegue.

Para administradores de sistemas que gestionan múltiples máquinas Debian o Ubuntu, especialmente en entornos cloud, este tipo de scripts de hardening automatizado se están convirtiendo en una pieza clave a la hora de escalar infraestructuras sin sacrificar seguridad.

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana.

¡Apúntate a nuestro newsletter!


– patrocinadores –

Noticias destacadas

– patrocinadores –

¡SUSCRÍBETE AL BOLETÍN
DE LOS SYSADMINS!

Scroll al inicio
×