Para asegurar y aislar completamente dos VirtualHosts en Apache2, de manera que los visitantes de un VirtualHost no puedan acceder al directorio del otro, puedes seguir estas mejores prácticas:
1. Configuración de Permisos de Archivos y Directorios
Asegúrate de que los directorios raíz de cada VirtualHost tengan permisos restrictivos.
Los archivos y directorios deben ser propiedad del usuario y grupo correctos, y los permisos deben ser
755
para directorios y644
para archivos.Ejemplo:
chown -R www-data:www-data /var/www/virtualhost1 chmod -R 755 /var/www/virtualhost1
2. Uso de DocumentRoot
Separados
Cada VirtualHost debe tener un
DocumentRoot
separado y no debe haber superposición entre los directorios.Ejemplo:
<VirtualHost *:80> ServerName dominio1.com DocumentRoot /var/www/dominio1 <Directory /var/www/dominio1> AllowOverride None Require all granted </Directory> </VirtualHost> <VirtualHost *:80> ServerName dominio2.com DocumentRoot /var/www/dominio2 <Directory /var/www/dominio2> AllowOverride None Require all granted </Directory> </VirtualHost>
3. Restricción de Acceso entre VirtualHosts
Usa directivas
<Directory>
para restringir el acceso a los directorios de cada VirtualHost.Asegúrate de que no haya acceso cruzado entre los directorios.
Ejemplo:
<VirtualHost *:80> ServerName dominio1.com DocumentRoot /var/www/dominio1 <Directory /var/www/dominio1> AllowOverride None Require all granted </Directory> <Directory /var/www/dominio2> Require all denied </Directory> </VirtualHost> <VirtualHost *:80> ServerName dominio2.com DocumentRoot /var/www/dominio2 <Directory /var/www/dominio2> AllowOverride None Require all granted </Directory> <Directory /var/www/dominio1> Require all denied </Directory> </VirtualHost>
4. Uso de open_basedir
en PHP (si aplica)
Si estás usando PHP, configura
open_basedir
en cada VirtualHost para restringir el acceso a los archivos fuera del directorio raíz del VirtualHost.Ejemplo:
<VirtualHost *:80> ServerName dominio1.com DocumentRoot /var/www/dominio1 <Directory /var/www/dominio1> AllowOverride None Require all granted php_admin_value open_basedir /var/www/dominio1 </Directory> </VirtualHost> <VirtualHost *:80> ServerName dominio2.com DocumentRoot /var/www/dominio2 <Directory /var/www/dominio2> AllowOverride None Require all granted php_admin_value open_basedir /var/www/dominio2 </Directory> </VirtualHost>
5. Uso de Módulos de Seguridad
Habilita y configura módulos de seguridad como
mod_security
ymod_evasive
para proteger contra ataques comunes.mod_security
puede ayudar a prevenir inyecciones SQL, XSS, etc.mod_evasive
puede ayudar a prevenir ataques DDoS.
6. Configuración de SSL/TLS
Si es posible, configura SSL/TLS para cada VirtualHost para asegurar la comunicación entre el cliente y el servidor.
Usa certificados SSL válidos y considera la implementación de HSTS (HTTP Strict Transport Security).
7. Uso de SELinux
o AppArmor
(si aplica)
Si tu sistema lo soporta, usa
SELinux
oAppArmor
para restringir aún más el acceso a los archivos y directorios.Configura políticas específicas para cada VirtualHost.
8. Monitoreo y Logs
Configura logs separados para cada VirtualHost para monitorear el acceso y detectar cualquier actividad sospechosa.
Ejemplo:
<VirtualHost *:80> ServerName dominio1.com DocumentRoot /var/www/dominio1 ErrorLog /var/log/apache2/dominio1_error.log CustomLog /var/log/apache2/dominio1_access.log combined </VirtualHost> <VirtualHost *:80> ServerName dominio2.com DocumentRoot /var/www/dominio2 ErrorLog /var/log/apache2/dominio2_error.log CustomLog /var/log/apache2/dominio2_access.log combined </VirtualHost>
9. Actualizaciones y Parches
Mantén Apache2 y todos los módulos actualizados con las últimas versiones y parches de seguridad.
10. Firewall y Restricciones de Red
Configura un firewall (como
ufw
oiptables
) para restringir el acceso a los puertos necesarios.Considera el uso de VLANs o subredes separadas si los VirtualHosts deben estar completamente aislados a nivel de red.
Siguiendo estas prácticas, puedes asegurar y aislar completamente los dos VirtualHosts en tu servidor Apache2, minimizando el riesgo de que los visitantes de un VirtualHost accedan al directorio del otro.