{"id":10011,"date":"2026-10-01T10:36:32","date_gmt":"2026-10-01T08:36:32","guid":{"rendered":"https:\/\/www.hostingtg.com\/blog\/?p=10011"},"modified":"2026-10-01T10:38:59","modified_gmt":"2026-10-01T08:38:59","slug":"cloudflare-waf-como-proteger-tu-wordpress","status":"publish","type":"post","link":"https:\/\/www.hostingtg.com\/blog\/cloudflare-waf-como-proteger-tu-wordpress\/","title":{"rendered":"Cloudflare WAF: c\u00f3mo proteger tu WordPress de ataques comunes"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">WordPress es uno de los gestores de contenidos m\u00e1s utilizados del mundo y, precisamente por eso, tambi\u00e9n recibe una cantidad enorme de tr\u00e1fico automatizado, escaneos, intentos de acceso y ataques dirigidos contra plugins, temas y configuraciones vulnerables.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No hace falta tener una web especialmente popular para comprobarlo. Basta con revisar durante unos d\u00edas los registros de un servidor conectado a Internet para empezar a encontrar peticiones extra\u00f1as contra <code>wp-login.php<\/code>, <code>xmlrpc.php<\/code>, plugins que ni siquiera tenemos instalados o rutas utilizadas habitualmente por herramientas autom\u00e1ticas de reconocimiento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una de las formas que m\u00e1s me gustan de reducir este tipo de ruido es colocar <strong>Cloudflare WAF delante de WordPress<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La raz\u00f3n es sencilla: buena parte del tr\u00e1fico puede analizarse antes de llegar realmente al servidor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eso significa que determinadas peticiones maliciosas pueden quedarse fuera antes de consumir recursos de Apache, Nginx, PHP, WordPress o la propia base de datos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No considero Cloudflare WAF una soluci\u00f3n m\u00e1gica ni mucho menos una excusa para dejar de actualizar WordPress. Lo veo como algo bastante m\u00e1s \u00fatil: <strong>una capa adicional dentro de una estrategia de seguridad por niveles<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y esa diferencia es importante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En esta gu\u00eda voy a explicar qu\u00e9 puede aportar un firewall de aplicaciones web, qu\u00e9 ataques puede ayudar a frenar, c\u00f3mo combinar reglas administradas y personalizadas y qu\u00e9 precauciones conviene tener para no terminar bloqueando usuarios leg\u00edtimos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 es Cloudflare WAF y por qu\u00e9 tiene sentido delante de WordPress<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WAF son las siglas de <strong>Web Application Firewall<\/strong>, o firewall de aplicaciones web.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Su funci\u00f3n consiste, de forma simplificada, en analizar las peticiones web que recibe una aplicaci\u00f3n y aplicar reglas sobre ellas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En una instalaci\u00f3n protegida mediante Cloudflare, el tr\u00e1fico no tiene por qu\u00e9 viajar directamente desde el visitante hasta nuestro servidor de origen. Cuando el dominio utiliza el proxy de Cloudflare, las peticiones pasan primero por su infraestructura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es ah\u00ed donde podemos aplicar parte de la protecci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu\u00e9 ocurre con una petici\u00f3n antes de llegar a WordPress<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos visualizarlo de esta forma:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Visitante \u2192 Cloudflare \u2192 servidor web \u2192 PHP \u2192 WordPress \u2192 base de datos<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sin una capa externa delante del servidor, una gran parte de las peticiones llega hasta nuestra infraestructura y tiene que ser procesada all\u00ed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con Cloudflare podemos intentar cortar determinados patrones antes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, imaginemos un bot realizando miles de solicitudes contra diferentes URLs de plugins vulnerables. Si conseguimos bloquear una parte importante de esas peticiones en Cloudflare, evitamos que todas ellas terminen convirti\u00e9ndose en trabajo para nuestro servidor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es, precisamente, una de las caracter\u00edsticas que m\u00e1s valoro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En mi caso, no veo \u00fanicamente el WAF como una herramienta para \u201cbloquear hackers\u201d. Me interesa tambi\u00e9n porque puede impedir que determinadas peticiones basura recorran toda la cadena hasta PHP, Apache, Nginx o la base de datos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eso puede ser especialmente relevante en WordPress porque muchas solicitudes din\u00e1micas terminan ejecutando c\u00f3digo PHP y consultando informaci\u00f3n en la base de datos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuanto antes podamos descartar tr\u00e1fico claramente no deseado, mejor.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu\u00e9 puede hacer un WAF y qu\u00e9 no puede hacer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed conviene evitar expectativas poco realistas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un WAF puede ayudarnos a identificar y bloquear determinados patrones de ataque, pero <strong>no convierte una instalaci\u00f3n vulnerable en una instalaci\u00f3n segura<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si tenemos un plugin abandonado con <a href=\"https:\/\/www.hostingtg.com\/blog\/vulnerabilidad-en-acf-extended\/\">una vulnerabilidad cr\u00edtica<\/a>, la soluci\u00f3n correcta sigue siendo actualizarlo, sustituirlo o eliminarlo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si utilizamos la contrase\u00f1a <code>admin123<\/code>, Cloudflare tampoco convierte esa contrase\u00f1a en segura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y si el servidor est\u00e1 mal configurado o permite acceder directamente a la IP de origen salt\u00e1ndose completamente Cloudflare, tendremos otro problema distinto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por eso prefiero considerar el WAF como una barrera adicional:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>WordPress actualizado.<\/li>\n\n\n\n<li>Plugins y temas actualizados.<\/li>\n\n\n\n<li>Usuarios bien protegidos.<\/li>\n\n\n\n<li>Autenticaci\u00f3n de dos factores cuando sea posible.<\/li>\n\n\n\n<li>Servidor correctamente configurado.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.hostingtg.com\/blog\/crear-una-copia-de-seguridad-de-tu-pagina-wordpress\/\">Copias de seguridad<\/a>.<\/li>\n\n\n\n<li>Cloudflare y su WAF delante de la aplicaci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">La seguridad funciona mucho mejor cuando depende de varias capas y no de un \u00fanico control.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 ataques puede ayudar a bloquear Cloudflare WAF en WordPress<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una instalaci\u00f3n de WordPress est\u00e1 expuesta a muchos tipos de tr\u00e1fico hostil.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Algunos ataques buscan vulnerabilidades concretas. Otros intentan adivinar credenciales. Otros simplemente recorren Internet probando autom\u00e1ticamente miles de rutas conocidas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare WAF puede ser \u00fatil frente a varios de estos escenarios.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ataques de SQL injection<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Una <strong>SQL injection<\/strong> intenta introducir instrucciones SQL manipuladas en datos que posteriormente son utilizados por una aplicaci\u00f3n para construir consultas contra su base de datos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En una aplicaci\u00f3n correctamente desarrollada, este tipo de entrada deber\u00eda tratarse de forma segura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El problema aparece cuando existe una vulnerabilidad en WordPress, un plugin, un tema o cualquier componente que procese esos datos de manera insegura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un WAF puede reconocer determinados patrones caracter\u00edsticos de este tipo de ataques e impedir que algunas peticiones lleguen a la aplicaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eso a\u00f1ade una barrera interesante, especialmente durante el intervalo que puede existir entre la publicaci\u00f3n de una vulnerabilidad y su correcci\u00f3n efectiva en todos los sitios afectados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y ese intervalo me parece importante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una instalaci\u00f3n puede estar perfectamente actualizada hoy y descubrir ma\u00f1ana que uno de sus plugins tiene una vulnerabilidad reci\u00e9n publicada. El WAF no sustituye el parche, pero tener una protecci\u00f3n adicional delante del servidor puede reducir la exposici\u00f3n frente a determinados intentos de explotaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cross-Site Scripting o XSS<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Los ataques <strong>XSS o Cross-Site Scripting<\/strong> buscan introducir contenido que termine ejecut\u00e1ndose en el navegador de otros usuarios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">De nuevo, el origen del problema suele estar en la aplicaci\u00f3n: datos que se aceptan o muestran sin el tratamiento apropiado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las reglas de un WAF pueden reconocer ciertos patrones sospechosos y bloquear solicitudes que coincidan con ellos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No significa que cualquier vulnerabilidad XSS quede autom\u00e1ticamente neutralizada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo que significa es que disponemos de otra capa capaz de interceptar parte de los intentos de explotaci\u00f3n conocidos o reconocibles.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Intentos de explotaci\u00f3n de plugins y temas vulnerables<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Este es probablemente uno de los escenarios m\u00e1s importantes en WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los bots no necesitan saber qu\u00e9 plugins tenemos instalados antes de empezar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Muchos simplemente prueban.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Solicitan rutas pertenecientes a plugins conocidos, intentan ejecutar endpoints vulnerables, buscan archivos expuestos y repiten el proceso contra miles o millones de dominios.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos encontrarnos, por ejemplo, con intentos dirigidos contra componentes que nunca hemos instalado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eso ocurre porque el atacante no est\u00e1 investigando nuestra web manualmente. Est\u00e1 automatizando una lista de pruebas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las reglas administradas de un WAF pueden ayudarnos frente a determinados patrones conocidos, mientras que las reglas personalizadas nos permiten reaccionar cuando detectamos algo espec\u00edfico en nuestros propios registros.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Bots, esc\u00e1neres y tr\u00e1fico automatizado<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No todo bot es malicioso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los buscadores utilizan bots. Los servicios de monitorizaci\u00f3n utilizan bots. Algunas integraciones leg\u00edtimas tambi\u00e9n funcionan de forma automatizada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El problema es el tr\u00e1fico automatizado que escanea rutas agresivamente, busca vulnerabilidades o dispara cantidades desproporcionadas de solicitudes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed hay que ser prudente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bloquear cualquier petici\u00f3n que \u201cparezca un bot\u201d puede terminar perjudicando servicios leg\u00edtimos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por eso, siempre que puedo, prefiero construir las reglas partiendo del comportamiento observado y no de una regla gen\u00e9rica del estilo \u201cbloquear todos los bots\u201d.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fuerza bruta y ataques contra el acceso de WordPress<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>wp-login.php<\/code> es uno de los objetivos m\u00e1s evidentes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un atacante puede enviar intentos repetidos de autenticaci\u00f3n para probar contrase\u00f1as comunes, combinaciones obtenidas de filtraciones o listas automatizadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare puede convertirse aqu\u00ed en una primera barrera.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dependiendo del caso, podemos aplicar restricciones, desaf\u00edos o l\u00edmites sobre determinadas solicitudes antes de que cada intento termine llegando al sistema de autenticaci\u00f3n de WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eso no elimina la necesidad de utilizar contrase\u00f1as fuertes ni autenticaci\u00f3n de dos factores.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo que hace es reducir la cantidad de tr\u00e1fico hostil que consigue llegar hasta ese punto.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo empezar a proteger WordPress con Cloudflare WAF<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Uno de los errores que veo m\u00e1s f\u00e1ciles de cometer consiste en entrar al panel y empezar inmediatamente a crear reglas muy agresivas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yo prefiero justo lo contrario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Empiezo con una base razonable, observo y solo despu\u00e9s endurezo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Activa primero las reglas administradas<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las reglas administradas son una de las partes que m\u00e1s me interesan de Cloudflare.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No todo administrador de una web tiene tiempo o conocimientos para analizar manualmente cada petici\u00f3n HTTP y construir desde cero firmas contra SQL injection, XSS o t\u00e9cnicas similares.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las <strong>Managed Rules<\/strong> permiten partir de una base que el proveedor mantiene y actualiza.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para un proyecto peque\u00f1o o mediano me parece especialmente pr\u00e1ctico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No necesitamos convertirnos en especialistas en seguridad ofensiva para disponer de una primera capa de filtrado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esto no significa activar absolutamente todo sin mirar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El comportamiento exacto de las reglas disponibles y las opciones que aparecen en el panel pueden variar seg\u00fan el plan y los cambios que Cloudflare realice en su producto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por eso conviene revisar qu\u00e9 reglas est\u00e1n disponibles en nuestra cuenta y observar qu\u00e9 efecto est\u00e1n teniendo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cloudflare Managed Rules y reglas orientadas a amenazas web<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las reglas administradas buscan identificar familias conocidas de ataques y patrones sospechosos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este tipo de protecci\u00f3n es especialmente interesante para amenazas gen\u00e9ricas que no dependen exclusivamente de nuestra propia web.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En lugar de escribir manualmente una regla para cada posible forma de SQL injection, por ejemplo, podemos apoyarnos en conjuntos de reglas dise\u00f1ados espec\u00edficamente para detectar ese tipo de actividad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s podemos a\u00f1adir nuestra capa espec\u00edfica para WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ah\u00ed es donde entran las Custom Rules.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Revisa los eventos antes de endurecer la configuraci\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No configurar\u00eda nunca un WAF con la mentalidad de \u201ccuanto m\u00e1s bloquee, mejor\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un firewall demasiado agresivo puede convertirse en un problema operativo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos bloquear formularios, integraciones, usuarios leg\u00edtimos o llamadas necesarias para alguna funcionalidad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por eso los registros y eventos son fundamentales.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de endurecer una regla intento responder tres preguntas:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>\u00bfQu\u00e9 tr\u00e1fico quiero detener?<\/li>\n\n\n\n<li>\u00bfC\u00f3mo puedo reconocerlo sin afectar al tr\u00e1fico leg\u00edtimo?<\/li>\n\n\n\n<li>\u00bfQu\u00e9 pasar\u00eda si mi condici\u00f3n es demasiado amplia?<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Cuanto m\u00e1s espec\u00edfica sea la respuesta, mejor ser\u00e1 normalmente la regla.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Managed Rules vs Custom Rules: cu\u00e1ndo utilizar cada una<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No considero las reglas administradas y las reglas personalizadas opciones enfrentadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para m\u00ed, el verdadero potencial aparece cuando utilizamos <strong>ambas juntas<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu\u00e9 solucionan las reglas administradas<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las reglas administradas funcionan especialmente bien como protecci\u00f3n general.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Su ventaja principal es que no necesitamos conocer previamente cada patr\u00f3n exacto que queremos bloquear.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos pensar en ellas como una capa mantenida externamente contra categor\u00edas de ataques conocidas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nos proporcionan una base.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y esa base es especialmente valiosa en instalaciones que no cuentan con una persona dedicada exclusivamente a revisar logs y escribir reglas de firewall.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cu\u00e1ndo merece la pena crear una regla personalizada<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las reglas personalizadas entran en juego cuando conocemos mejor nuestro caso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Supongamos que observamos cientos de peticiones contra una URL concreta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O detectamos un bot que solicita determinadas rutas con un patr\u00f3n muy identificable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O queremos proteger una zona administrativa que sabemos que solo utilizan ciertas personas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En esos escenarios, una regla personalizada permite adaptar el firewall a nuestra instalaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eso me parece mucho m\u00e1s interesante que copiar veinte reglas encontradas por Internet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una regla personalizada deber\u00eda responder a una necesidad real.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Por qu\u00e9 combinar ambos tipos de reglas<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mi enfoque ser\u00eda:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>reglas administradas para la protecci\u00f3n general + reglas personalizadas para el contexto espec\u00edfico de nuestra web.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las primeras intentan cubrir ataques que podr\u00edan afectar a miles de aplicaciones.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las segundas responden a lo que sabemos de nuestro WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si adem\u00e1s utilizamos logs y eventos para alimentar esas decisiones, la configuraci\u00f3n mejora bastante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No necesitamos adivinar constantemente qu\u00e9 est\u00e1 pasando. Podemos observarlo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Reglas de Cloudflare \u00fatiles para proteger WordPress<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La sintaxis concreta del panel puede cambiar con el tiempo, por lo que prefiero centrarme en la l\u00f3gica que deber\u00eda seguir cada regla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copiar una expresi\u00f3n sin comprenderla suele ser peor que aprender qu\u00e9 queremos conseguir.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3mo proteger wp-login.php<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>wp-login.php<\/code> es un candidato evidente para aplicar controles adicionales.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos considerar varias estrategias:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>limitar tr\u00e1fico sospechoso;<\/li>\n\n\n\n<li>aplicar desaf\u00edos;<\/li>\n\n\n\n<li>restringir determinados or\u00edgenes cuando el contexto lo permita;<\/li>\n\n\n\n<li>combinar la protecci\u00f3n con rate limiting;<\/li>\n\n\n\n<li>detectar patrones an\u00f3malos.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">No recomiendo bloquear indiscriminadamente el acceso a todo el mundo salvo que nuestro escenario permita hacerlo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, restringir por una \u00fanica IP puede ser muy efectivo para una instalaci\u00f3n administrada exclusivamente desde una oficina con IP fija.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero puede ser un desastre si los administradores trabajan desde conexiones m\u00f3viles o ubicaciones cambiantes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La configuraci\u00f3n debe adaptarse al proyecto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3mo proteger wp-admin<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>\/wp-admin\/<\/code> merece un razonamiento parecido.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos aplicar controles adicionales, aunque hay que recordar que WordPress y sus plugins pueden utilizar rutas relacionadas con el \u00e1rea administrativa para distintas funciones.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por eso bloquear el directorio completo con una condici\u00f3n demasiado amplia puede romper funcionalidades.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed es especialmente importante probar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una regla aparentemente sencilla puede tener efectos secundarios que no son evidentes hasta que alguien intenta editar contenido, subir un archivo o utilizar determinada integraci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu\u00e9 hacer con xmlrpc.php<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>xmlrpc.php<\/code> lleva a\u00f1os apareciendo en conversaciones sobre seguridad WordPress porque puede utilizarse para determinadas funciones remotas y tambi\u00e9n ha sido objetivo habitual de abuso automatizado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfHay que bloquearlo siempre?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No necesariamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Primero tenemos que saber si nuestra web utiliza alguna funcionalidad que dependa de \u00e9l.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si tenemos claro que no lo necesitamos, restringir el acceso puede reducir superficie innecesaria.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si s\u00ed lo utilizamos, habr\u00e1 que plantear una protecci\u00f3n m\u00e1s selectiva.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La regla general aqu\u00ed vuelve a ser la misma: <strong>no bloquear por copiar una recomendaci\u00f3n; bloquear porque entendemos nuestro caso<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3mo filtrar bots y esc\u00e1neres agresivos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es una de las \u00e1reas donde m\u00e1s valor tienen los logs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Imaginemos que encontramos peticiones continuas contra:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>archivos inexistentes;<\/li>\n\n\n\n<li>rutas de plugins que no tenemos instalados;<\/li>\n\n\n\n<li>endpoints conocidos por vulnerabilidades antiguas;<\/li>\n\n\n\n<li>archivos de configuraci\u00f3n;<\/li>\n\n\n\n<li>patrones repetitivos a gran velocidad.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos estudiar si esas peticiones comparten caracter\u00edsticas \u00fatiles para construir una regla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A veces ser\u00e1 la ruta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Otras veces ser\u00e1 la frecuencia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O el origen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O varias se\u00f1ales combinadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo importante es evitar una condici\u00f3n tan gen\u00e9rica que termine bloqueando tr\u00e1fico leg\u00edtimo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3mo reaccionar ante un patr\u00f3n de ataque detectado en los logs<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es una de las aplicaciones que m\u00e1s me gustan de las reglas personalizadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Veo algo extra\u00f1o en los registros.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo analizo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Compruebo si se repite.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Determino qu\u00e9 caracter\u00edstica permite distinguirlo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y entonces creo una protecci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ese flujo me parece mucho m\u00e1s \u00fatil que cargar una lista enorme de reglas preventivas sin saber si alguna se aplica realmente a nuestra web.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El WAF pasa as\u00ed de ser una configuraci\u00f3n est\u00e1tica a convertirse en una herramienta que podemos adaptar a medida que cambia el tr\u00e1fico.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Bloquear, desafiar o permitir: qu\u00e9 acci\u00f3n elegir<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No todas las solicitudes sospechosas tienen que terminar con un bloqueo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta distinci\u00f3n es importante porque ayuda a reducir falsos positivos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cu\u00e1ndo utilizar Block<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El bloqueo tiene sentido cuando estamos suficientemente seguros de que el tr\u00e1fico no deber\u00eda permitirse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, si detectamos una ruta que no existe en nuestra aplicaci\u00f3n y \u00fanicamente recibe tr\u00e1fico de explotaci\u00f3n automatizada, la decisi\u00f3n puede ser relativamente sencilla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo mismo ocurre cuando hemos identificado con mucha precisi\u00f3n un patr\u00f3n malicioso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero cuanto m\u00e1s gen\u00e9rica sea la condici\u00f3n, mayor precauci\u00f3n deber\u00edamos tener antes de aplicar un bloqueo definitivo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cu\u00e1ndo es mejor utilizar un Challenge<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un desaf\u00edo puede resultar interesante cuando queremos elevar la dificultad para el tr\u00e1fico automatizado sin cerrar inmediatamente la puerta a cualquier usuario leg\u00edtimo que coincida con la condici\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eso puede ser especialmente \u00fatil cuando trabajamos con se\u00f1ales que no son completamente deterministas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, determinado comportamiento puede ser habitual en bots, pero no exclusivo de ellos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En lugar de bloquear directamente, podemos utilizar una acci\u00f3n menos definitiva y observar resultados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3mo evitar bloquear visitantes leg\u00edtimos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Los falsos positivos no son un detalle menor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una regla que bloquea el 99 % del tr\u00e1fico malicioso pero tambi\u00e9n impide comprar al 2 % de nuestros clientes puede ser una mala regla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por eso prefiero aplicar cambios progresivos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Primero observar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s limitar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s revisar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y finalmente endurecer, si los datos respaldan la decisi\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La seguridad debe proteger el negocio, no impedir que funcione.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo detectar y corregir falsos positivos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Configurar el WAF es solo una parte del trabajo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La otra consiste en comprobar qu\u00e9 est\u00e1 haciendo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Revisar eventos de seguridad<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.hostingtg.com\/blog\/registra-todo-lo-que-ocurre-en-tu-wordpress\/\">Los eventos de seguridad<\/a> nos permiten comprender qu\u00e9 solicitudes han activado determinadas protecciones.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando una funci\u00f3n deja de responder despu\u00e9s de modificar el firewall, este deber\u00eda ser uno de los primeros lugares que revisemos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tenemos que buscar correlaciones:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>hora del error;<\/li>\n\n\n\n<li>URL afectada;<\/li>\n\n\n\n<li>regla activada;<\/li>\n\n\n\n<li>acci\u00f3n aplicada;<\/li>\n\n\n\n<li>caracter\u00edsticas de la petici\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Con esa informaci\u00f3n podemos ajustar mucho mejor.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Probar las reglas de forma progresiva<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Una buena pr\u00e1ctica consiste en evitar introducir muchas reglas agresivas simult\u00e1neamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si hacemos diez cambios y algo deja de funcionar, tendremos que descubrir cu\u00e1l de los diez lo ha provocado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si trabajamos de forma progresiva, la causa es mucho m\u00e1s f\u00e1cil de identificar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yo prefiero:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>introducir una protecci\u00f3n;<\/li>\n\n\n\n<li>observar;<\/li>\n\n\n\n<li>comprobar funcionamiento;<\/li>\n\n\n\n<li>ajustar;<\/li>\n\n\n\n<li>continuar.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Es menos espectacular que pegar veinte reglas de golpe, pero suele producir una configuraci\u00f3n bastante m\u00e1s fiable.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qu\u00e9 hacer cuando una regla rompe una funci\u00f3n de WordPress<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Lo primero es evitar convertir la excepci\u00f3n en un agujero enorme.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si una regla bloquea una funcionalidad concreta, no deber\u00edamos solucionar el problema desactivando todo el WAF sin investigar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hay que identificar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>qu\u00e9 petici\u00f3n est\u00e1 siendo bloqueada;<\/li>\n\n\n\n<li>qu\u00e9 regla la detecta;<\/li>\n\n\n\n<li>por qu\u00e9 coincide;<\/li>\n\n\n\n<li>si podemos hacer la condici\u00f3n m\u00e1s espec\u00edfica;<\/li>\n\n\n\n<li>si podemos crear una excepci\u00f3n limitada.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Las excepciones peque\u00f1as son preferibles a las excepciones globales.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Cloudflare WAF no sustituye la seguridad de WordPress<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Este es probablemente el punto m\u00e1s importante de toda la gu\u00eda.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uno de los errores m\u00e1s f\u00e1ciles de cometer es pensar que activar Cloudflare WAF convierte autom\u00e1ticamente una web en segura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No funciona as\u00ed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mant\u00e9n WordPress, plugins y temas actualizados<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si aparece <a href=\"https:\/\/www.hostingtg.com\/blog\/wordpress-7-1-1-seguridad-vulnerabilidades\/\">una actualizaci\u00f3n de seguridad<\/a>, hay que aplicarla de acuerdo con nuestra pol\u00edtica de mantenimiento y pruebas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No tiene sentido dejar una vulnerabilidad conocida durante semanas pensando que el WAF bloquear\u00e1 cualquier forma posible de explotarla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El firewall es una capa de apoyo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La correcci\u00f3n del problema sigue siendo prioritaria.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Protege las cuentas administrativas<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las cuentas con permisos elevados necesitan especial cuidado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Algunas medidas b\u00e1sicas son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>evitar contrase\u00f1as reutilizadas;<\/li>\n\n\n\n<li>utilizar contrase\u00f1as largas y \u00fanicas;<\/li>\n\n\n\n<li>eliminar usuarios administrativos que ya no sean necesarios;<\/li>\n\n\n\n<li>aplicar el <a href=\"https:\/\/www.hostingtg.com\/blog\/roles-en-wordpress\/\">principio de m\u00ednimo privilegio<\/a>;<\/li>\n\n\n\n<li>revisar accesos cuando sea pertinente.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Muchas intrusiones no necesitan una vulnerabilidad sofisticada si el atacante consigue credenciales v\u00e1lidas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A\u00f1ade 2FA y contrase\u00f1as seguras<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La autenticaci\u00f3n en dos pasos a\u00f1ade otra barrera importante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Incluso si una contrase\u00f1a termina expuesta, disponer de un segundo factor puede impedir que esa credencial sea suficiente por s\u00ed sola.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare puede ayudar a reducir intentos hostiles antes de que lleguen a WordPress, pero eso no elimina la necesidad de proteger correctamente las cuentas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mant\u00e9n tambi\u00e9n protegido el servidor de origen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Hay otro punto que a veces se olvida.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si colocamos Cloudflare delante pero nuestro servidor de origen sigue siendo f\u00e1cilmente accesible de forma directa, parte de la estrategia puede perder efectividad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La configuraci\u00f3n de red, servidor web y servicios expuestos sigue importando.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n importa mantener actualizado:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sistema operativo;<\/li>\n\n\n\n<li>PHP;<\/li>\n\n\n\n<li>servidor web;<\/li>\n\n\n\n<li>base de datos;<\/li>\n\n\n\n<li>paneles de administraci\u00f3n;<\/li>\n\n\n\n<li>otros servicios instalados.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare protege determinadas capas. No reemplaza toda la infraestructura.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Copias de seguridad como \u00faltima capa de defensa<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Una estrategia de seguridad sin copias de seguridad me parece incompleta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las copias deben existir antes de necesitarlas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y, cuando el proyecto lo justifique, conviene comprobar tambi\u00e9n que pueden restaurarse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si algo termina saliendo mal \u2014una intrusi\u00f3n, un error humano, una actualizaci\u00f3n defectuosa o cualquier otro incidente\u2014 disponer de una recuperaci\u00f3n fiable puede marcar la diferencia.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Cu\u00e1ndo merece especialmente la pena usar Cloudflare WAF<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfNecesita absolutamente cualquier WordPress una configuraci\u00f3n avanzada de WAF?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No necesariamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero hay escenarios donde su utilidad se vuelve mucho m\u00e1s evidente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sitios con mucho tr\u00e1fico<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A medida que crece el tr\u00e1fico, tambi\u00e9n aumenta el impacto potencial del tr\u00e1fico basura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si podemos eliminar parte de ese volumen antes de alcanzar el origen, reducimos trabajo innecesario en nuestra infraestructura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No todo se trata de seguridad pura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n estamos hablando de eficiencia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">WordPress atacados constantemente por bots<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Hay webs que aparecen constantemente en esc\u00e1neres autom\u00e1ticos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos ver intentos contra docenas de vulnerabilidades que ni siquiera afectan a nuestra instalaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ese tr\u00e1fico consume recursos y ensucia los registros.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tener una barrera delante puede ayudarnos a reducir una parte importante de ese ruido.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Webs que reciben intentos de acceso repetidos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si <code>wp-login.php<\/code> est\u00e1 recibiendo intentos constantes, merece la pena estudiar qu\u00e9 controles podemos a\u00f1adir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No deber\u00edamos esperar necesariamente a tener un incidente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si el patr\u00f3n ya es visible, podemos responder.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Proyectos con mayor exposici\u00f3n p\u00fablica<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cuanto mayor sea la importancia de la web, m\u00e1s sentido tiene trabajar con varias capas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una tienda online, una web que almacena datos importantes o un proyecto que depende econ\u00f3micamente de su disponibilidad tienen incentivos claros para reducir riesgos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En sitios WordPress que reciben bastante tr\u00e1fico, sufren intentos constantes de acceso o empiezan a aparecer repetidamente en el radar de bots y esc\u00e1neres autom\u00e1ticos es donde, en mi experiencia, una capa como Cloudflare puede marcar una diferencia especialmente interesante.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Errores habituales al configurar Cloudflare WAF en WordPress<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una configuraci\u00f3n de seguridad tambi\u00e9n puede fallar por exceso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Estos son algunos errores que intentar\u00eda evitar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Activar reglas y olvidarse de revisar los eventos<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No basta con configurar el firewall una vez y asumir que todo funciona perfectamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El tr\u00e1fico cambia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress cambia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los plugins cambian.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nuestra propia web cambia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conviene revisar peri\u00f3dicamente qu\u00e9 est\u00e1 ocurriendo, especialmente despu\u00e9s de modificaciones importantes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Copiar reglas de otras webs sin entenderlas<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Internet est\u00e1 lleno de colecciones de \u201clas mejores reglas para Cloudflare\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Algunas pueden ser \u00fatiles.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Otras pueden no tener ning\u00fan sentido para nuestra instalaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copiar una expresi\u00f3n sin saber qu\u00e9 condici\u00f3n est\u00e1 evaluando puede terminar bloqueando funcionalidades importantes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de aplicar una regla deber\u00edamos ser capaces de explicar con palabras sencillas:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u201cQuiero bloquear este tr\u00e1fico porque\u2026\u201d<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si no podemos terminar la frase, probablemente deber\u00edamos estudiar mejor la regla.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Bloquear demasiado tr\u00e1fico desde el principio<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">M\u00e1s bloqueo no significa autom\u00e1ticamente m\u00e1s seguridad.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una pol\u00edtica demasiado agresiva puede generar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>falsos positivos;<\/li>\n\n\n\n<li>formularios rotos;<\/li>\n\n\n\n<li>problemas con APIs;<\/li>\n\n\n\n<li>usuarios leg\u00edtimos bloqueados;<\/li>\n\n\n\n<li>integraciones que dejan de funcionar.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Me parece mucho m\u00e1s sensato endurecer progresivamente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pensar que el WAF hace innecesarias las actualizaciones<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Este es probablemente el error m\u00e1s peligroso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El WAF puede ser capaz de impedir ciertos intentos de explotaci\u00f3n, pero no debemos utilizarlo como justificaci\u00f3n para mantener software vulnerable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una vulnerabilidad debe corregirse en su origen siempre que sea posible.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Cloudflare como primera barrera, no como \u00fanica defensa<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare WAF me parece una de las herramientas m\u00e1s interesantes que podemos colocar delante de WordPress cuando queremos mejorar la seguridad sin convertir toda la protecci\u00f3n en una configuraci\u00f3n compleja dentro del servidor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Su principal ventaja, desde mi punto de vista, es precisamente su posici\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Puede analizar parte del tr\u00e1fico antes de que llegue a Apache, Nginx, PHP, WordPress o la base de datos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s, las reglas administradas ofrecen un punto de partida accesible incluso cuando no queremos construir toda nuestra protecci\u00f3n manualmente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero donde veo realmente su potencial es en la combinaci\u00f3n:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Managed Rules + Custom Rules + observaci\u00f3n de logs.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las reglas administradas nos proporcionan una base.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las personalizadas nos permiten adaptar la defensa a nuestra instalaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y los registros nos dicen qu\u00e9 est\u00e1 ocurriendo realmente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aun as\u00ed, no confiar\u00eda nunca toda la seguridad de WordPress al WAF.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mantendr\u00eda WordPress actualizado, revisar\u00eda plugins y temas, proteger\u00eda las cuentas administrativas, utilizar\u00eda autenticaci\u00f3n en dos pasos, <a href=\"https:\/\/www.hostingtg.com\/blog\/fail2ban\/\">mantendr\u00eda el servidor correctamente configurado<\/a> y conservar\u00eda copias de seguridad fiables.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare no elimina la necesidad de hacer esas cosas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A\u00f1ade una barrera m\u00e1s.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y precisamente por eso me parece tan \u00fatil.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Dudas de la comunidad<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCloudflare WAF protege completamente WordPress?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare WAF puede ayudar a bloquear determinadas peticiones y patrones de ataque, pero debe utilizarse como una capa adicional.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress, plugins, temas, servidor y cuentas de usuario tambi\u00e9n necesitan mantenerse correctamente protegidos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 ataques puede bloquear?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Dependiendo de las reglas y de la configuraci\u00f3n, un WAF puede ayudar frente a patrones relacionados con SQL injection, XSS, intentos de explotaci\u00f3n de vulnerabilidades y diferentes formas de tr\u00e1fico automatizado malicioso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La protecci\u00f3n nunca debe interpretarse como una garant\u00eda absoluta frente a cualquier ataque de esas categor\u00edas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfNecesito reglas personalizadas?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No necesariamente para empezar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las reglas administradas proporcionan una base interesante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las personalizadas empiezan a tener mucho valor cuando queremos proteger elementos espec\u00edficos de nuestra instalaci\u00f3n o responder a comportamientos observados en los logs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuedo proteger wp-login.php con Cloudflare?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ed, podemos aplicar controles espec\u00edficos sobre las solicitudes dirigidas a <code>wp-login.php<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La estrategia adecuada depender\u00e1 de c\u00f3mo utilicemos nuestra web.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos considerar desaf\u00edos, restricciones m\u00e1s espec\u00edficas o controles relacionados con la frecuencia de las solicitudes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfConviene bloquear xmlrpc.php?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Depende.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si tenemos claro que ninguna funcionalidad de nuestra instalaci\u00f3n depende de <code>xmlrpc.php<\/code>, restringirlo puede reducir superficie de ataque y tr\u00e1fico innecesario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si alg\u00fan servicio lo utiliza, un bloqueo completo podr\u00eda romper esa integraci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCloudflare sustituye a un plugin de seguridad?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No necesariamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.hostingtg.com\/blog\/wordfence-wordpress\/\">Un plugin de seguridad<\/a> y Cloudflare pueden trabajar en capas distintas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare puede actuar antes de que el tr\u00e1fico llegue al servidor, mientras que una soluci\u00f3n dentro de WordPress dispone de contexto que solo existe una vez que la petici\u00f3n llega a la aplicaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pueden ser complementarios.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 hago si Cloudflare bloquea usuarios leg\u00edtimos?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Revisa los eventos de seguridad y determina qu\u00e9 regla est\u00e1 produciendo el bloqueo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s intenta hacer la condici\u00f3n m\u00e1s precisa o crear una excepci\u00f3n limitada.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No conviene desactivar todas las protecciones para solucionar un \u00fanico falso positivo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCloudflare WAF sirve para ataques de fuerza bruta?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Puede formar parte de la defensa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos aplicar controles sobre rutas de autenticaci\u00f3n y reducir tr\u00e1fico automatizado antes de que llegue a WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aun as\u00ed, deber\u00edamos combinarlo con contrase\u00f1as \u00fanicas, 2FA y una buena pol\u00edtica de usuarios.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfMerece la pena Cloudflare WAF para una web peque\u00f1a?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Puede merecerla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No necesitamos esperar a tener una web enorme para recibir bots o escaneos autom\u00e1ticos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La pregunta no es \u00fanicamente cu\u00e1nto tr\u00e1fico tiene la web, sino cu\u00e1l es su exposici\u00f3n, qu\u00e9 valor tiene para nosotros y qu\u00e9 nivel de seguridad necesitamos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para una web peque\u00f1a, empezar con una configuraci\u00f3n sencilla y reglas administradas puede ser una forma razonable de a\u00f1adir otra capa sin convertir el mantenimiento en un proyecto complejo<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Opini\u00f3n Personal<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cloudflare WAF es una de esas herramientas que merece la pena tener en cuenta cuando gestionamos una web en WordPress y queremos a\u00f1adir una capa extra de seguridad sin complicar demasiado la infraestructura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo que m\u00e1s valoro es que permite filtrar parte del tr\u00e1fico malicioso antes de que llegue al servidor. Para m\u00ed, eso tiene mucho sentido, sobre todo en webs que reciben intentos constantes de acceso, bots, escaneos autom\u00e1ticos o peticiones contra vulnerabilidades conocidas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eso s\u00ed, no lo veo como una soluci\u00f3n milagrosa. Un WAF no sustituye las actualizaciones, las contrase\u00f1as seguras, el 2FA, las copias de seguridad ni una buena configuraci\u00f3n del servidor. Funciona mejor cuando forma parte de una estrategia de seguridad por capas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n creo que el verdadero potencial aparece cuando combinamos las reglas administradas de Cloudflare con reglas personalizadas basadas en lo que realmente estamos viendo en los logs. Esa combinaci\u00f3n permite empezar con una protecci\u00f3n s\u00f3lida y, al mismo tiempo, adaptar el firewall a las necesidades concretas de cada WordPress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En definitiva, para m\u00ed Cloudflare WAF no es una herramienta que \u201chaga segura\u201d una web por s\u00ed sola, pero s\u00ed puede convertirse en una barrera muy \u00fatil para reducir exposici\u00f3n, filtrar tr\u00e1fico no deseado y reaccionar con m\u00e1s rapidez ante determinados ataques.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfT\u00fa utilizas Cloudflare WAF en tu WordPress? \u00bfHas creado reglas personalizadas o te apoyas principalmente en las reglas administradas? Me interesa conocer tu experiencia, as\u00ed que d\u00e9jala en los comentarios.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>WordPress es uno de los gestores de contenidos m\u00e1s utilizados del mundo y, precisamente por eso, tambi\u00e9n recibe una cantidad enorme de tr\u00e1fico automatizado, escaneos, intentos de acceso y ataques dirigidos contra plugins, temas y configuraciones vulnerables. No hace falta tener una web especialmente popular para comprobarlo. Basta con revisar durante unos d\u00edas los registros [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":10012,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[491],"tags":[1015,236,1193,197],"class_list":["post-10011","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-cloudflare","tag-seguridad","tag-waf","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/posts\/10011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/comments?post=10011"}],"version-history":[{"count":8,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/posts\/10011\/revisions"}],"predecessor-version":[{"id":10020,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/posts\/10011\/revisions\/10020"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/media\/10012"}],"wp:attachment":[{"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/media?parent=10011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/categories?post=10011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostingtg.com\/blog\/wp-json\/wp\/v2\/tags?post=10011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}