Dentro del Web Application Firewall de ReportedIP Hive
ReportedIP Hive ofrece un Web Application Firewall que analiza cada solicitud antes de que WordPress la procese. Compara la URL, la cadena de consulta, el cuerpo de la solicitud y el agente de usuario con un conjunto de reglas firmadas, bloqueando la SQL Injection, el XSS, el recorrido de rutas, la inyección de comandos y una docena de tipos de ataques más; además, las reglas se actualizan automáticamente sin necesidad de lanzar una nueva versión del plugin.
El motor y su conjunto de reglas predeterminadas son gratuitos en todos los planes. Esta guía explica cómo el cortafuegos inspecciona el tráfico, de dónde proceden las reglas, cómo se evita que una expresión regular errónea provoque la caída del sitio web, cómo eliminar un False Positive desde el panel de administración y cómo funciona la protección opcional previa a WordPress. La información se refiere a Hive en su versión 2.1.21, tras la ronda de refuerzo de seguridad realizada entre las versiones 2.1.5 y 2.1.21.
Lo que comprueba el cortafuegos de WordPress en cada solicitud
El WAF se ejecuta en el init gancho con prioridad 1, inmediatamente después de la comprobación de bloques de IP de Hive. Una solicitud procedente de una IP ya bloqueada nunca llega al cortafuegos, por lo que no se desperdicia trabajo. Todo lo demás se inspecciona: la URI de la solicitud, la cadena de consulta, el cuerpo de la solicitud y el agente de usuario se simplifican y se comparan con el conjunto de reglas activo.
El coste es de unos 4 microsegundos de CPU por solicitud, sin consultas adicionales a la base de datos cuando existe una caché de objetos persistente. Las clases de ataque detectadas incluyen SQL Injection, cross-site scripting, recorrido de rutas, inyección de comandos y envoltorios LFI, además de SSRF, Log4Shell/JNDI, inyección de objetos PHP, inyección NoSQL, XXE, subidas de web-shell, CRLF e inyección de plantillas —cada una con su propio código de motivo de bloqueo—.
La inspección es de solo lectura y tiene en cuenta los False Positives. Los administradores que hayan iniciado sesión están exentos (los administradores pegan legítimamente código SQL y código en los editores), /wp-admin nunca se inspecciona, y las direcciones IP incluidas en la lista Whitelist se omiten. Una coincidencia se bloquea a través de la misma ruta 403, segura para la caché y codificada por referencia, que utilizan los demás sensores, o simplemente se registra cuando está activado el Report-Only Mode.
¿Por qué las Firewall Rules se encuentran en un servidor y no en el complemento?
La mayoría de los cortafuegos de WordPress tienen las firmas codificadas de forma fija, por lo que cada actualización de las reglas requiere el lanzamiento de un nuevo plugin. Hive lo hace al revés: las firmas proceden de la Rule API de reportedIP.com en forma de conjuntos de reglas versionados, firmados con Ed25519 y escalonados por niveles, que se sincronizan cada seis horas. Las nuevas firmas de ataque llegan a todas las instalaciones en cuestión de horas.
Hay cuatro conjuntos de reglas — waf, bot_signatures, disposable_domains y scan_paths. Cada uno está firmado con una firma Ed25519 independiente, y el complemento la verifica comparándola con un conjunto de claves públicas incluido (la actual y la siguiente, para la rotación) antes de aplicarla. Si la verificación falla, el feed tiene un tamaño excesivo o no se puede acceder al servidor, Hive recurre a un conjunto de reglas de referencia incluido. Una fuente manipulada o secuestrada no puede corromper las reglas, ni siquiera si se filtra una API Key o se rompe el cifrado TLS.
La configuración básica viene incluida en el complemento, por lo que el cortafuegos funciona totalmente sin conexión en el modo «Local Shield», sin necesidad de cuenta ni de conexiones salientes. La Rule Sync es opcional: solo se ejecuta en el modo «Community» si se ha configurado una API Key.
Nivel básico gratuito, funciones más avanzadas en la versión Professional
La regla de escalonamiento sigue el modelo de Paranoia Level del Conjunto de Reglas Básicas de OWASP, el estándar de facto para WAF utilizado por ModSecurity y Cloudflare.
| Paranoia Level | Personaje | Plan de la colmena Hive |
|---|---|---|
| PL1 | La configuración de referencia, ajustada para minimizar los False Positives, cubre el Top 10 de OWASP. | Free (paquete básico) |
| PL2 | Más vigilancia, unos cuantos False Positives más | Contributor (semanal) / Professional |
| PL3 | Ataques poco frecuentes, técnicas de ofuscación y cobertura de elusión de WAF, False Positives ocasionales | Professional (Priority Sync) |
La versión gratuita ofrece un cortafuegos eficaz con un bajo índice de False Positives: esa es la promesa de protección. La versión Professional añade los conjuntos de reglas PL2/PL3, más exhaustivos y actualizados con frecuencia, a través de Priority Sync, junto con las fuentes en tiempo real de rangos de IP de bots y dominios desechables.
Cómo evita Hive que una regla errónea provoque la caída de tu sitio web
Dado que los patrones proceden de un feed, una expresión regular mal formada supone un riesgo de primer orden: un retroceso catastrófico (ReDoS) llegó a dejar fuera de servicio a Stack Overflow durante 34 minutos. Hive se protege contra ello mediante varias capas de seguridad:
- Límite inferior de retroceso. Antes del bucle de inspección, Hive establece
pcre.backtrack_limita 100 000 (por debajo del valor predeterminado de 1 millón) y lo restablece después, limitando así el tiempo de ejecución en el peor de los casos por patrón. - Se produce un error de tipo «fail-open» en caso de error de expresión regular. Cuando un patrón alcanza el límite,
preg_match()devuelvefalse, en lugar de0o1— un salto silencioso si no está marcado. Hive tratafalsecomo «fail-open» más unwaf_pattern_error. Una regla defectuosa nunca bloquea el tráfico legítimo ni bloquea el acceso al sitio: la disponibilidad prima sobre el rigor. - Tamaño máximo del cuerpo: 8 KB. Las solicitudes de cuerpos de más de 8 KB omiten los grupos de cuerpos, por lo que la base de retroceso está acotada.
- Linter del lado del servidor. En reportedIP.com, cada patrón se comprueba para detectar posibles retrocesos catastróficos antes de que se firme; un patrón peligroso nunca llega a publicarse.
Los patrones seleccionados también dan prioridad a los grupos atómicos y a los cuantificadores posesivos, que no requieren retroceso, y el JIT de PCRE (activado por defecto en WordPress) agiliza la búsqueda de coincidencias.
Eliminar un False Positive desde el panel de administración, sin modificar el código
Cualquier cortafuegos basado en firmas puede marcar ocasionalmente una solicitud legítima de origen propio —por ejemplo, un generador de páginas que envía código HTML enriquecido, o un complemento de seguridad que procesa de forma legítima Payloads que parecen ataques—. Desde la versión 2.1.9, Hive gestiona esto del mismo modo que lo hacen las exclusiones de ModSecurity y la Allowlist de Wordfence: mediante una lista de excepciones gestionada por el backend, sin necesidad de código ni de desvíos «solo para informes».
- Un clic por cada entrada del registro. Cada bloqueo del WAF que aparece en el registro incluye una acción «Permitir» que crea una excepción específica para esa regla concreta en esa ruta. El registro de bloqueos recoge el valor coincidente, el destino inspeccionado, el método de solicitud, el URI, el agente de usuario y el Paranoia Level, de modo que es posible analizar la decisión sin necesidad de reproducir la solicitud.
- Con ámbito limitado, nunca global. Una excepción se aplica a una sola regla, a un grupo de reglas o —en el caso de un Endpoint propio— a todo el motor de una ruta, que opcionalmente puede restringirse a una dirección IP o un rango CIDR. Una excepción que afecte a todo el motor debe incluir una ruta o una dirección IP, de modo que el cortafuegos nunca pueda desactivarse por error en todo el sitio.
- A nivel de red y Free. Las excepciones se almacenan como datos a nivel de red (opción
reportedip_hive_waf_exceptions, esquemadb_version10) y están disponibles en todos los planes; el motor de protección en sí sigue siendo gratuito. - Esto también se aplica al filtro previo a WordPress. Extended Protection integra las mismas excepciones y las vuelve a integrar cada vez que cambia la Allowlist, de modo que un cliente al que hayas permitido el acceso en el panel de administración ya tiene acceso antes incluso de que se cargue WordPress.
El formulario de excepciones se explica por sí solo: el selector de ámbito muestra únicamente el campo relevante, y el campo de entrada ambiguo «ID de regla o grupo» se divide en un campo de ID de regla y un menú desplegable de grupos que se rellena con las categorías conocidas por el motor. Los desarrolladores también disponen de una vía de escape a nivel de código: el reportedip_hive_waf_bypass_routes filtro, que se compara mediante una prueba de anclaje str_starts_with comparación con la ruta REST resuelta—, de modo que un token de elusión en un parámetro de consulta no relacionado no puede desactivar el WAF.
Extended Protection: bloqueo antes de que se cargue WordPress
El initcortafuegos «-hook» se ejecuta una vez que WordPress se ha iniciado. Para garantizar la protección antes de que se ejecute el código de cualquier plugin, Hive ofrece un complemento opcional que ejecuta el WAF a través de la directiva auto_prepend_file —el mismo enfoque que Wordfence denomina «Extended Protection». Está desactivado por defecto y se suma al motor interno de WordPress, e inspecciona los cuerpos de las solicitudes igual que el motor principal (en la versión 2.1.10 se corrigió un error de elevación que hacía que la inspección del cuerpo fuera una operación nula silenciosa).
- Apache recibe una
php_value auto_prepend_filelínea escrita en un.htaccess. - PHP-FPM — incluido nginx. Hive detecta la SAPI de PHP-FPM antes de la cadena del servidor de nginx y escribe una ruta raíz del documento
.user.ini, que PHP-FPM respeta en cada solicitud, independientemente de loslocation. Desde la versión 2.1.17, esto cubre nginx automáticamente, sin necesidad de ningún paso manual; las versiones anteriores solo podían ofrecer un fragmento de código pegado a manolocationque solo protegía el bloque concreto en el que se insertaba. - Fragmento de código de reserva. En entornos que no dispongan de una SAPI FastCGI para PHP, Hive sigue generando una línea de php.ini / PHP-FPM-pool para copiar y pegar, así como un bloque de nginx
fastcgi_param PHP_VALUE; la pestaña «Configuración del servidor» muestra estos elementos siempre que la configuración generada automáticamente.user.iniaún no se haya aplicado.
Hay tres comportamientos de seguridad que hacen que el sistema de seguridad sea predecible. No realiza la inspección corporal a los usuarios que han iniciado sesión; detecta la wordpress_logged_in cookie, por lo que un editor que guarde una entrada a través de admin-ajax.php o la REST API nunca activará una firma XSS/SQLi (las reglas de URL y de agente de usuario siguen aplicándose, y el motor interno de WordPress sigue siendo el mecanismo de seguridad que tiene en cuenta las capacidades). Se autorrepara al activarlo o desactivarlo: desactivar el WAF o cambiarlo al modo de solo informe neutraliza también el filtro previo a WordPress, de modo que el cortafuegos nunca puede seguir aplicando restricciones una vez que se ha desactivado. Y su eliminación es a prueba de fallos: al desactivar el plugin, se eliminan las directivas que controla Hive y se deja un marcador de posición inerte en lugar de borrar el archivo de protección, de modo que una línea auto_prepend_file línea residual en una configuración de nginx o php.ini que Hive no pueda editar nunca pueda apuntar a un archivo que ya no existe y provocar un error 500 en el sitio.
La configuración es verificable: el estado indica si el control se ha ejecutado realmente para la solicitud actual —«Configuración completada» en cuanto funciona—, en lugar de tener que adivinarlo. El Setup Wizard guía a los nuevos usuarios a lo largo del proceso con valores predeterminados seguros.
Los códigos de referencia permiten convertir un bloque erróneo en una consulta de una sola línea
Cada bloque lleva un código de referencia con el que se puede establecer una correspondencia, como WAF_SQLI-3F9A2B71, que se muestra en la página del bloque y se envía como X-RIP-Ref encabezado. Un visitante que haya sido bloqueado por error introduce una cadena corta, y un administrador la compara con los registros; a continuación, la elimina con la acción «Permitir» de un solo clic si se trataba de un False Positive. El token es un hash unidireccional de la IP, el motivo y la hora, por lo que no revela ningún dato personal.
Preguntas frecuentes
¿El Web Application Firewall es gratuito?
Sí. El motor WAF y la configuración básica «OWASP Top 10 – Paranoia Level 1» están activos en todos los planes, incluidos el Free tier y el modo «Local Shield», totalmente sin conexión. El plan «Professional» añade conjuntos de reglas más avanzados de los niveles 2 y 3, así como fuentes de datos en tiempo real a través de Priority Sync.
¿El cortafuegos bloqueará mis propias tareas de administración?
No. Los administradores que hayan iniciado sesión están exentos, /wp-admin nunca se inspecciona, y el filtro previo a WordPress omite la inspección del cuerpo para cualquier usuario que haya iniciado sesión. Si un formulario del front-end o un Endpoint propio activa una regla, abre el registro del WAF, haz clic en «Permitir» en esa fila para crear una excepción específica, y ya está: no hace falta código ni ningún desvío «solo para informes».
¿Funciona el cortafuegos con Nginx?
Sí, y desde la versión 2.1.17, el guard previo a WordPress se configura automáticamente en Nginx al escribir un directorio raíz de documentos .user.ini que PHP-FPM respeta en cada solicitud. Si tu entorno desactiva los archivos INI por directorio, la pestaña «Configuración del servidor» muestra una línea de php.ini o nginx fastcgi_param que puedes pegar en su lugar.
¿Qué ocurre si no se puede acceder al servidor de reglas?
No se produce ningún fallo. El complemento sigue utilizando el último conjunto de reglas verificado, o la configuración de referencia incluida, y vuelve a intentar la sincronización más tarde. El cortafuegos nunca depende de una conexión activa para funcionar.