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:

  1. Es complejo de configurar (y un error puede romper servicios)
  2. Hay una creencia de que “afecta el rendimiento”
  3. 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

  1. SELinux desactivado o recién instalado
  2. Activar modo PERMISIVO (no bloquea nada, solo aprende)
  3. Usar el servidor con normalidad por días o semanas
  4. Revisar logs: ausearch -ts recent -m avc
  5. Si hay denegaciones: generar políticas con audit2allow
  6. Repetir hasta que no haya denegaciones por un buen tiempo
  7. 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.


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