Cómo evitar que tu servidor se convierta en un blanco fácil con los scripts de endurecimiento de konstruktoid
Imagina que acabas de desplegar una instancia nueva de Ubuntu. Todo está funcionando, SSH está abierto, los paquetes están actualizados. Te sientes seguro—hasta que revisas los logs y ves intentos interminables de inicio de sesión por fuerza bruta desde todo el mundo. La configuración predeterminada de las distribuciones Linux prioriza la comodidad sobre la seguridad, así que endurecer un sistema requiere horas de ajustar configuraciones de SSH, configurar cortafuegos y restringir permisos de servicios.
El autor del repositorio con el handle konstruktoid decidió simplificar esta rutina y reunió scripts para el endurecimiento automático de Ubuntu. Esto no es solo un conjunto de comandos—es una estrategia completa para convertir un sistema operativo normal en una fortaleza digital, con el control a través de systemd como piedra angular.
Qué es exactamente lo que hace este script
La idea central del proyecto es minimizar la superficie de ataque tanto como sea posible. Si un servicio no es necesario, debería estar deshabilitado. Si un servicio está ejecutándose, debería tener exactamente los permisos requeridos para realizar su tarea.
El script verifica el sistema contra una lista exhaustiva de criterios, muchos de los cuales provienen de las recomendaciones del CIS (Center for Internet Security). Aquí hay algunas áreas donde aporta orden:
- Configuración de parámetros del kernel mediante sysctl. Esto incluye bloquear el reenvío de paquetes (IP forwarding), protección contra suplantación y restringir el acceso a funciones de depuración del kernel.
- Endurecimiento de permisos de archivos en archivos del sistema. El script verifica permisos en
/etc/shadow,/etc/gshadowy otras configuraciones críticas para que usuarios normales o aplicaciones web comprometidas no puedan leerlos. - Restricción de servicios systemd. Esta es quizás la parte más interesante. El script utiliza características modernas de aislamiento de systemd, como
PrivateTmp,NoNewPrivilegesyProtectSystem. - Gestión de módulos del kernel. Protocolos raramente usados (como DCCP o SCTP) y sistemas de archivos que frecuentemente se convierten en fuentes de vulnerabilidades son deshabilitados.
Cómo funciona en la práctica
El proyecto está escrito en Shell, lo que lo hace transparente para auditorías. Puedes simplemente leer el código antes de ejecutarlo y entender exactamente qué cambiará en tu sistema. Para comenzar, solo clona el repositorio y ejecuta el script principal como root.
git clone https://github.com/konstruktoid/hardening.git
cd hardening
sudo bash ubuntu.sh
Por cierto, el autor tiene una versión separada para Debian, pero este repositorio está enfocado específicamente en Ubuntu (versiones 20.04, 22.04 y 24.04). Curiosamente, el script no solo modifica configuraciones—también instala herramientas adicionales de seguridad, por ejemplo, auditd para registro profundo de llamadas al sistema.
Ajuste fino para tus necesidades
Ejecutar el script directamente en un sistema de producción activo es una empresa arriesgada. El endurecimiento siempre es un compromiso entre seguridad y funcionalidad. Si deshabilitas la capacidad de cargar ciertos módulos del kernel, Docker o hardware de red específico podrían dejar de funcionar.
El proyecto incluye un archivo de configuración donde puedes sobrescribir variables. Por ejemplo, si absolutamente necesitas IPv6 (que el script intenta restringir por defecto), puedes ajustar esto en la configuración. Recomendaría ejecutar el script primero en una VM de prueba que replique completamente tu stack tecnológico de producción.
Por qué deberías prestar atención a la edición systemd
Muchas guías de seguridad de Linux más antiguas todavía recomiendan editar docenas de archivos en /etc/. El enfoque de konstruktoid es más moderno: utiliza activamente la modularidad de systemd. En lugar de reescribir el archivo de unidad de servicio principal, se crean archivos drop-in. Esto permite actualizar paquetes mediante apt sin conflictos de configuración, mientras tus personalizaciones de seguridad permanecen vigentes.
El script también verifica paquetes comprometidos y sugiere eliminar software que frecuentemente se convierte en un agujero de seguridad, como implementaciones antiguas de rsh o telnet.
Quién encontrará útil este proyecto
Si administras un par de servidores para proyectos personales, este repositorio se convertirá en una excelente lista de verificación. No tienes que ejecutar el script completo—puedes tomar prestadas buenas soluciones para configurar parámetros de ufw o sysctl.
Para administradores de sistemas en empresas, esto es una base lista para usar para crear tu propia imagen dorada corporativa. En lugar de reinventar la rueda, puedes tomar el trabajo de konstruktoid y adaptarlo a tus requisitos de cumplimiento.
Sin embargo, recuerda: la seguridad es un proceso. Ejecutar el script hoy no garantiza protección contra una vulnerabilidad que surja mañana. Pero definitivamente eleva la barrera para un atacante potencial tanto que lo más probable es que busque presas más fáciles.
Por dónde empezar a aprender
- Echa un vistazo al archivo
ubuntu.sh. Este es el punto de entrada desde el cual se llaman los otros módulos. - Explora la carpeta
scripts/. La lógica está dividida por categoría: red, sistema de archivos, permisos. - Asegúrate de leer la sección sobre variables de entorno en el README para entender cómo controlar el comportamiento del script sin editar su código.
El proyecto está vivo y se actualiza regularmente para nuevas versiones de Ubuntu e incorpora las últimas recomendaciones de seguridad. Este es un gran ejemplo de cómo la automatización convierte horas de trabajo rutinario en una tarea que toma minutos.
Proyectos relacionados