Seguridad en Servidores Linux: Hardening y Cumplimiento CIS
La seguridad en servidores Linux no es un lujo, es una necesidad operativa. Cada día, miles de sistemas son escaneados por bots y atacantes en busca de configuraciones débiles, puertos abiertos o servicios mal asegurados. El hardening Linux (endurecimiento) es el proceso sistemático de reducir la superficie de ataque de un sistema, eliminando servicios innecesarios, aplicando políticas de acceso estrictas y asegurando que cada capa del sistema operativo esté configurada de forma segura.
Una de las metodologías más aceptadas globalmente para lograr este objetivo son los CIS benchmarks, guías de configuración segura desarrolladas por el Center for Internet Security. Estas guías cubren desde el kernel hasta las aplicaciones, y son la base para la auditoría Linux y el cumplimiento normativo en entornos corporativos.
¿Por qué es crítico el Hardening en Linux?
Linux domina el mundo de los servidores web, cloud, bases de datos y contenedores. Sin embargo, su flexibilidad es también su talón de Aquiles. Una instalación por defecto de cualquier distribución (Ubuntu Server, CentOS, Rocky, Debian) incluye servicios, usuarios y configuraciones que rara vez son necesarias en producción.
El hardening Linux persigue estos objetivos fundamentales:
- Minimizar la superficie de ataque: Cada servicio en ejecución es un vector potencial. Apagar lo que no se usa es la regla de oro.
- Principio de mínimo privilegio: Usuarios, procesos y aplicaciones deben tener solo los permisos estrictamente necesarios.
- Defensa en profundidad: Múltiples capas (firewall, SELinux/AppArmor, auditoría, cifrado) que protegen incluso si una capa falla.
- Cumplimiento normativo: Para sectores como finanzas, salud o gobierno, cumplir con estándares como PCI-DSS, HIPAA o ISO 27001 es obligatorio. Los CIS benchmarks son el camino más directo para demostrar ese cumplimiento.
[INFO] El 80% de las vulnerabilidades críticas explotadas en Linux se deben a configuraciones incorrectas o servicios innecesarios, no a bugs del kernel. El hardening previene estos fallos.
CIS Benchmarks: El estándar de referencia para la seguridad
Los CIS benchmarks son documentos que detallan configuraciones de seguridad específicas para sistemas operativos, aplicaciones, cloud providers y dispositivos de red. Para Linux, existen benchmarks dedicados a distribuciones concretas (RHEL 9, Ubuntu 22.04, Debian 12, etc.) y uno genérico (CIS Distribution Independent Linux).
Estructura de un benchmark CIS
Cada benchmark organiza sus recomendaciones en niveles:
- Nivel 1: Configuraciones de seguridad básicas que no afectan negativamente al rendimiento ni a la funcionalidad. Son el punto de partida obligatorio.
- Nivel 2: Configuraciones más restrictivas que pueden romper funcionalidades específicas. Se aplican solo si el entorno lo soporta.
- Nivel 3 (o Stig): Configuraciones extremas, típicas de entornos militares o de alta seguridad.
Las recomendaciones se agrupan en secciones como:
- 1. Initial Setup (particiones, actualizaciones, GPG)
- 2. Services (deshabilitar servicios innecesarios)
- 3. Network Configuration (firewall, kernel parameters)
- 4. Logging and Auditing (rsyslog, auditd)
- 5. Access, Authentication, and Authorization (PAM, sudo, SSH)
- 6. System Maintenance (permisos de archivos, cron)
Herramientas para aplicar CIS benchmarks
Aplicar manualmente cientos de reglas es inviable. Por suerte existen herramientas automatizadas:
- OpenSCAP: La herramienta de código abierto más potente. Escanea, evalúa y remedia configuraciones basadas en SCAP (Security Content Automation Protocol), que incluye los perfiles CIS.
- CIS-CAT Pro: Herramienta comercial del propio CIS, muy precisa pero de pago.
- Ansible + roles CIS: Existen roles de Ansible (como
devsec.hardening) que aplican las reglas CIS automáticamente. - Lynis: Aunque no es específico CIS, es excelente para auditoría general y da pistas sobre qué hardening aplicar.
# Ejemplo de escaneo con OpenSCAP usando perfil CIS para Ubuntu 22.04
oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_cis --results-arf results.xml --report report.html /usr/share/xml/scap/ssg/content/ssg-ubuntu2204-ds.xml
Este comando genera un reporte HTML detallado con cada regla evaluada (pass/fail) y recomendaciones.
Pasos prácticos para un Hardening Linux efectivo
No necesitas aplicar los 300 controles de un benchmark de golpe. Aquí tienes una guía práctica para empezar:
1. Gestión de actualizaciones y repositorios
Un sistema desactualizado es un sistema comprometido. La regla CIS más básica es mantener el software al día.
# Configurar actualizaciones automáticas de seguridad (Ubuntu/Debian)
apt install unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades
# En RHEL/CentOS/Rocky
dnf install dnf-automatic
systemctl enable --now dnf-automatic.timer
[WARNING] No configures actualizaciones automáticas sin probarlas en staging. Un paquete conflictivo puede romper tu aplicación.
2. Particionado seguro y montaje de sistemas de archivos
Las particiones separadas para /tmp, /var, /home y /opt no solo mejoran el rendimiento, sino que permiten aplicar opciones de montaje restrictivas.
# En /etc/fstab, añadir opciones como noexec, nosuid, nodev
/dev/sda1 /tmp ext4 defaults,nosuid,nodev,noexec 0 0
/dev/sda2 /var ext4 defaults,nosuid,nodev 0 0
3. Configuración del kernel (sysctl)
Parámetros del kernel que mitigan ataques de red y kernel exploits.
# /etc/sysctl.d/99-cis-hardening.conf
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
kernel.randomize_va_space = 2
kernel.kptr_restrict = 2
fs.suid_dumpable = 0
Aplicar con sysctl -p /etc/sysctl.d/99-cis-hardening.conf.
4. Servicios mínimos y eliminación de paquetes innecesarios
Revisa qué servicios arrancan con el sistema:
systemctl list-unit-files --type=service --state=enabled
# Deshabilitar servicios como avahi-daemon, cups, rpcbind, etc.
systemctl disable avahi-daemon
5. Endurecimiento de SSH
El servicio SSH es la puerta de entrada principal. Configúralo al máximo:
# /etc/ssh/sshd_config
Port 2222 # Cambiar puerto
Protocol 2
PermitRootLogin no # Nunca permitir root directo
PubkeyAuthentication yes
PasswordAuthentication no # Solo claves
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 0
AllowUsers tu_usuario
[TIP] Usa
ssh-keygen -t ed25519para generar claves más seguras que RSA de 4096 bits.
6. Firewall restrictivo
Usa ufw (en Ubuntu) o firewalld (en RHEL) para aplicar reglas por defecto denegadas.
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp # Puerto SSH cambiado
ufw enable
7. Auditoría con auditd
El demonio auditd registra eventos críticos: cambios en binarios, accesos a archivos sensibles, intentos de autenticación fallidos.
# Reglas básicas en /etc/audit/rules.d/audit.rules
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /sbin/insmod -p x -k modules
-a always,exit -F arch=b64 -S execve -k processes
Auditoría Linux: Cómo medir el cumplimiento
La auditoría Linux no es un evento único. Debe ser un proceso continuo. Las herramientas clave son:
OpenSCAP (línea de comandos)
Como vimos antes, genera informes XML y HTML detallados. Puedes integrarlo en pipelines CI/CD para auditar cada nuevo servidor antes de ponerlo en producción.
Lynis (auditoría general)
Lynis es perfecto para un escaneo rápido que cubre hardening general, no solo CIS.
lynis audit system --quick
Scripts personalizados
Muchos SysAdmin crean scripts bash que verifican puntos específicos del benchmark CIS. Por ejemplo, verificar que PermitRootLogin esté en no:
if grep -q "^PermitRootLogin no" /etc/ssh/sshd_config; then
echo "PASS: Root login deshabilitado"
else
echo "FAIL: Root login permitido"
fi
Herramientas de cumplimiento continuo
- Wazuh: Plataforma SIEM open source que incluye decodificadores para eventos CIS y alertas en tiempo real.
- Osquery: Permite consultar el estado del sistema con SQL, ideal para verificar cumplimiento a gran escala.
Cumplimiento normativo: De CIS a la auditoría real
El cumplimiento normativo exige demostrar que se siguen buenas prácticas. Los CIS benchmarks son el puente entre la configuración técnica y los requisitos legales.
Relación con estándares comunes
| Estándar | Cómo ayuda CIS |
|---|---|
| PCI-DSS | Requisito 2.2: Desarrollar configuraciones seguras. CIS cubre hardening de SO. |
| HIPAA | Regla de Seguridad: Controles de acceso, integridad, auditoría. CIS proporciona las reglas concretas. |
| ISO 27001 | Anexo A.12.6.1: Gestión de vulnerabilidades técnicas. CIS es la base para parchear y endurecer. |
| NIST 800-53 | Controles AC-3 (Access Enforcement), CM-6 (Configuration Settings). CIS mapea directamente. |
Cómo documentar el cumplimiento
- Elige el perfil CIS correcto para tu distribución y versión.
- Aplica las reglas usando OpenSCAP o Ansible.
- Genera un reporte (HTML o XML) que muestre el porcentaje de cumplimiento.
- Corrige los fallos (remediación manual o automática con
--remediate). - Repite el escaneo hasta alcanzar el objetivo (normalmente >90% en nivel 1).
- Guarda los reportes como evidencia para auditores externos.
[INFO] Muchos auditores aceptan los reportes de OpenSCAP como prueba válida de cumplimiento. Asegúrate de que el reporte incluya la fecha, el perfil usado y el hostname.
Automatización del hardening con Ansible
Para entornos con decenas o cientos de servidores, la automatización es obligatoria. El rol devsec.hardening de Ansible aplica reglas CIS de forma idempotente.
# playbook.yml
- hosts: all
become: yes
roles:
- devsec.hardening
Este rol configura:
- SSH hardening
- sysctl seguro
- Fail2ban
- Actualizaciones automáticas
- Deshabilitación de servicios innecesarios
- Permisos de archivos sensibles
Puedes personalizarlo mediante variables:
# vars.yml
ssh_permit_root_login: false
ssh_port: 2222
ssh_password_authentication: false
Conclusión: El hardening es un viaje, no un destino
La seguridad en servidores Linux no se logra aplicando un script y olvidándose. Es un proceso iterativo que combina hardening Linux técnico, auditoría Linux periódica y cumplimiento normativo documentado.
Los CIS benchmarks te dan la hoja de ruta. Herramientas como OpenSCAP, Lynis y Ansible te dan los medios. Y tu criterio como SysAdmin decide qué reglas aplicar según el riesgo y la criticidad del sistema.
Empieza por lo básico: actualiza, deshabilita servicios, endurece SSH, aplica firewall y audita. Luego escala a automatización y cumplimiento continuo. Tus servidores (y tus auditores) te lo agradecerán.
[WARNING] No copies y pegues configuraciones sin entenderlas. Un sysctl mal aplicado puede dejar tu servidor inaccesible. Siempre prueba en un entorno de staging.
