fbpx
León Desarrollo - Programación WordPress
Sistemas Linux y programación

Instalar y configurar ModSecurity en Ubuntu


Instalar ModSecurity en Ubuntu

Paso 1: Instalar dependencias necesarias

Primero, necesitas algunas dependencias. Abre una terminal y ejecuta:

sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev libxml2 libxml2-dev libaprutil1 libaprutil1-dev libssl-dev

Paso 2: Descargar e instalar ModSecurity

Vamos a descargar y compilar ModSecurity:

  1. Descargar ModSecurity en Ubuntu:
   cd /usr/local/src
   sudo git clone https://github.com/SpiderLabs/ModSecurity
   cd ModSecurity
   sudo git checkout v3/master
   sudo git submodule init
   sudo git submodule update
  1. Compilar e instalar ModSecurity:
   sudo ./build.sh
   sudo ./configure
   sudo make
   sudo make install

Paso 3: Descargar e instalar el conector de Nginx

Ahora necesitamos el conector para Nginx:

  1. Descargar el conector:
   cd /usr/local/src
   sudo git clone https://github.com/SpiderLabs/ModSecurity-nginx.git
  1. Descargar y compilar Nginx con el módulo ModSecurity:
   cd /usr/local/src
   sudo wget http://nginx.org/download/nginx-1.18.0.tar.gz
   sudo tar -xzvf nginx-1.18.0.tar.gz
   cd nginx-1.18.0
   sudo ./configure --with-compat --add-dynamic-module=../ModSecurity-nginx
   sudo make modules
   sudo cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules

Paso 4: Configurar Nginx para usar ModSecurity

  1. Editar la configuración de Nginx: Abre tu archivo de configuración principal de Nginx, normalmente ubicado en /etc/nginx/nginx.conf, y añade las siguientes líneas:
   load_module modules/ngx_http_modsecurity_module.so;

   http {
       ...
       modsecurity on;
       modsecurity_rules_file /etc/nginx/modsec/main.conf;
       ...
   }
  1. Configurar ModSecurity: Vamos a crear un archivo de configuración principal para ModSecurity:
   sudo mkdir /etc/nginx/modsec
   sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf
   sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/

Abre el archivo /etc/nginx/modsec/modsecurity.conf y cambia la línea SecRuleEngine DetectionOnly a SecRuleEngine On para activar la protección activa.

  1. Añadir reglas de OWASP: Descarga y configura las reglas básicas de OWASP:
   cd /etc/nginx/modsec
   sudo git clone https://github.com/coreruleset/coreruleset.git
   sudo mv coreruleset/crs-setup.conf.example coreruleset/crs-setup.conf

Luego, edita el archivo /etc/nginx/modsec/main.conf y añade las siguientes líneas para incluir las reglas de OWASP:

   sudo nano /etc/nginx/modsec/main.conf

