Skip to main contentSkip to footer

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.

PlanReglasActualización
Local Shield, cualquier planBase OWASP Top 10 incluida, Paranoia Level 1Con las actualizaciones del plugin
Free, Community NetworkConjunto del servidor en Paranoia Level 1, que cubre más que el incluidoCada seis horas
ContributorPriority Sync: Paranoia Level 2 y los feeds de rangos de direcciones de botsSemanal
Professional y superioresPriority Sync: Paranoia Level 3, rangos de bots, la lista en vivo de dominios de correo desechableDiaria

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 .htaccess o un .user.ini en la raíz del documento.
  • Otros entornos reciben la línea para php.ini o el panel del alojamiento, o un fragmento fastcgi_param para 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_routes excluye 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

Security Focused
Conforme al RGPD
Made in Germany
Volver a la documentación