20 de mayo de 2014

Solución al bloqueo en la "Creación de tablas de la base de datos" durante la instalación de Joomla! 3 en XAMPP

Problema

Trabajando con el servidor local XAMPP en su versión 1.8.3, pretendíamos instalar el paquete de Joomla! 3.2.3, no obstante, después de completar los tres pasos para la configuración del motor, al pulsar "Instalar" en nuestro Joomla! 3, éste se quedaba una y otra vez bloqueado procesando la tarea "Creación de tablas de la base de datos".... el tiempo pasaba y el gestor nunca se terminaba de instalar.

Entrábamos una y otra vez en nuestro directorio de instalación para comprobar los datos y ver si alguna combinación mágica hacía que se pudiera completar el proceso de una vez. Pero parecía que nunca iba a suceder... ¿Qué estaba ocurriendo? ¿Cómo solucionarlo?

Solución

Buscando una posible alternativa sobre este tema en los foros de Joomla!, pronto nos situamos en la pista correcta. Encontramos primero una referencia a un problema similar pero con la versión de Joomla! 3.0.3. La solución propuesta es modificar el valor de "max_execution_time", una variable que se puede encontrar en el archivo "php.ini" de la carpeta "php" en nuestro directorio local de XAMPP.

De esta forma, modficamos el valor que aparece por defecto en la línea "max_execution_time" de 30 a 60, reiniciamos el servidor local... pero nada. Lo probamos con 100 y tampoco.

Continuamos la búsqueda y encontramos esta intervención respecto a un problema similar que propone subir el valor hasta 240. Así lo hacemos, colocamos "max_execution_time=240", reiniciamos el servidor otra vez (importante no olvidar este detalle)... y ahora sí, después de repetir nuevamente el proceso, por fin nos aparece la pantalla de confirmación de la instalación de nuestro Joomla! 3.2.

9 de mayo de 2014

EVO Frontpage, un módulo ligero y potente para mostrar novedades en Joomla!

Sin duda, un tipo de extensión que siempre he considerado muy útil e interesante son las que se encargan de ir mostrando las novedades o noticias en la portada de nuestro sitio web de forma totalmente automática y configurable.

Continuando precisamente la línea de desarrollo de otro popular módulo de News Display, Mini FrontPage, se nos presenta la extensión EVO Frontpage que nos permite mostrar descripciones, autoría y miniaturas de nuestras novedades publicadas de una forma simple, fiable y sin consumir prácticamente recursos de la web, uno de los aspectos más negativos de este tipo de herramientas, sobre todo cuando el número de artículos a mostrar son demasiados.

EVO Frontpage, disponible lógicamente desde el directorio Joomla! Extensions y cuyo posible aspecto se puede apreciar en la imagen adjunta, es compatible con todas las versiones del motor Joomla! (Joomla! 1.5, Joomla! 2.5 y Joomla! 3.x).

Tras lo positivo de su poco peso y su gran potencia, se esconden algunas carencias para su personalización total, teniendo bastante menos opciones que otras extensiones para este mismo uso como AidaNews2 pero que precisamente destaca por consumir bastantes recursos.

Merece la pena probarlo, o al menos echarle un vistazo a la web de EVO Frontpage para poder comprobar exactamente a qué nos estamos refiriendo, su aspecto, sus opciones, etc.

3 de mayo de 2014

Solucionando problemas de saturación del servidor por Spam con Joomla!

Problema 

En un proyecto en el que se continuaba utilizando la versión 1.5.26 de Joomla! un día, sin motivo aparente, comienza a presentar errores en la navegación, en principio y atendiendo al mensaje de error, parecía que el problema se daba en la conexión con la base de datos.

Después de conversar con el servidor, nos cuentan que la base de datos que utilizamos está saturada y de ahí los problemas, que probablemente sea debido a alguna extensión instalada en la web u otro tipo de error en la programación del sitio. Realizando un exhaustivo examen de todas las extensiones de Joomla!, se desactivan las que parecen realizar mayor número de peticiones a la base datos.

Al poco tiempo, cuando parecía simplemente un repentino y extraño fallo, los problemas para acceder al sitio web se multiplican al poco, informando el servidor en esta ocasión de un exceso de consumo de recursos PHP y de peticiones al servidor... ¿Qué está ocurriendo? ¿Cómo puede ser que de la noche a la mañana y sin realizar ninguna acción relevante empiece a fallar todo?

