Ghost AcademySecLearn// Seguridad Informática
🛡️ improved_harden_linux.sh · DISA STIG · CIS · Debian / Ubuntu
Security Hardening
Linux — fortress_improved
// Script semi-automatizado de endurecimiento — 21 módulos · 4 niveles de seguridad

Endurece sistemas Debian/Ubuntu buscando conformidad con DISA STIG y CIS Benchmarks. Instala y ejecuta el script fortress_improved.sh con un dry-run previo, selecciona el nivel de seguridad adecuado a tu entorno y aplica los 21 módulos de hardening: SSH, firewall, kernel, auditoría, AppArmor, ClamAV, políticas de contraseñas y más.

low · moderate · high · paranoid --dry-run · -v · --report · --restore SSH · UFW · Fail2Ban · sysctl · auditd AppArmor · ClamAV · AIDE · Lynis · NTP -e firewall,ssh · -x clamav · -n · -l high
📥
A. Preparar el Script
Descarga fortress_improved.sh desde el repositorio de GitHub de captainzero93 y dale permisos de ejecución.
1
Descargar el script con wget
Descarga la versión más reciente directamente desde la rama main del repositorio.
2
Otorgar permisos de ejecución
chmod +x fortress_improved.sh — el script necesita ser ejecutable antes de poder lanzarse con sudo.
bash — descargar y preparar
# Descargar el script desde GitHub (rama main)
wget https://raw.githubusercontent.com/captainzero93/security_harden_linux/main/fortress_improved.sh

# Otorgar permisos de ejecución
chmod +x fortress_improved.sh
🔍
B. Dry-Run — Simulación Previa (Obligatorio)
Antes de aplicar cualquier cambio, siempre ejecuta primero el dry-run. Recorre todos los módulos sin modificar el sistema y genera un informe detallado.
bash — simulación completa con verbose
# Dry-run + verbose: muestra TODO lo que haría sin tocar nada
sudo ./fortress_improved.sh --dry-run -v

El script recorrerá los 21 módulos mostrando para cada uno: [INFO] [DRY RUN] Would X... seguido de [SUCCESS] Module Y completed. Si todos terminan en SUCCESS, la ejecución real es segura.

✅ Parámetros de la ejecución dry-run
Security Level moderate
Desktop Mode true
Dry Run true ← solo simulación, sin cambios reales
Interactive true
Executed modules 21 / 21
[SUCCESS] Security hardening completed!
[INFO] Report /root/security_hardening_report_20251110_084835.html
Salida del dry-run mostrando módulos ejecutados con SUCCESS y el informe generado
Salida del --dry-run -v — todos los módulos completados con [SUCCESS]
✅ Dry-run exitoso: Si ves [SUCCESS] Security hardening completed! al final con los 21 módulos, la ejecución real es segura. El informe HTML generado documenta todo lo que se aplicaría.
🚀
C. Ejecutar e Instalar
Una vez satisfecho con el dry-run, aplica los cambios reales. El script pedirá confirmación para funcionalidades de escritorio que podría deshabilitar.
3
Ejecutar con nivel moderado (por defecto)
Modo interactivo, nivel moderate. El script solicitará confirmación para IPv6, mDNS, KDE Connect o Samba.
4
Responder a las preguntas interactivas
El script preguntará si deseas deshabilitar ciertas funcionalidades de escritorio. Responde según tus necesidades — en un entorno de escritorio con GNOME, probablemente quieras mantener mDNS activo.
5
Reiniciar el sistema
sudo reboot — es obligatorio para que los cambios de kernel (sysctl), servicios y configuraciones de boot surtan efecto completo.
bash — ejecución estándar
# Ejecutar con nivel moderate (por defecto), modo interactivo
sudo ./fortress_improved.sh

