Blindar WordPress contra ataques DDoS y spam

Evitar ataque ddos en wordpressEs muy frecuente entre webmasters que usan wordpress querer saber la cantidad de memoria RAM consumida por sus páginas ya que, en algunas ocasiones y a pesar de tener optimizado el sistema con un plugin de caché o CDN tipo cloudfare o cloudfront, las páginas se hacen eternamente lentas, llegando incluso en ocasiones a tener que reiniciar el servidor para el caso de los VPS, Cloud o servidores dedicados, o bien, que el soporte técnico de tu hosting compartido tenga que averiguar en los logs de sistema lo que ha producido esta demora.

Existe un script php que se puede poner, por ejemplo, en el footer y determinar la RAM consumida. Así, si tienes más webs, puedes hacerte una idea de la necesidad del servidor, incluso si estás pensando en actualizarte (si no quieres intorducir código a mano y prefieres un plugin existe el famosos TPC! Memory Usage para WordPress, que también analliza el estado del servidor dónde está alojado tu blog):

<?echo 'Memoria usada: ' . round(memory_get_usage() / 1024,1) . ' KB de '
. round(memory_get_usage(1) / 1024,1) . ' KB';?>

Ahora bien, en la mayoría de ocasiones la falta de memoria RAM es producida por bots, malware, spam o ataques DDOS que saturan a peticiones la base de datos, y aunque dispongamos de caché para ésta, resulta casi irremediable que la página acabe "petando". Si no quieres que aparezca el mensaje "Warning: too many connections" debido a "usuarios" que realizan muchas peticiones en un corto período de tiempo, entonces lo mejor será instalar un script anti-flood. Uno fácil y útil, es el que ofrecen en thewebhelp.com, y el cuál lo puedes insertar en el index.php (en el root de wordpress) o al principio del header.php (del theme):

<?php if (!isset($_SESSION)) { 	session_start(); } // anti flood protection
if($_SESSION['last_session_request'] > time() - 2){     // users will be
redirected to this page if it makes  requests faster than 2 seconds
header("location: /flood.html");     exit; } $_SESSION['last_session_request']
= time(); ?>

Para este caso en concreto, rechazará conexiones que no toleren las peticiones con menos de 2 segundos entre una y otra. Las conexiones en milisegundos desde una misma IP son señal de un bot o un ddos arremetiendo contra nuestro server.

Para usar correctamente este script, deberás crear un html en blanco y renombrarlo a flood.html tal y como indica arriba para que el "agresor" sea redireccionado y no se inicie la ejecución de código php en el cms, evitando gastar recursos de la máquina. P.ej

<html><head></head><body>No me gusta el spam</body></html>

¿Un poco más de seguridad? Pues obligatoriamente deberás instalarte los plugins Akismet y Bad Behavior si quieres acabar con el spam comment que se lanza desde software como ScrapeBox, SeNuke o Xrumer entre otros. Para ambos, es necesaria una API Key con la que trabajar. Para Akismet, tienes la opción de usar la versión gratuita (tiene otra, la PRO que cuesta 5$ mensuales) en https://akismet.com/signup/ y para Bad Behavior se puede conseguir registrándose en: http://www.projecthoneypot.org/create_account.php.

También debes considerar todos los demás consejos que hemos dado en seguridadwordpress.es como la protección de los archivos wp-config.php y .htaccess.

Para evitar ataques ddos, para aquellos que no lo hagan mediante la iptables de los firewalls del servidor, o bien, estén en alojamientos compartidos, pueden optar por configurar el fichero .htaccess y cargarlo con una blacklist o block list. ¿Dónde puede obtener un ejemplo de ello? Aquí mismo, o en las siguientes direcciones web donde puedes encontrar ficheros .htaccess pre-configurados, listas de spammers actualizadas y el clásico ejemplo de robots.txt para wordpress (que no representa un sólido control de seguridad pero sí un filtro para según que bots):

  • http://joshua-mcclure.com/linux-ddos-defense-with-htaccess/
  • http://www.wizcrafts.net/blocklists.html
  • http://www.wizcrafts.net/exploited-servers-blocklist.html
  • http://www.spamhaus.org/faq/answers.lasso?section=Datafeed%20FAQ
  • http://sigt.net/archivo/robotstxt-para-wordpress.xhtml

7 Comentarios

  1. david 03/10/2011
  2. SeguridadWP 03/10/2011
  3. david 03/10/2011
  4. Naim 19/02/2012
  5. GeorgeSeo 18/07/2013
  6. Guille 26/03/2014
  7. Jona 03/10/2014

Deja tu comentario

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