Introducción
Apache Web Server es un componente crítico en aplicaciones web, ya que generalmente se encuentra en el borde de la red y está expuesto a ataques. Configuraciones por defecto pueden revelar información sensible, facilitando ataques como XSS, inyecciones PHP y gestión inadecuada de sesiones.
Según Acunetix, el 84% de las aplicaciones probadas tienen vulnerabilidades. Esta guía práctica proporciona habilidades esenciales para asegurar Apache en sistemas Unix.
1. Eliminación de Fugas de Información
1.1 Eliminar la Versión del Servidor
Exponer la versión del servidor facilita la identificación de vulnerabilidades conocidas. Para eliminarlo:
- Edita el archivo
httpd.conf
:ServerTokens Prod ServerSignature Off
- Reinicia Apache:
systemctl restart apache2
1.2 Desactivar Listado de Directorios
Para evitar que los usuarios vean archivos dentro de directorios, modifica httpd.conf
:
<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>
Reinicia Apache tras la modificación.
1.3 Deshabilitar ETags
Las ETags pueden filtrar información sobre el sistema de archivos:
FileETag None
2. Autorización
2.1 Ejecutar Apache con Usuario No-Privilegiado
Por defecto, Apache corre como nobody
o daemon
. Es recomendable usar un usuario específico:
groupadd apache
useradd -G apache apache
chown -R apache:apache /opt/apache
Edita httpd.conf
:
User apache
Group apache
Reinicia Apache para aplicar cambios.
2.2 Proteger Directorios de Configuración
Cambia permisos de bin
y conf
para restringir acceso:
chmod -R 750 /opt/apache/bin /opt/apache/conf
2.3 Deshabilitar ".htaccess"
Evita que usuarios sobrescriban configuraciones del servidor:
<Directory />
AllowOverride None
</Directory>
2.4 Restringir Métodos HTTP
Para permitir solo los métodos esenciales:
<LimitExcept GET POST HEAD>
deny from all
</LimitExcept>
3. Seguridad en Aplicaciones Web
3.1 Deshabilitar HTTP TRACE
Para evitar ataques Cross-Site Tracing:
TraceEnable off
3.2 Configurar Cookies con HttpOnly y Secure
Protege contra ataques de secuestro de sesiones:
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
3.3 Prevenir Clickjacking
Evita que el sitio se cargue en un iframe malicioso:
Header always append X-Frame-Options SAMEORIGIN
3.4 Deshabilitar SSI
Evita inyecciones de código SSI:
<Directory /opt/apache/htdocs>
Options -Indexes -Includes
</Directory>
3.5 Activar Protección XSS
Bloquea intentos de XSS en navegadores compatibles:
Header set X-XSS-Protection "1; mode=block"
3.6 Forzar Uso de HTTP 1.1
Para evitar vulnerabilidades de HTTP 1.0:
RewriteEngine On
RewriteCond %{THE_REQUEST} !HTTP/1.1$
RewriteRule .* - [F]
3.7 Reducir Tiempo de Timeout
Para mitigar ataques DoS como Slow Loris:
Timeout 60
4. Seguridad SSL
4.1 Generar Claves SSL Seguras
Usar claves de 2048 bits:
openssl req -out mi_certificado.csr -newkey rsa:2048 -nodes -keyout mi_llave.key
4.2 Configurar Cifrado SSL Seguro
Edita httpd-ssl.conf
:
SSLCipherSuite HIGH:!MEDIUM:!aNULL:!MD5:!RC4
4.3 Deshabilitar SSLv2 y SSLv3
Para mitigar ataques como POODLE:
SSLProtocol -ALL +TLSv1 +TLSv1.1 +TLSv1.2
5. Implementación de ModSecurity
5.1 Instalación
Instala dependencias:
yum install httpd-devel pcre-devel libxml2-devel lua-devel curl-devel
Descarga e instala ModSecurity:
wget https://github.com/SpiderLabs/ModSecurity/releases/latest/download/modsecurity.tar.gz
tar -xvzf modsecurity.tar.gz
cd modsecurity
./configure --with-apxs=/usr/bin/apxs
make && make install
5.2 Configuración
Carga módulos en httpd.conf
:
LoadModule security2_module modules/mod_security2.so
Habilitar reglas base:
<IfModule security2_module>
Include conf/crs/modsecurity_crs_10_setup.conf
Include conf/crs/base_rules/*.conf
</IfModule>
Reinicia Apache.
6. Registro y Monitoreo de Seguridad
6.1 Configurar Logs de Acceso
Capturar eventos detallados es fundamental para detectar anomalías y posibles ataques. Configura Apache para registrar detalles adicionales:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T" extended
CustomLog /var/log/apache2/access.log extended
6.2 Configurar Logs de Errores
Para mejorar la capacidad de diagnóstico, aumenta el nivel de detalle de los logs de errores:
ErrorLog /var/log/apache2/error.log
LogLevel warn
Si se requieren más detalles en caso de ataques:
LogLevel info
6.3 Implementar Monitoreo en Tiempo Real
Para analizar registros en tiempo real y responder a incidentes:
tail -f /var/log/apache2/access.log
Herramientas recomendadas:
- GoAccess: Analiza logs de Apache en tiempo real con interfaz visual.
- Fail2Ban: Bloquea IPs maliciosas detectadas en los logs.
- ModSecurity AuditLog: Proporciona detalles de eventos de seguridad.
apt install goaccess
fail2ban-client status
7. Mantenimiento y Mejores Prácticas
7.1 Aplicar Actualizaciones de Seguridad
Siempre mantén Apache y los módulos actualizados:
apt update && apt upgrade -y
Configura actualizaciones automáticas:
apt install unattended-upgrades
7.2 Deshabilitar Módulos No Necesarios
Reduce la superficie de ataque deshabilitando módulos innecesarios:
a2dismod autoindex
Lista módulos activos:
a2query -m
7.3 Configurar Permisos de Archivos y Directorios
Asegura que Apache no tenga permisos excesivos:
chmod -R 750 /etc/apache2/
chown -R root:www-data /etc/apache2/
Restringe la edición de configuraciones críticas:
chattr +i /etc/apache2/apache2.conf
Conclusión
Siguiendo estas prácticas, Apache Web Server será más seguro y resistente a ataques. Implementa estas configuraciones y monitorea regularmente para mantener un entorno seguro y confiable.