# Reiniciar para aplicar todos los cambios de kernel y servicios
sudo reboot
Script ejecutándose con módulos completados y mensaje SUCCESS
Ejecución real del script — módulos aplicados con [SUCCESS]
⚙️
Flags y Opciones de Línea de Comando
Combina estas opciones para personalizar exactamente qué módulos se aplican, con qué nivel de seguridad y si la ejecución debe ser interactiva o no.
Flag Opción larga Descripción y ejemplo
-l --level Nivel de seguridad: low, moderate, high, paranoid.
Ej: sudo ./fortress_improved.sh -l high
-n --non-interactive Sin paradas para preguntas. Ideal para automatización y CI/CD.
Ej: sudo ./fortress_improved.sh -n
-e --enable Ejecutar solo los módulos indicados (separados por comas).
Ej: sudo ./fortress_improved.sh -e firewall,ssh_hardening
-x --disable Omitir módulos específicos. Útil si ya tienes ClamAV o AIDE configurados.
Ej: sudo ./fortress_improved.sh -x clamav,aide
-r --restore Revertir cambios usando la copia de seguridad automática del script.
Ej: sudo ./fortress_improved.sh --restore
-R --report Auditoría del estado actual de seguridad sin aplicar cambios.
Ej: sudo ./fortress_improved.sh --report
--dry-run Simular todos los cambios sin aplicar nada. Combinar con -v para verbose completo.
-v --verbose Salida detallada de cada acción. Usar junto con --dry-run o ejecución real.
bash — ejemplos de combinaciones útiles
# Solo módulos firewall y SSH (rápido, sin tocar el resto)
sudo ./fortress_improved.sh -e firewall,ssh_hardening

# Nivel alto sin interacción (CI/CD, scripts automatizados)
sudo ./fortress_improved.sh -l high -n

# Nivel alto sin ClamAV (ya instalado por separado)
sudo ./fortress_improved.sh -l high -x clamav

# Solo auditoría — ver estado actual sin cambiar nada
sudo ./fortress_improved.sh --report

