Securización avanzada de Apache WEB SERVER
Utilizando aislamiento chroot

Agregar un "jail" (jaula) a la configuración de Apache2 implica aislar aún más los VirtualHosts utilizando técnicas de contención, como chroot o containers (por ejemplo, Docker). Esto limita el acceso de cada VirtualHost a un entorno restringido, reduciendo el riesgo de que un atacante pueda acceder a otros recursos del sistema.

A continuación, te explico cómo podrías implementar un enfoque de "jail" para aislar tus VirtualHosts:

Enjaular (chroot) un VirtualHost en Apache 2.4 es un proceso que implica aislar el entorno de un sitio web específico dentro de un directorio raíz (chroot jail) para mejorar la seguridad. Esto limita el acceso del sitio web al sistema de archivos del servidor, restringiéndolo solo a los archivos y directorios dentro de ese entorno aislado.

A continuación, te explico los pasos para configurar un VirtualHost en un entorno chroot en Apache 2.4:


1. Preparar el entorno chroot

Primero, crea un directorio que servirá como la raíz del entorno chroot para el VirtualHost.


sudo mkdir -p /var/chroot/example.com

Dentro de este directorio, debes replicar la estructura de directorios necesaria para que Apache y el sitio web funcionen correctamente. Esto incluye:

  • Binarios y librerías: Copia los binarios y librerías necesarios para que Apache y cualquier otro software (como PHP) funcione dentro del entorno chroot.

  • Archivos del sitio web: Coloca los archivos del sitio web en el directorio correspondiente (por ejemplo, /var/chroot/example.com/var/www/html).

Ejemplo de estructura básica:


/var/chroot/example.com/
├── bin
├── lib
├── lib64
├── usr
├── etc
│   └── apache2
│       └── sites-available
└── var
    └── www
        └── html

2. Copiar binarios y librerías

Usa ldd para identificar las dependencias de los binarios de Apache y copia los archivos necesarios al entorno chroot.

Por ejemplo, para copiar las dependencias de /usr/sbin/apache2:


sudo ldd /usr/sbin/apache2 | grep -o '/.* ' | xargs -I {} cp --parents {} /var/chroot/example.com/

Repite este proceso para otros binarios o herramientas que necesites dentro del entorno chroot (por ejemplo, bash, ls, etc.).


3. Configurar el VirtualHost en Apache

Edita el archivo de configuración del VirtualHost (por ejemplo, /etc/apache2/sites-available/example.com.conf) y configura el DocumentRoot para que apunte al directorio dentro del entorno chroot.


<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/chroot/example.com/var/www/html

    <Directory /var/chroot/example.com/var/www/html>
        AllowOverride None
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

4. Configurar el entorno chroot en Apache

Para que Apache funcione dentro del entorno chroot, debes usar la directiva ChrootDir en la configuración global de Apache o en el archivo de configuración del VirtualHost.

Edita el archivo de configuración global de Apache (/etc/apache2/apache2.conf) o el archivo del VirtualHost y agrega:


<IfModule unixd_module>
    ChrootDir /var/chroot/example.com
</IfModule>

5. Reiniciar Apache

Después de realizar los cambios, reinicia Apache para aplicar la configuración:


sudo systemctl restart apache2

6. Verificar el funcionamiento

Accede al sitio web desde un navegador o usa herramientas como curl para verificar que el VirtualHost funciona correctamente dentro del entorno chroot.


curl http://example.com

Consideraciones adicionales

  • Permisos: Asegúrate de que los permisos de los archivos y directorios dentro del entorno chroot sean correctos para que Apache pueda acceder a ellos.

  • Logs: Configura los archivos de registro para que Apache pueda escribir en ellos dentro del entorno chroot.

  • Seguridad: Revisa y ajusta la configuración de seguridad para evitar fugas de información o accesos no autorizados.


Este proceso es avanzado y requiere un buen entendimiento de Apache y sistemas Linux. Si no estás familiarizado con estas configuraciones, te recomiendo probar en un entorno de desarrollo antes de implementarlo en producción.




2. Usar Contenedores (Docker) para Aislar VirtualHosts

Docker es una opción más moderna y flexible para aislar aplicaciones. Puedes crear un contenedor para cada VirtualHost, lo que proporciona un aislamiento completo a nivel de sistema operativo.

Pasos para configurar Docker:

  1. Crear un Dockerfile para cada VirtualHost:

    • Crea un archivo Dockerfile para cada VirtualHost que instale Apache y configure el sitio web.

    • Ejemplo de Dockerfile:

       
       
      FROM ubuntu:latest
      RUN apt-get update && apt-get install -y apache2
      COPY dominio1 /var/www/html
      EXPOSE 80
      CMD ["apache2ctl", "-D", "FOREGROUND"]
  2. Construir y ejecutar los contenedores:

    • Construye la imagen Docker para cada VirtualHost.

    • Ejecuta los contenedores en puertos diferentes.

    • Ejemplo:


      docker build -t dominio1 .
      docker run -d -p 8081:80 --name dominio1 dominio1
      
      docker build -t dominio2 .
      docker run -d -p 8082:80 --name dominio2 dominio2
  3. Configurar un Proxy Inverso (opcional):

    • Si deseas que ambos VirtualHosts estén disponibles en el puerto 80, puedes usar un proxy inverso como Nginx o Apache para redirigir el tráfico a los contenedores.

    • Ejemplo de configuración de Nginx:


      server {
          listen 80;
          server_name dominio1.com;
          location / {
              proxy_pass http://localhost:8081;
          }
      }
      
      server {
          listen 80;
          server_name dominio2.com;
          location / {
              proxy_pass http://localhost:8082;
          }
      }

3. Usar AppArmor o SELinux para Aislamiento Adicional

Si no deseas usar chroot o Docker, puedes reforzar la seguridad utilizando perfiles de AppArmor o SELinux para restringir el acceso de Apache a los directorios de cada VirtualHost.

Ejemplo con AppArmor:

  1. Crear un perfil de AppArmor para Apache:

    • Crea un perfil personalizado para Apache que restrinja el acceso a los directorios de cada VirtualHost.

    • Ejemplo:


      /usr/sbin/apache2 {
          /var/www/dominio1/** r,
          /var/www/dominio2/** r,
          deny /var/www/dominio1/* /var/www/dominio2/*,
      }
  2. Aplicar el perfil:

    • Carga el perfil en AppArmor y asígnalo al proceso de Apache.

    • Ejemplo:


      apparmor_parser -r /etc/apparmor.d/apache2

4. Combinar Enfoques

Para un aislamiento máximo, puedes combinar varias técnicas:

  • Usar chroot para aislar el sistema de archivos.

  • Usar AppArmor o SELinux para restringir permisos.

  • Usar Docker para un aislamiento completo a nivel de sistema operativo.


Consideraciones Finales

  • Complejidad: El uso de chroot o Docker añade complejidad a la configuración y mantenimiento del servidor.

  • Rendimiento: Docker puede introducir una pequeña sobrecarga, pero proporciona un aislamiento más robusto.

  • Compatibilidad: Asegúrate de que todas las dependencias y configuraciones funcionen correctamente dentro del entorno aislado.

Si buscas una solución rápida y moderna, Docker es la mejor opción. Si prefieres un enfoque más tradicional, chroot es una alternativa viable.

Securización avanzada de Apache WEB SERVER
Shopicardiacom, S.L., David Casas 15 February, 2025
Share/Comparte post
Archive
Sign in to leave a comment


Securización básica de Apache WEB SERVER
Aplica modificaciones esenciales para mejorar la seguridad de tu servidor web