Cortafuegos y WAF
Hive inspecciona las solicitudes en dos lugares que se comportan igual: un motor dentro de WordPress y una protección opcional que se ejecuta antes de que cargue WordPress. Las reglas no están escritas en el plugin, sino que llegan firmadas desde reportedip.com, con una base incluida que siempre funciona sin conexión. El motor es gratuito en todos los planes.
El motor dentro de WordPress
En init con prioridad 1, el motor compara el conjunto de reglas activo con la URI, la query string,
el cuerpo de la solicitud (también en una copia decodificada) y el user agent: inyección SQL, cross-site
scripting, path traversal, inyección de comandos, wrappers de inclusión de archivos, SSRF, Log4Shell, inyección de
objetos PHP, XXE, subida de web shells, CRLF e inyección de plantillas, user agents de escáneres. Un impacto
termina en la página de bloqueo 403 común.
- Seguro por diseño: expresiones regulares acotadas, una regla mal formada se omite y un error deja pasar la solicitud en lugar de tumbar el sitio.
- Sin falsas alarmas para tus editores: el motor no inspecciona a los usuarios con sesión que pueden editar contenido, ni wp-admin, cron o WP-CLI; la lista blanca siempre gana.
- Report-only: el cortafuegos puede registrar lo que bloquearía (
waf_would_block) sin bloquear. - Dónde: motor, modo y Paranoia Level en Protection → Firewall & Bots; sincronización de reglas y excepciones en Tools → Rules; el registro del cortafuegos en Activity.
Entrega firmada de reglas y Priority Sync
Los conjuntos de reglas llegan versionados y firmados con Ed25519 desde reportedip.com. El plugin comprueba cada conjunto con una clave pública que incluye y conserva la base incluida cuando un feed falta, es demasiado grande o no se verifica, así que un feed manipulado no puede cambiar tus reglas. Las nuevas firmas llegan a cada sitio conectado en horas, sin una nueva versión del plugin.
| Plan | Reglas | Actualización |
|---|---|---|
| Local Shield, cualquier plan | Base OWASP Top 10 incluida, Paranoia Level 1 | Con las actualizaciones del plugin |
| Free, Community Network | Conjunto del servidor en Paranoia Level 1, que cubre más que el incluido | Cada seis horas |
| Contributor | Priority Sync: Paranoia Level 2 y los feeds de rangos de direcciones de bots | Semanal |
| Professional y superiores | Priority Sync: Paranoia Level 3, rangos de bots, la lista en vivo de dominios de correo desechable | Diaria |
Paranoia Level 3 es estricto y detecta cargas ofuscadas, a costa de más falsos positivos; está pensado para operadores con experiencia. Contributor es un plan gratuito para cuentas que aportan datos, por ejemplo mediante un honeypot o el agente de Linux.
Extended Protection: la protección antes de WordPress
Una protección opcional por auto_prepend_file aplica las mismas reglas, excepciones, lista blanca y
bloqueos de IP antes de que cargue WordPress, así que una solicitud bloqueada no cuesta casi nada. Sus impactos se
escriben en una cola y se importan al registro y a la escalera de escalado; un bloqueo que pone el plugin llega a la
protección en la misma solicitud. Está desactivada por defecto y se configura en Tools →
Server:
- Apache y PHP-FPM (también nginx con PHP-FPM) se configuran automáticamente mediante
.htaccesso un.user.inien la raíz del documento. - Otros entornos reciben la línea para php.ini o el panel del alojamiento, o un fragmento
fastcgi_parampara nginx. - Usuarios con sesión: la protección omite la inspección del cuerpo cuando hay una cookie de sesión de WordPress, así que guardar contenido nunca la dispara; las reglas de URL y de user agent siguen aplicándose.
- Un estado fiable: la pestaña Server indica si la protección se ejecutó realmente en la solicitud actual, y el registro de disponibilidad avisa cuando no se puede escribir en su cola.
- Deja pasar ante errores y se retira con seguridad: cualquier error deja pasar la solicitud. Al desactivarla se eliminan las directivas que controla Hive y queda un archivo de relleno inactivo, así que una línea olvidada en una configuración editada a mano nunca apunta a un archivo que no existe. El modo report-only también la desactiva.
Excepciones para falsos positivos
Un formulario que acepta HTML, un maquetador que envía marcado sin procesar o una API que recibe muestras de ataques pueden disparar una firma de vez en cuando. Una excepción deja pasar ese caso concreto y el resto sigue protegido.
- Dónde: Tools → Rules → WAF Exceptions, o Allow en una fila del cortafuegos en el registro, que rellena una excepción acotada exactamente para esa regla en esa ruta.
- Alcance: una regla, un grupo de reglas o, para un endpoint propio, todo el motor en una ruta, opcionalmente limitado a una dirección o un rango. Una excepción para todo el motor siempre necesita una ruta o una dirección, así que el cortafuegos nunca se puede desactivar globalmente por accidente.
- Mantenla acotada: una regla en una ruta antes que un grupo, un grupo antes que todo el motor. La fila del registro muestra el valor coincidente, la parte inspeccionada, el método, la URI y el user agent y, para
admin-ajax.php, la acción AJAX. - Ambas capas: las excepciones se incorporan a la protección y se regeneran cada vez que cambia la lista. En una red se aplican a todos los sitios. Todos los planes.
- En código: el filtro
reportedip_hive_waf_bypass_routesexcluye rutas REST por un prefijo anclado de la ruta resuelta; solo funciona en el motor.
Códigos de referencia y la página de bloqueo
Cada bloqueo, del cortafuegos o de un sensor, lleva un código como WAF_SQLI-3F9A2B71 en la página de
bloqueo y en la cabecera X-RIP-Ref. Un visitante bloqueado por error indica el código y tú encuentras
la fila en el registro. El código es un hash unidireccional de dirección, motivo y hora, así que no revela nada.
Los textos de la página de bloqueo se pueden sustituir con el filtro
reportedip_hive_blocked_page_strings.
Cachés de página
La página de bloqueo define DONOTCACHEPAGE, DONOTCACHEDB y
DONOTCACHEOBJECT y envía Cache-Control: no-store, no-cache, must-revalidate, max-age=0,
Pragma: no-cache y los nocache_headers() de WordPress. WP Rocket, W3 Total Cache, WP Super
Cache y LiteSpeed Cache lo respetan, así que un atacante bloqueado nunca deja un 403 en caché para los visitantes
reales. La comprobación de formularios no lleva nada específico de la solicitud, por lo que las páginas en caché
siguen funcionando con ella.
Última actualización: · Mantenido por el equipo de ReportedIP