ModSecurity es un módulo de firewall de aplicaciones web (WAF) ampliamente utilizado que ayuda a proteger aplicaciones y servidores web de diversas amenazas y ataques como inyecciones SQL, cross-site scripting (XSS), entre otros. Integrarlo con Nginx permite filtrar y monitorear las solicitudes HTTP, brindando una capa adicional de seguridad para aplicaciones web.
ModSecurity actúa como un Web Application Firewall (WAF) que intercepta y analiza el tráfico HTTP antes de que llegue a la aplicación. Se configura en Nginx para aplicar reglas de seguridad que detectan y bloquean actividades sospechosas o maliciosas. Se puede utilizar con el conjunto de reglas de la OWASP ModSecurity Core Rule Set (CRS), que cubre las amenazas web más comunes.
Para usar ModSecurity en Nginx, necesitas instalar el módulo ModSecurity. Aquí se detallan los pasos básicos para su instalación en sistemas basados en Ubuntu, aunque el proceso es similar en otras distribuciones.
sudo apt update
sudo apt install libmodsecurity-dev libpcre3 libpcre3-dev libxml2 libxml2-dev \
libyajl-dev pkg-config doxygen build-essential git
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
./build.sh
./configure
make
sudo make install
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
./configure --with-compat --add-dynamic-module=../ModSecurity-nginx
make modules
sudo cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules
nginx.conf
para cargar el módulo ModSecurity.
load_module modules/ngx_http_modsecurity_module.so;
Una vez que ModSecurity está instalado, se configura en el archivo de configuración de Nginx para proteger las solicitudes entrantes mediante reglas.
Edita el bloque de configuración del servidor o ubicación en nginx.conf
para activar ModSecurity.
http {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
server {
listen 80;
server_name ejemplo.com;
location / {
proxy_pass http://backend;
}
}
}
En este ejemplo:
modsecurity on;
habilita ModSecurity.
modsecurity_rules_file
especifica el archivo principal de reglas de ModSecurity.
El OWASP Core Rule Set (CRS) es un conjunto de reglas recomendadas para ModSecurity. Puedes instalarlo y configurarlo de la siguiente manera:
git clone https://github.com/coreruleset/coreruleset.git /etc/nginx/modsec-crs
cd /etc/nginx/modsec-crs
cp crs-setup.conf.example crs-setup.conf
Edita el archivo /etc/nginx/modsec/main.conf
para incluir las reglas básicas y el conjunto de reglas CRS.
SecRuleEngine On
Include /etc/nginx/modsec-crs/crs-setup.conf
Include /etc/nginx/modsec-crs/rules/*.conf
3. Habilitar ModSecurity en el servidor Nginx: Asegúrate de que main.conf
esté definido como modsecurity_rules_file
en el archivo de configuración de Nginx.
Directiva | Descripción |
---|---|
SecRuleEngine
|
Activa (On ), desactiva (Off ) o solo monitorea (DetectionOnly ) las reglas de ModSecurity.
|
SecRequestBodyAccess
|
Permite inspeccionar el cuerpo de la solicitud (útil para analizar peticiones POST). |
SecResponseBodyAccess
|
Permite inspeccionar el cuerpo de la respuesta. |
SecAuditLog
|
Especifica el archivo de registro de auditoría para almacenar detalles de las solicitudes analizadas. |
SecDebugLog
|
Archivo donde se almacenan los logs de depuración de ModSecurity. |
SecRule
|
Define una regla de seguridad específica dentro del archivo de configuración de ModSecurity. |
1. Modo de solo detección: Configura ModSecurity para registrar amenazas sin bloquearlas, útil en entornos de pruebas.
SecRuleEngine DetectionOnly
2. Habilitar logs de auditoría:
SecAuditEngine On
SecAuditLog /var/log/nginx/modsec_audit.log
3. Regla personalizada para bloquear acceso a una ruta específica:
Esta regla bloquea las solicitudes a /admin
desde IPs no permitidas.
SecRule REQUEST_URI "@beginsWith /admin" "id:12345,phase:1,deny,log,msg:'Acceso no autorizado a /admin'"
4. Ajustar niveles de severidad para amenazas específicas:
Puedes cambiar la severidad de amenazas específicas para que se registren como advertencias en lugar de errores críticos.
SecDefaultAction "phase:2,log,auditlog,pass"
SecRule ARGS "@contains ataque" "id:12346,phase:2,log,deny,severity:2,msg:'Intento de ataque detectado'"
DetectionOnly
al principio, para evitar bloqueos inesperados mientras se ajustan las reglas.
Para más detalles sobre la configuración y uso de ModSecurity con Nginx, consulta la documentación oficial de ModSecurity y la documentación del OWASP Core Rule Set.
Jorge García
Fullstack developer