Proteger la interfaz XML-RPC en WordPress a través de .htaccess

Permisos del archivo XML-RPC
Permisos del archivo XML-RPC
Así es como se ve la asignación de derechos después de que el soporte haya intervenido para bloquear el script.

Acabo de recibir un correo electrónico de mi proveedor, según el cual las llamadas automatizadas masivas al archivo xmlrpc.php en mi blog han causado que todo el servidor alcance su límite de rendimiento. Dado que el blog se ejecuta en el alojamiento compartido de All-Inkl, por supuesto, se requería una acción rápida. Los muchachos de soporte hicieron que el script no se pudiera llamar por primera vez al cambiar los derechos del archivo de 744 a 300. Esto significa que las llamadas del bromista que quiere piratearlo no llegan a nada.

Ahora tengo este tipo de ataque en otros sitios de WordPress y otros hosters. Un extracto de los datos de registro muestra los intentos recurrentes de descifrar WordPress a través de una llamada POST a xmlrpc.php. Todo se ve así:

[ 112] '0-3 "-"0/0/2867 "."171.83"2228 "121334 "0.0 "0.00 "45.59 "5.199.XXX.XXX "POST "www.kindskopp.com"/xmlrpc.php'
[ 461] '0-3 "-"0/0/3058 "."171.77"2228 "128420 "0.0 "0.00 "97.27 "5.199.XXX.XXX "POST "www.kindskopp.com"/xmlrpc.php'
[ 216] '0-3 "- "0/0/2878 "."171.40"2228 "2765 "0.0 "0.00 "43.40 "5.199.XXX.XXX "POST "www.kindskopp.com"/xmlrpc.php'
[361] '0-3 "-"0/0/2844 "."171.66"2228 "23121 "0.0 "0.00 "38.72 "5.199.XXX.XXX "POST "www.kindskopp.com"/xmlrpc.php'
[508] '0-3 "-"0/0/3038 "."171.80"2228 "78254 "0.0 "0.00 "44.41 "5.199.XXX.XXX "POST "www.kindskopp.com"/xmlrpc.php'
[ 68] '0-3 "-"0/0/3018 "."171.65"2228 "118321 "0.0 "0.00 "41.81 "5.199.XXX.XXX "POST "www.kindskopp.com"/xmlrpc.php'

Este otro proveedor de alojamiento también me dijo que estos ataques pueden poner a todo el servidor bajo presión, incluso si mi WordPress solo se ejecuta en uno [alojamiento-compartido->alojamiento-compartido].

Luego miré para ver qué más se podía hacer para proteger este archivo y encontré las siguientes opciones:

1. Prohibición total de acceso a la interfaz XML-RPC

El archivo xmlrpc.php está completamente protegido por una entrada en el archivo .htaccess. Esto significa que nadie puede acceder a este archivo desde el exterior. La protección es 100% segura, pero tiene el inconveniente de que ya no puedes acceder a ella tú mismo con programas como WordPress para iOS o Windows Live Writer. Incluso los pingbacks o trackbacks ya no pueden "irrumpir" desde blogs externos a su propio blog. Si no tienes ningún problema con eso porque siempre trabajas en el administrador de WordPress y no quieres trackbacks de otros blogs, esta solución es una buena opción.

Aquí está el código relevante para poner en el archivo .htaccess en la carpeta raíz de la instalación de WordPress:

<Files xmlrpc.php>
  Order Deny,Allow
  Deny from all
</Files>

Insertar: otras publicaciones de blog interesantes:

2. Solo restringe parcialmente el acceso a xmlrpc.php

Cualquiera con Windows Live Writer, Poster o incluso iOS App WordPress para iOS funciona, seguramente no querrá prescindir de él por completo. Por esta razón, la siguiente variante de la adición mencionada anteriormente para el archivo .htaccess, que mantiene la interfaz XMP-RPC libre para software común de terceros, es ideal para estos blogueros. Sin embargo, los trackbacks de otros blogs aún están bloqueados.

El código personalizado se ve así:

<IfModule mod_setenvif.c>
  <Files xmlrpc.php>
    BrowserMatch "Poster" allowed
    BrowserMatch "WordPress" allowed
    BrowserMatch "Windows Live Writer" allowed
    BrowserMatch "wp-iphone" allowed
    BrowserMatch "wp-android" allowed

    Order Deny,Allow
    Deny from All
    Allow from env=allowed
  </Files>
</IfModule>

Por supuesto, las líneas con "BrowserMatch" se pueden ajustar como se desee si usa un programa específico que no se consideró en el script mencionado anteriormente. Es importante que el módulo de Apache "mod_setenvif" esté instalado para que la protección funcione. Sin embargo, este módulo ya está instalado en muchos servidores web. También es importante saber que el agente de usuario es muy fácil de falsificar. ¡Así que no es una protección impermeable lo que estás haciendo aquí!