# Verificar el hardening aplicado
sudo ./verify_fortress.sh
📊
Niveles de Seguridad
Elige el nivel adecuado a tu entorno. Cuanto más alto el nivel, más restricciones — algunos pueden romper funcionalidades de escritorio.
low -l low
🖥️ Entornos de aprendizaje y desarrollo. Mínimo impacto en funcionalidad.
Incluye: reglas de firewall básicas, endurecimiento de SSH manteniendo autenticación por contraseña.
moderate -l moderate (default)
🖥️ Escritorio y uso general. Equilibrio entre seguridad y usabilidad.
Incluye: firewall completo, Fail2Ban, auditd, endurecimiento básico del kernel.
high -l high
🖧 Servidores de producción y usuarios con altas exigencias de seguridad.
Incluye: todo lo de moderate + endurecimiento de kernel más estricto + restricciones de dispositivos USB.
paranoid -l paranoid
🔒 Máxima seguridad. No recomendado para escritorio — restricciones muy severas.
Incluye: hardening de kernel más agresivo, Zero GRUB timeout, restricciones USB más estrictas.
⚠️ Nivel paranoid en escritorio: Las restricciones son tan severas que pueden romper funcionalidades cotidianas. Reserva este nivel para servidores sin acceso físico donde la seguridad es absolutamente prioritaria.
🧩
21 Módulos de Hardening
El dry-run simuló con éxito todos estos módulos. Cada uno puede activarse o desactivarse individualmente con -e / -x.
🔄
Actualizaciones del sistema
Actualiza paquetes y configura actualizaciones de seguridad automáticas (unattended-upgrades).
🔑
SSH Hardening
Deshabilita login de root, configura solo autenticación por clave (en niveles altos), cambia parámetros del servidor SSH.
🔥
Firewall UFW
Configura reglas de UFW. En nivel moderate+ cierra todos los puertos excepto los explícitamente permitidos.
🚫
Fail2Ban
Bloqueo automático de IPs con intentos de fuerza bruta contra SSH y otros servicios.
📋
auditd
Configura el subsistema de auditoría del kernel para registrar accesos a archivos sensibles y cambios de privilegios.
🧪
Lynis
Ejecuta el escáner de auditoría de seguridad Lynis y genera un informe detallado del estado del sistema.
🦠
ClamAV
Instala y configura el antivirus ClamAV con escaneos programados y actualización automática de firmas.
🔎
Scanners de Rootkits
Instala rkhunter y chkrootkit para detección de rootkits y malware a nivel de sistema.
📁
AIDE — Integridad de Archivos
Configura AIDE (Advanced Intrusion Detection Environment) para detectar cambios no autorizados en archivos del sistema.
⚙️
Parámetros de Kernel (sysctl)
Aplica configuraciones de seguridad al kernel: deshabilita IPv4/IPv6 forwarding, SYN cookies, protección contra ataques de red.
🔐
Memoria Compartida
Asegura /dev/shm con opciones de montaje noexec,nodev,nosuid para prevenir ejecución de código malicioso.
🛡️
AppArmor
Configura y activa perfiles de AppArmor para confinar aplicaciones con acceso limitado al sistema de archivos y red.
🔒
Políticas de Contraseñas
Configura PAM con políticas de contraseñas fuertes: longitud mínima, complejidad, historial e intentos fallidos.
👤
Acceso Root
Restringe el acceso directo de root: deshabilita login en consola, limita el uso de su solo al grupo sudo.
🌐
Configuración IPv6
Endurece o deshabilita IPv6 según el nivel de seguridad y las necesidades del entorno (previa confirmación interactiva).
🔌
Políticas USB
Restringe el uso de dispositivos USB. En nivel high+ se bloquea el montaje automático de nuevos dispositivos.
💾
Deshabilitar FS sin usar
Carga en lista negra módulos de sistemas de archivos no necesarios (cramfs, freevxfs, jffs2, hfs, etc.).
🖥️
Seguridad de Boot
Asegura la configuración de GRUB: parámetros del kernel seguros, restricciones de acceso al modo recovery.
⏰
NTP — Sincronización de Tiempo
Configura la sincronización segura de tiempo, necesaria para la correcta correlación de logs y certificados.
🧹
Remover Paquetes Innecesarios
Desinstala paquetes superfluos que amplían la superficie de ataque sin aportar funcionalidad necesaria.
📊
Informe de Seguridad
Genera un informe HTML detallado en /root/security_hardening_report_*.html con el estado antes/después.
🖥️
Caso de Uso: Escritorio Local
Para entornos de escritorio Ubuntu con GNOME, el nivel moderate por defecto es el más equilibrado.
bash — escritorio Ubuntu (recomendado)
# 1. Siempre hacer dry-run primero
sudo ./fortress_improved.sh --dry-run -v

# 2. Aplicar (modo interactivo, level moderate)
sudo ./fortress_improved.sh

# 3. Reiniciar
sudo reboot

# 4. Verificar el hardening aplicado
sudo ./verify_fortress.sh
🖧
Caso de Uso: Servidor Remoto
En servidores remotos, el nivel high no interactivo es lo recomendado — pero DEBES configurar las claves SSH antes de ejecutar el script.
🚨 ADVERTENCIA SERVIDORES REMOTOS: El nivel high deshabilita la autenticación por contraseña en SSH. Si ejecutas el script sin tener una clave SSH configurada y probada, quedarás bloqueado fuera del servidor sin posibilidad de recuperación remota.

Orden obligatorio: (1) Configura claves SSH → (2) Prueba el acceso con clave → (3) Ejecuta el script.
bash — servidor remoto (nivel high, no interactivo)
# ANTES: verificar que el acceso SSH por clave funciona
ssh -i ~/.ssh/tu_clave usuario@servidor

# Dry-run en servidor
sudo ./fortress_improved.sh --dry-run -v -l high

# Aplicar: nivel high, no interactivo (ideal para scripts)
sudo ./fortress_improved.sh -l high -n

# Reiniciar el servidor
sudo reboot