Solución

Después de varios días, por fin parece que vamos situando el problema, y es que, consultando las estadísticas del servidor comprobamos unas series de IP de origen chino que están demandando muchísimos recursos, no aparecen en Google Analytics y evidentemente no se corresponden con el comportamiento normal de visitantes humanos.

Lo primero que hacemos es intentar que el servidor bloquee esas IP concretas que en los últimos días están entrando insistentemente. En principio parece de nuevo que se soluciona, pero al día siguiente, las IP cambian y la web vuelve a presentar problemas. Es algo extraño, ya que estas visitas de robots considerados Spam que estaban desestabilizando el funcionamiento de la web no dejaba comentarios ni ninguna otra huella aparente que la de intentar una y otra vez acceder al sitio.

Habiendo situado completamente el problema como Spam, con robots accediendo una y otra vez a nuestra web hasta saturarla, las medidas que tomamos son:

  • Bloqueo de IPs  en el archivo .htaccess
Una de las funciones más utilizadas del archivo .htaccess (aparte del tema de las URL en Joomla!) es poder denegar manualmente el acceso al sitio de determinadas IPs o rangos de IP. Para lograrlo, tenemos que escribir al final del archivo:
## USER IP BANNING
<Limit GET POST>
order allow,deny
deny from 220.161.103.
deny from 121.205.
deny from 91.188.124.239
deny from 178.137.92.179
allow from all
</Limit>

Varias notas al respecto:
  1. El ejemplo es un extracto del código real compuesto por muchas más IPs, siempre respetando el mismo formato por línea. Como se puede ver está compuesto por IP completas y rangos (los dos primeros que terminan en punto) que facilitan la labor de denegar IPs que comparten bloques de números idénticos.
  2. Para saber que IP son las que accedían analizamos las estadísticas del servidor.
  3. La primera línea <Limit GET POST> también se puede encontrar como <Limit GET HEAD POST>. Se puede utilizar una u otra siempre que no aparezca problema de incompatibilidad en el servidor.
Perfecto, con esta limitación manual nos aseguramos que esas IPs malignas concretas no vuelvan a acceder a nuestra web, pero ahora queda lo más difícil ¿cómo hacemos para que esto no nos vuelva a ocurrir?

  • Instalación del plugin HTTP:BL
Para tener protegido nuestro sitio Joomla! de forma permanente contra nuevos ataques de Spam, instalamos el plugin gratuito denominado HTTP:BL - Project Honeypot Blocklists con el objetivo de tener un sistema que bloquee de forma automática las IPs consideradas malignas.

Una vez que instalamos el plugin -con versiones para Joomla! 1.5 y 2.5- tenemos que darnos de alta en el Project HoneyPot cuyo objetivo es precisamente fomentar una comunidad que pueda detectar y prevenir ataques de Spam a nivel global. Cuando nos registramos nos asignan nuestra "API Key" que tenemos que escribir en la configuración de nuestro plugin. Posteriormente lo activamos y algo importante, lo tenemos que colocar para que se cargue en primer lugar (posición 0).

Cuando comienza a funcionar el plugin, nos genera en el directorio principal de nuestro alojamiento un archivo denominado "httpbl.txt" en el que se recoge de forma constante la actividad de esta magnífica extensión, bloqueando todas aquellas IPs que están en la base de datos del proyecto clasificadas como malignas o como Spam. Los que no estén muy seguros de su utilidad, quedarán convencido viendo los resultados en este archivo que comentamos.

Complementariamente, se puede colaborar de diversas formas con Project HoneyPot para la detección y prevención del Spam, fundamentalmente colocando códigos "trampa" por tu web no visibles para los humanos pero que los robots de Spam consideran vulnerables, permitiendo así analizarlos para poder bloquearlos.

Pues de esta forma es como pudimos solventar este extraño error que nos costó detectar. Desde entonces vamos observando el archivo "httpbl.txt" y, aunque son bloqueadas, si vemos que una IP o rango concreto quiere entrar demasiadas veces seguidas en la web, procedemos a incluirla en nuestra lista negra en .htaccess añadiendo otra línea con "deny from" y la IP en cuestión.