En el caso actual, opté por la variante rigurosa y simplemente bloqueé todo lo que quiera acceder al archivo. Apenas obtengo trackbacks y no uso ningún software de terceros, solo el administrador de WordPress para escribir publicaciones de blog. Así es como se ve mi archivo htaccess de WordPress ahora:

htaccess protección XML RPC
Este es mi archivo htaccess completo en el directorio principal de WordPress, incluido el código de bloqueo para proteger la interfaz XML-RPC.

Actualizar: Desde la actualización de WordPress a la versión 3.9.2, ya no es posible ejecutar ataques DDoS en xmp-rpc.php. El equipo de WordPress respondió y cambió el código en consecuencia. Con esto puedes ahorrarte la modificación, como se describe arriba, a partir de esta versión.

¿Te gustó el artículo y te ayudaron las instrucciones del blog? Entonces sería feliz si usted el blog a través de una membresía constante o en en Patreon apoyaría.

6 respuestas a “Proteger la interfaz XML-RPC en WordPress a través de .htaccess”

  1. Pingback: Seguridad de WordPress: cambie el nombre de wp-login.php y protéjalo de los piratas informáticos » Sir Apfelot

  2. Tuve el mismo ataque con 280.000 visitas en un día.
    Gracias a la solución descrita (con lanzamiento parcial), pude reactivar la página.
    Ahora el único problema que tengo es que Jetpack (wordpres.com) ya no puede acceder a él. Aparece el siguiente mensaje:

    Tu sitio web debe ser de acceso público para usar Jetpack: site_inaccesible

    Detalles del error: el servidor Jetpack no pudo comunicarse con su sitio [HTTP 403]. Pregúntele a su proveedor de alojamiento web si permiten conexiones desde WordPress.com. Si necesita más ayuda, comuníquese con el soporte de Jetpack: http://jetpack.me/support/

    Pregunta: ¿Qué coincidencia de navegador se debe ingresar para esto?

    1. ¡Hola! Así que no pude determinar la coincidencia del navegador. No tengo una instalación de Jetpack para probar. Pero en su caso podría funcionar si bloquea el acceso a xmlrpc.php para todas las direcciones IP excepto WordPress.com. Revisé qué IP es, pero no lo publicaré aquí. Deberías tener cuidado con eso. :)

      Pero un consejo: simplemente abra una ventana de terminal en Mac o PC y luego escriba "ping wordpress.com". Luego obtiene una dirección IP, que ingresa en la siguiente entrada, que luego se coloca en el archivo htaccess:

      <Files xmlrpc.php>
      Order Deny,Allow
      Deny from All
      Allow from HIER.DIE.IP.EINGEBEN
      </Files>

      Con un poco de suerte, WordPress Jetpack usará la misma IP que el dominio. Si eso no funciona, intente omitir el último octeto (es decir, el último punto y el número que le sigue) en la IP. Luego, el archivo se abrirá para todo el bloque de IP, con una buena posibilidad de que Jetpack también esté allí.

    2. Hola,
      También tuve este mensaje de error con "jetpack" y luego me decidí por el complemento "WPtouch Mobile Plugin". Tampoco es tan grande como el jetpack y también "destruye" la página de inicio para dispositivos móviles. (Pero esa es la única razón por la que instalé "jetpack").

    3. ¿Qué debe llevar un 403? ¿Para que el servidor reciba una gran carga y responda constantemente miles de solicitudes de diferentes IP con 403 sin permiso? ¿Para que los atacantes inicien un DoS aún más agresivo y paralicen el servidor? no –
      ¿Para qué fueron diseñados los cortafuegos? Asi que…

      Instale fail2ban y use una regla estricta que bloquee (principalmente) los ataques de botnets a nivel de red. No a nivel de servidor. Ya es demasiado tarde. Así que crea filtros con, por ejemplo:

      —> failregex = -.*-.* "(OBTENER|POST) .*\/xmlrpc\.php.*

      y en la cárcel maxretry = 1. Entonces Apache / nginx está contento y puede concentrarse en lo esencial...
      Otros servicios también se pueden bloquear maravillosamente con fail2ban. El wp-login-php también es un objetivo codiciado.

      caballos de fuerza Su secuencia de comandos de desplazamiento es demasiado rápida en el panel táctil de Mac y el botón Subit ha desaparecido a 1 × 1 píxeles en Firefox...

      1. Hola Marcus!

        Gracias por tu sugerencia. No sé sobre fail2ban, pero si lo leo correctamente, puedes usarlo de manera muy flexible. Ahora uso el complemento de Wordfence para la mayoría de los blogs. Esto también mantiene a raya los ataques DoS.

        Debido a la PS: llamé a la página en el panel táctil de la MacBook y en realidad se desplaza normalmente. Y el botón de enviar para comentarios también funciona correctamente. Ahora no se como buscar el error... :-(

Escribe un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados con * markiert

En el Blog de Sir Apfelot encontrarás consejos, instrucciones y reseñas sobre productos de Apple como el iPhone, iPad, Apple Watch, AirPods, iMac, Mac Pro, Mac Mini y Mac Studio.

Especiales