Modsecurity es un firewall de aplicaciones web (WAF, por sus siglas en inglés). Es un programa que se encarga de vigilar y proteger tu servidor web frente a ataques maliciosos. Funciona como un módulo que se instala en servidores como Apache, Nginx o IIS y viene incluido en los paneles de Plesk por defecto.
ModSecurity analiza todas las solicitudes que llegan a tu sitio web (como cuando alguien visita una página o envía un formulario) y decide si son seguras o no. Si detecta algo sospechoso, bloquea la solicitud antes de que cause daño. Como por ejemplo:
En ocasiones, sobre todo al inicio de un proyecto web, la aplicación Modsecurity puede dar muchos falsos positivos, esto quiere decir que el programa interpreta que algunos scripts de la web son peligrosos, cuando solo son funciones verídicas de la web. Esto es debido a que el conjunto de reglas con el que trabaja Modsecurity es un genérico y abarca un gran número de casos.
En los casos en los que tenemos errores y bloqueos en nuestra web, que no sabemos de donde vienen, es muy posible que sean debidos a Modsecurity.
En esta guía te explicaremos cómo detectar si Modsecurity está bloqueando algún proceso y cómo añadirlo a la lista de excepciones, para que no sea bloqueado.
Primero de todo, deberás determinar cuál es tu IP pública. Puedes hacerlo accediendo por ejemplo a la web: https://www.whatismyip.org
Ve a la web que te da el error y sigue los pasos que ejecutastes con anterioridad para reproducir el error.
Ahora tienes que revisar el contenido del fichero "error_log" del dominio afectado. Esto lo puedes hacer de varias formas:
Accede al administrador de archivos del dominio y dentro de la carpeta "logs", abre o descarga el fichero "error_log" para examinarlo:
Si tienes experiencia trabajando con la consola de Linux (SSH), puede que te resulte más fácil acceder directamente al archivo para buscar la información que necesitas:
$> cd /var/www/vhosts/DOMINIO/logs
Busca la cadena Modsecurity en este fichero y filtra los resultados por tu IP:
$> grep -i Modsecurity error_log | grep <LA-DIRECCIÓN-IP>
[Fri Nov 24 06:31:19.625467 2023] [security2:error] [pid 60765] [client IP:56086] [client IP] ModSecurity: [file "/etc/httpd/conf/modsecurity.d/rules/comodo_free/26_Apps_WordPress.conf"] [line "155"] [id "225170"] [rev "3"] [msg "COMODO WAF: Sensitive Information Disclosure Vulnerability in WordPress 4.7 (CVE-2017-5487)||DOMINIO|F|2"] [severity "CRITICAL"] [tag "CWAF"] [tag "WordPress"] Warning. Operator EQ matched 0 at REQUEST_COOKIES_NAMES. [hostname "DOMINIO"] [uri "/wp-json/wp/v2/users"] [unique_id "ZWA1Jx9D4MDGxYbXZTzsIgAAACM"], referer: http://DOMINIO/wp-login.phphttp://DOMINIO/wp-login.php
Puedes obtener un resultado o varios. En todos los casos debes buscar la ID de la regla que nos afecta (En el ejemplo sería: [id "225170"] ). Ahora podemos deshabilitar esta regla desde Plesk.
Se puede hacer de dos formas: a nivel de servidor de manera que se aplicará a todos los hostings o bien solo a nivel de dominio con el que estamos trabajando.
Para deshabilitar una regla para todo el servidor, accede a “Herramientas y configuración” y luego, haz clic sobre la opción de “Firewall para aplicaciones web (Modsecurity)”:
En la parte inferior de la pantalla, en la sección "Desactivación de reglas de seguridad" hay un cuadro de texto a la derecha de "ID's de reglas de seguridad" donde debes pegar el ID (solo el número) de la regla a desactivar (en nuestro ejemplo 225170). Hay que poner un ID por línea. Finalmente pulsa el botón “Aceptar”.
Para deshabilitar una regla a nivel solo de un dominio, accede a "Sitios web y Dominos", luego haz clic en la pestaña “Panel de información” del dominio y haz clic en “Firewall para aplicaciones Web”:
En la parte inferior de la pantalla, en la sección "Desactivación de reglas de seguridad" hay un cuadro de texto a la derecha de "ID's de reglas de seguridad" donde debes pegar el ID (solo el número) de la regla a desactivar (en nuestro ejemplo 225170). Hay que poner un ID por línea:
Una vez añadidas todas las reglas pulsa en “Aceptar” al pie de página:
Y con esto, la regla que indica que no se bloquee este recursos, ¡ya estará añadida!
Una vez realizados estos pasos debes repetir la acción que ha desencadenado el error, ya sea accediendo acceso a la web, al formulario, etc... y comprobar si el problema se ha solucionado.