Añade estas líneas:

   Include /etc/nginx/modsec/modsecurity.conf
   Include /etc/nginx/modsec/coreruleset/crs-setup.conf
   Include /etc/nginx/modsec/coreruleset/rules/*.conf

Paso 5: Reiniciar Nginx

Finalmente, reinicia Nginx para que los cambios surtan efecto:

sudo systemctl restart nginx

Verificación

Para verificar que ModSecurity está funcionando, puedes revisar los logs de Nginx o crear una regla de prueba:

echo 'SecRule ARGS:testparam "@contains test" "id:1234,deny,log,status:403,msg:\'Test ModSecurity Rule Matched\'"' | sudo tee -a /etc/nginx/modsec/main.conf

Luego, intenta acceder a una URL con el parámetro testparam=test (por ejemplo, http://tusitio.com/?testparam=test). Deberías ver un mensaje de bloqueo en los logs de Nginx.

Habilitar ModSecurity para un sitio específico

Vamos a ver cómo se puede hacer esto:

  1. Configurar ModSecurity en el bloque de servidor específico: Abre el archivo de configuración del servidor virtual para el sitio donde deseas habilitar ModSecurity. Esto suele estar en /etc/nginx/sites-available/ o en el archivo principal de configuración de Nginx.
   sudo nano /etc/nginx/sites-available/tu-sitio
  1. Añadir configuración de ModSecurity: Dentro del bloque server {} del sitio específico, añade las directivas para habilitar ModSecurity. Aquí hay un ejemplo:
   server {
       listen 80;
       server_name tu-sitio.com;
       root /var/www/tu-sitio;

       modsecurity on;
       modsecurity_rules_file /etc/nginx/modsec/main.conf;

       location / {
           try_files $uri $uri/ =404;
       }
   }
  1. Configurar ModSecurity para ubicaciones específicas (opcional): Si deseas habilitar ModSecurity solo para ciertas ubicaciones dentro de tu sitio, puedes hacerlo dentro del bloque location {}:
   server {
       listen 80;
       server_name tu-sitio.com;
       root /var/www/tu-sitio;

       location /protegido {
           modsecurity on;
           modsecurity_rules_file /etc/nginx/modsec/main.conf;
           try_files $uri $uri/ =404;
       }

       location / {
           try_files $uri $uri/ =404;
       }
   }

Reiniciar Nginx

Después de hacer estos cambios, asegúrate de verificar la configuración de Nginx y reiniciarlo:

  1. Verificar la configuración:
   sudo nginx -t
  1. Reiniciar Nginx:
   sudo systemctl restart nginx

Verificación

Para verificar que ModSecurity está funcionando solo para el sitio o ubicación específica, puedes revisar los logs de Nginx o crear una regla de prueba, como lo hicimos antes:

echo 'SecRule ARGS:testparam "@contains test" "id:1234,deny,log,status:403,msg:\'Test ModSecurity Rule Matched\'"' | sudo tee -a /etc/nginx/modsec/main.conf

Luego, intenta acceder a una URL con el parámetro testparam=test en la parte del sitio protegida por ModSecurity (por ejemplo, http://tu-sitio.com/protegido?testparam=test). Deberías ver un mensaje de bloqueo en los logs de Nginx solo para esa parte del sitio.

Con esta configuración, puedes ajustar ModSecurity de manera granular, habilitándolo solo en los sitios o ubicaciones que consideres necesario.

Monitorización de ModSecurity

  1. Configurar el archivo de log: ModSecurity puede escribir sus logs en un archivo separado. Asegúrate de que tu archivo de configuración principal de ModSecurity en Ubuntu(modsecurity.conf) está configurado para registrar eventos:
   sudo nano /etc/nginx/modsec/modsecurity.conf

Busca y ajusta las siguientes líneas para activar los logs y definir el archivo de log:

   SecAuditEngine RelevantOnly
   SecAuditLog /var/log/nginx/modsec_audit.log
   SecAuditLogParts ABIJDEFHZ
  • SecAuditEngine RelevantOnly asegura que solo los eventos relevantes se registren.
  • SecAuditLog /var/log/nginx/modsec_audit.log define la ubicación del archivo de log.
  • SecAuditLogParts ABIJDEFHZ define las partes del log que se registrarán.
  1. Revisar los logs: Puedes usar herramientas como tail para monitorear los logs en tiempo real:
   sudo tail -f /var/log/nginx/modsec_audit.log

Busca entradas que indiquen eventos de detección, revisa los detalles del ataque detectado y determina si es un falso positivo.

Ajuste de Reglas

  1. Identificar falsos positivos: Al revisar los logs, si identificas que ModSecurity está detectando algo que no es un ataque (falso positivo), anota el id de la regla y los detalles del evento.
  2. Crear excepciones: Puedes crear excepciones para reglas específicas en el archivo de configuración de reglas de ModSecurity (main.conf). Por ejemplo, si la regla con id 981176 está generando falsos positivos, puedes deshabilitarla para un sitio específico o en general:
   SecRuleRemoveById 981176

Añade esta línea al archivo /etc/nginx/modsec/main.conf o en un archivo de configuración específico para un sitio en particular:

   sudo nano /etc/nginx/modsec/main.conf
  1. Ajustar reglas específicas: Si necesitas ajustar una regla específica, puedes modificarla o crear una nueva regla en el archivo de configuración. Por ejemplo:
   SecRule ARGS:testparam "@contains test" "id:1234,phase:2,deny,log,status:403,msg:'Test ModSecurity Rule Matched'"

Prácticas adicionales

  1. Configurar un servidor de logs centralizado: Para facilitar la monitorización, considera configurar un servidor de logs centralizado como ELK Stack (Elasticsearch, Logstash, Kibana). Esto te permitirá visualizar y analizar los logs de ModSecurity de manera más eficiente.
  2. Configurar alertas: Puedes configurar alertas para eventos específicos usando herramientas como swatch o logwatch, que te notificarán cuando ocurran ciertos tipos de eventos en los logs de ModSecurity.

Ejemplo de ajuste de regla:

Supongamos que encuentras un falso positivo relacionado con una regla que detecta ciertos parámetros en las URLs. Puedes deshabilitar la regla problemática o ajustarla para que sea menos estricta.

  1. Identificar la regla en el log:
   Message: Warning. Pattern match "(?:\\b(?:(?:s(?:elect\\b.{1,100}?\\b(?:from|where)|(?:how\\s*to\\s*)?grant\\s*execute(?:\\s*on\\s*procedure|\\s*any))|c(?:on(?:vert\\b.{1,100}?\\b(...." at ARGS:testparam. [file "/etc/nginx/modsec/coreruleset/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf"] [line "209"] [id "942260"] [rev "2"] [msg "Detects MySQL comment-/space-obfuscated injections and backtick termination"] [data "Matched Data: select from found within ARGS:testparam: select from users where 1=1"]
  1. Deshabilitar la regla (si es un falso positivo):
   SecRuleRemoveById 942260

Añade esta línea al archivo /etc/nginx/modsec/main.conf o a la configuración específica de tu sitio.

  1. Revisar y ajustar: Si la regla es necesaria pero demasiado estricta, puedes ajustar su lógica. Esto puede requerir conocimientos avanzados sobre cómo funcionan las reglas de ModSecurity.

Reiniciar Nginx

Cada vez que hagas cambios en la configuración de ModSecurity, asegúrate de verificar la configuración y reiniciar Nginx:

  1. Verificar la configuración:
   sudo nginx -t
  1. Reiniciar Nginx:
   sudo systemctl restart nginx

Con estos pasos, deberías poder monitorizar y ajustar ModSecurity de manera efectiva, permitiéndote afinar la configuración y asegurar tu sitio sin causar falsos positivos.

Suscríbete

Si quieres estar al día con las novedades de este sitio te recomiendo que te suscribas.

Comentarios

Deja un comentario


2018 animaciones animación Aranda array atributos añade base de datos buscar categoría css curso diseño Duero emprendimiento fechas fiduero guía imagen imagenes inauguracion instalar Isilla linux local mac node.js pagina pagina web php post problemas producto red servicio servidor solución split sql sql server stock string windows woocommerce wordpress