Configuración de Seguridad y Kernel de Linux: sysctl, PAM y Control de Acceso
Asegurar un sistema Linux requiere un enfoque de múltiples capas que comienza en el kernel y se extiende a través del sistema de autenticación hasta los controles de acceso y el montaje de almacenamiento. Esta guía proporciona una referencia detallada de los componentes de configuración de seguridad más críticos en un entorno Linux moderno.
1. Parámetros del Kernel con sysctl
El comando sysctl y el archivo /etc/sysctl.conf (junto con los archivos en /etc/sysctl.d/) son las herramientas principales para configurar los parámetros del kernel de Linux en tiempo de ejecución. Muchos de estos parámetros tienen importantes implicaciones de seguridad.
Uso de un Generador de Configuración sysctl
Si bien puede editar manualmente los archivos de configuración, un generador de configuración sysctl (sysctl config generator) puede ayudar a garantizar que no se pierdan configuraciones críticas de endurecimiento. Los parámetros comunes a configurar incluyen:
- Endurecimiento de Red: Deshabilitar el reenvío de IP (
net.ipv4.ip_forward = 0), ignorar las redirecciones ICMP (net.ipv4.conf.all.accept_redirects = 0) y habilitar la protección TCP SYN cookie (net.ipv4.tcp_syncookies = 1). - Protección de Memoria: Habilitar ASLR (Aleatorización del diseño del espacio de direcciones) a través de
kernel.randomize_va_space = 2. - Restricción de Fuga de Información: Restringir el acceso a los registros del kernel (
kernel.dmesg_restrict = 1) y a la tabla de símbolos del kernel (kernel.kptr_restrict = 2).
Tabla de Referencia de Parámetros del Kernel de Linux
| Parámetro | Valor Recomendado | Descripción |
|---|---|---|
net.ipv4.tcp_syncookies |
1 |
Protege contra ataques SYN flood. |
net.ipv4.conf.all.rp_filter |
1 |
Habilita el filtrado de ruta inversa para evitar la suplantación de IP. |
kernel.randomize_va_space |
2 |
ASLR completo para evitar vulnerabilidades de desbordamiento de búfer. |
fs.protected_fifos |
2 |
Evita escrituras no autorizadas en FIFOs en directorios con permisos de escritura para todos. |
2. Módulos de Autenticación Enchufables (PAM)
PAM proporciona una forma flexible de gestionar la autenticación para varios servicios sin modificar los servicios mismos. Configurar PAM correctamente es esencial para aplicar políticas de contraseñas sólidas y autenticación de múltiples factores.
Consideraciones del Generador de Configuración PAM
Un generador de configuración PAM (PAM config generator) normalmente se centra en los archivos en /etc/pam.d/. Los módulos clave a incluir por seguridad son:
- pam_cracklib.so / pam_pwquality.so: Aplica requisitos de complejidad de contraseña (longitud, tipos de caracteres).
- pam_tally2.so / pam_faillock.so: Bloquea cuentas después de un cierto número de intentos de inicio de sesión fallidos para evitar ataques de fuerza bruta.
- pam_unix.so: El módulo estándar para verificar contraseñas contra
/etc/shadow.
Ejemplo de configuración para la calidad de la contraseña:
password requisite pam_pwquality.so retry=3 minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root
3. Control de Acceso Obligatorio: SELinux y AppArmor
A diferencia del Control de Acceso Discrecional (DAC) estándar basado en usuarios y grupos, el Control de Acceso Obligatorio (MAC) permite a los administradores definir políticas de seguridad detalladas para cada proceso y archivo en el sistema.
Generador de Políticas SELinux vs. Generador de Perfiles AppArmor
- SELinux (Security-Enhanced Linux): Utiliza un sistema de etiquetado para cada objeto (proceso, archivo, puerto). Es potente pero tiene una curva de aprendizaje pronunciada. A menudo se necesita un generador de políticas SELinux (SELinux policy generator) (como
audit2allow) para manejar denegaciones complejas. - AppArmor: Utiliza perfiles basados en rutas. Generalmente se considera más fácil de configurar que SELinux. Un generador de perfiles AppArmor (AppArmor profile generator) (como
aa-genprof) puede ayudar a crear perfiles monitoreando el comportamiento de la aplicación.
Comparación: SELinux vs. AppArmor
| Característica | SELinux | AppArmor |
|---|---|---|
| Tipo de Control | Basado en etiquetas | Basado en rutas |
| Complejidad | Alta | Media |
| Predeterminado en | RHEL, CentOS, Fedora | Ubuntu, Debian, openSUSE |
| Flexibilidad | Extremadamente alta | Alta |
| Curva de Aprendizaje | Pronunciada | Moderada |
4. Montaje Seguro de Almacenamiento con /etc/fstab
El archivo /etc/fstab define cómo se montan los dispositivos de almacenamiento. El uso de las opciones de montaje correctas puede prevenir muchos tipos de ataques, como la ejecución de binarios maliciosos desde directorios temporales.
Banderas de Seguridad del Generador /etc/fstab
Al usar un generador de /etc/fstab (/etc/fstab generator), asegúrese de incluir estas banderas de seguridad para particiones que no sean del sistema (como /tmp, /var o unidades externas):
nodev: Evita la interpretación de dispositivos especiales de bloque o caracteres en el sistema de archivos.nosuid: Deshabilita los bits de identificación de usuario o de grupo.noexec: Evita la ejecución de binarios en el sistema de archivos.
Ejemplo de entrada segura para /tmp:
UUID=... /tmp tmpfs rw,nosuid,nodev,noexec 0 0
FAQ: Configuración de Seguridad en Linux
P: ¿Debería usar SELinux o AppArmor?
R: Generalmente depende de su distribución. Use lo que sea compatible de forma nativa y esté habilitado de forma predeterminada (SELinux para sistemas basados en RHEL, AppArmor para sistemas basados en Debian), ya que tendrán las políticas preconfiguradas más completas.
P: ¿Por qué net.ipv4.ip_forward está deshabilitado por defecto?
R: Habilitar el reenvío de IP permite que su sistema actúe como un enrutador, lo que puede ser un riesgo de seguridad si no se pretende explícitamente y no se protege adecuadamente con un firewall.
P: ¿Qué sucede si configuro mal PAM?
R: Un PAM mal configurado puede bloquear a todos (incluido el root) fuera del sistema. Siempre mantenga una sesión de root activa abierta cuando pruebe cambios en PAM, o tenga un plan de recuperación (como arrancar desde un Live CD).
P: ¿Cómo puedo verificar que se aplicaron mis configuraciones de sysctl?
R: Use el comando sysctl -a para ver todos los parámetros actuales del kernel y sus valores. También puede verificar parámetros específicos, por ejemplo, sysctl net.ipv4.tcp_syncookies.