Si alguna vez has visto un mensaje de SELinux y sentiste que necesitabas un doctorado para entenderlo, no estás solo. Para muchos, SELinux es un dolor de cabeza: complejo, confuso y capaz de arruinarte un paso a producción un viernes por la tarde.
Pero también es una de las herramientas de seguridad más poderosas que puedes tener en tu servidor. Y aunque muchos admins lo desactivan por frustración, la realidad es que apagar SELinux es como quitarle el candado a la puerta porque no encuentras la llave.
¿Qué es SELinux y por qué es tan importante?
Imagina que tu servidor Linux es un edificio. Normalmente, la seguridad se basa en el portero: si tienes llaves (permisos de usuario), puedes entrar a cualquier oficina. Eso es el control de acceso “tradicional” (DAC).
SELinux (Security-Enhanced Linux) es como ponerle a cada persona una tarjeta que solo abre ciertas puertas, en ciertos horarios, y además tiene un guardia de seguridad que vigila cada paso que das. Aunque tengas llaves, el guardia puede decir: “Tú no puedes entrar aquí porque no está en tu trabajo”.
En términos técnicos: es un sistema de control de acceso obligatorio (MAC) desarrollado originalmente por la NSA. Bien configurado, puede blindar tu servidor incluso si un atacante compromete una cuenta de usuario o un servicio.
¿Qué protege realmente?
| Escenario | Sin SELinux | Con SELinux |
|---|---|---|
| Un atacante explota un bug en Apache | Puede leer /etc/shadow o ejecutar comandos | SELinux se lo impide aunque Apache tenga permisos |
| Un usuario normal intenta leer archivos de sistema | Depende de permisos POSIX | SELinux lo bloquea aunque los permisos digan “sí” |
| Un script malicioso logra ejecutarse | Corre con todos los permisos del usuario | SELinux lo mete en una jaula |
SELinux aplica el principio de mínimo privilegio: cada proceso tiene exactamente los permisos que necesita y nada más.
¿Por qué la gente le tiene miedo? (Y por qué no deberías)
Las razones más comunes para desactivar SELinux son:
- Es complejo de configurar (y un error puede romper servicios)
- Hay una creencia de que “afecta el rendimiento”
- Muchos tutoriales de internet dicen que lo apagues
Cómo dijo Jack… Vamos por partes.
El mito del rendimiento (y por qué no es excusa)
“¿Y no afecta el rendimiento?” Es la pregunta del millón. Y la respuesta corta es: sí, un poco, pero en el mundo real casi no lo notas. Es como ir con una mochila liviana. La seguridad que ganas es infinitamente mayor que la milésima de segundo que pierdes.
Te muestro con números. Todas las unidades están en microsegundos (µs). Un microsegundo es una millonésima de segundo.
| Qué mide | Sin SELinux | Con SELinux | Diferencia |
|---|---|---|---|
| Abrir y cerrar un archivo | 11.0 µs | 14.0 µs | +27% |
| Consultar atributos de un archivo | 8.06 µs | 10.3 µs | +28% |
| Crear un archivo nuevo | 22.0 µs | 26.0 µs | +18% |
| Crear un proceso (fork) | 499 µs | 505 µs | +1% |
¿Ves esos números? Son microsegundos. En el tiempo que parpadeas, pasan unos 300 mil microsegundos. Esas diferencias son casi imperceptibles.
Eso sí, en ambientes muy específicos (como servidores de alta concurrencia o trading de alta frecuencia) a veces se puede notar. Pero es raro. Y aún en esos casos, vale la pena tenerlo activo. La seguridad que ganas es mucho mayor que lo que pierdes en velocidad.
Ahora, veamos ejemplos del mundo real:
| Escenario | Sin SELinux | Con SELinux | Qué significa |
|---|---|---|---|
| Servidor web uso normal | 1231 req/seg | 1221 req/seg | -0.8% (insignificante) |
| Base de datos PostgreSQL | 100% base | 99-101% | ±1%. Ni se mueve |
| Compilar el kernel | 11:14 min | 11:15 min | 1 minuto más en una hora |
La conclusión corta: el rendimiento NO es excusa para desactivar SELinux. El costo real en un servidor típico es entre 1% y 5%. A cambio, blindas tu sistema.
El verdadero problema: es complejo de configurar
Esta es la razón válida. SELinux tiene una curva de aprendizaje empinada. Y sí, un error puede hacer que tu servidor no arranque, que Apache no sirva páginas o que no puedas hacer login.
Pero para eso existe el modo permisivo.
La solución intermedia: modo “permisivo” (permissive)
Aquí va un secreto que no muchos cuentan: SELinux tiene un modo “permisivo”. En este modo, SELinux no bloquea nada, solo mira y registra en los logs lo que habría bloqueado.
¿Qué significa esto en la práctica?
- Puedes tener SELinux activo sin miedo a que rompa nada
- Mientras usas tu servidor con normalidad, SELinux va anotando en los logs: “esto lo habría bloqueado”
- Tú puedes revisar esos logs (ausearch -ts recent -m avc) y ver qué cosas “molestarían” a SELinux
- Vas corrigiendo los problemas o generando políticas a medida (audit2allow)
- Cuando llevas semanas o meses sin ver denegaciones importantes, recién ahí lo activas en modo “estricto” (enforcing)
Es como tener un guardia de práctica que te avisa “oye, si esto fuera de verdad, te lo hubiera bloqueado”, pero sin interrumpirte.
El flujo de trabajo recomendado
- SELinux desactivado o recién instalado
- Activar modo PERMISIVO (no bloquea nada, solo aprende)
- Usar el servidor con normalidad por días o semanas
- Revisar logs: ausearch -ts recent -m avc
- Si hay denegaciones: generar políticas con audit2allow
- Repetir hasta que no haya denegaciones por un buen tiempo
- Activar modo ENFORCING (ya empieza a bloquear)
Te dejo un script para empezar sin miedo
Para hacer todo esto más sencillo, he preparado un script que analiza tu servidor y configura SELinux en modo permisivo de forma segura. No te va a dejar tirado.
El script:
- Detecta servicios activos y configura sus puertos
- Restaura contextos de archivos comunes
- Te deja SELinux en modo permisivo para que puedas probar
- Te da las instrucciones para generar políticas si ves denegaciones
- NO activa el modo enforcing bajo ninguna circunstancia
Accede al script aquí: https://github.com/OrangeBox-Labs/Linux-Hardening/blob/main/selinux-secure-setup-README.md
Y si quieres ver el resto de scripts de hardening (SSH, contraseñas, firewall, etc.), aquí está el repositorio completo:
https://github.com/OrangeBox-Labs/Linux-Hardening
¿Qué ganas si activas SELinux?
| Beneficio | Explicación |
|---|---|
| Contención de vulnerabilidades | Si un servicio tiene un bug, SELinux limita el daño |
| Defensa en profundidad | Es una capa más de seguridad (no la única) |
| Cumplimiento normativo | PCI-DSS, ISO 27001 y CIS Benchmarks lo recomiendan o exigen |
| Protección contra 0-days | Mitiga vulnerabilidades desconocidas limitando permisos |
| Auditoría forense | Los logs de SELinux te dicen qué pasó en un ataque |
Caso real: ¿qué pasa si apagas SELinux?
He visto servidores donde apagan SELinux “porque molesta”. Llega un atacante, explota una vulnerabilidad en un plugin de WordPress y:
- Sin SELinux: recorre todo el sistema, roba configuraciones, instala backdoors
- Con SELinux: el proceso web solo puede escribir en ciertos directorios. El atacante choca contra un muro.
SELinux no es infalible, pero levanta una muralla enorme.
Resumen final
| Mito | Realidad |
|---|---|
| “SELinux hace lento el servidor” | El impacto es < 5%, casi imperceptible |
| “Es muy difícil de configurar” | El modo permisivo te permite aprender sin riesgos |
| “Con firewall y permisos basta” | El firewall controla redes, los permisos controlan usuarios. SELinux controla procesos |
| “En los tutoriales de internet lo apagan” | Esa es mala práctica. Los profesionales lo activan |
Mi recomendación final
No apagues SELinux. Déjalo al menos en modo permisivo. Así:
- Vas aprendiendo cómo funciona
- Tus logs te muestran qué necesita tu sistema
- Cuando lo actives en enforcing, tu servidor estará mucho más protegido
Y si necesitas ayuda, el script que te dejo hace el 80% del trabajo por ti.
¿Quieres más contenido?
Para que no te pierdas nada de lo que publicamos, aquí tienes todos nuestros canales.
-
** Blog técnico**
Profundizamos en hardening, Zero Trust y buenas prácticas para servidores.
Visita el blog de OrangeBox -
** Canal de YouTube**
Ataques reales, defensas paso a paso y guías en video.
Suscríbete a OrangeBox en YouTube -
** Repositorio en GitHub**
Todos nuestros scripts de hardening open-source para que los uses y modifiques.
Explora los scripts en GitHub
Si te fue útil este artículo, compartelo. Y si hay algún tema que quieras que tratemos, dejalo en los comentarios del canal de YouTube.
— Felipe Román, OrangeBox Labs