Seguridad en Joomla: ¡Si se puede!

Creo que a estas alturas de la vida (¿de verdad quiero empezar esto así?) sobra decir que un sitio web 100% seguro no existe. Desde el momento en el que tu sitio web está en Internet, es vulnerable a cualquier ataque. Esto es así. Ahora bien, se lo podemos poner en bandeja a los “malos” o hacer que suden la gota gorda y tiren la toalla.

Joomla! es uno de los gestores de contenido (CMS) más utilizados en el mundo para crear sitios web y existe mucha controversia de opiniones en cuanto a su seguridad. Hay gente que cree que el hecho de ser un CMS libre y extendible con extensiones de terceros le condena a ser muy vulnerable pero por otra lado, gran parte de la comunidad defiende su CMS como uno de los más seguros que existen gracias a que todo su equipo de seguridad comprueba constantemente los problemas reportados por la propia comunidad de Joomla!.

En este artículo os voy a dar algunos consejos para que esos, los “malos”, acaben sudando y den por imposible vulnerar la seguridad de nuestro sitio web creado con Joomla!. Ahí voy…

Mantén actualizado el servidor

Intenta que el servidor donde tienes instalado Joomla! esté actualizado a las últimas versiones estables de PHP y de MySQL. Eso sí, ten en cuenta los requisitos técnicos que recomienda Joomla! para la versión del CMS que tengas instalada. Que debe ser la última!! Luego lo hablamos…

Configura correctamente PHP

Es muy recomendado para la salud del servidor que se configuren correctamente algunas directivas de PHP:

  • Desactiva “register_globals”, “allow_url_fopen” y “safe_mode”.
  • Establece el valor de “disable_functions” a uno típico para Jooma!: show_source,system,shell_exec,passthru,exec,phpinfo,popen,proc_open
  • Activa “open_basedir”.

Descarga Joomla! desde su casa y actualiza

Cuando vayas a instalar nuestro CMS preferido, descárgalo desde el sitio oficial para asegurarte de que está limpio de posibles amenazas. Pero sobre todo (1), sobre todo (2), sobre todo (y 3), manténlo actualizado a la última versión estable.

No des más pistas sobre la base de datos

Todos sabemos el nombre que tienen las tablas de la base de datos de Joomla! y además conocemos sus estructuras. Pero lo que nadie sabe es el prefijo que tienen “tus” tablas. No uses como prefijo de la tablas de MySQL algo que identifique tu sitio web. Lo ideal es un prefijo de 3 caracteres, aleatorio y que empiece por una letra. Recuerda, vamos a ponérselo dificil a los “malos”.

Evita usuarios y contraseñas típicas

Pues eso, evita los u:admin;p:admin, u:joomla;p:joomla, etc… Protege el usuario Super Administrador con una contraseña (mínimo 6 caracteres) que tenga letras y números e intenta que tanto el nombre de usuario como la contraseña no tengan un patrón fácilmente deducible.

Instala sólo lo que esté en el JED

¿Qué es el JED? ¿Que no sabes qué es el JED? ¡¡¡¿¿¿Nooooo???!!! Tira para delante anda….
El JED es el Joomla! Extensions Directory (Directorio de Extensiones de Joomla!). Pues bien, instala sólo extensiones de terceros que estén en el directorio. Nada más. Te sentirás mejor….. y tu web también.

Yo no soy Joomla!

Hay muchos de esos “malos” (“malos” automáticos) que buscan desesperadamente en Internet sitios web desarrollados con Joomla! para atacarlos. De ahí, que algo muy prudente sea no identificar tu sitio web con Joomla!. Elimina, sobre todo del código fuente, cualquier cosa que lo delate para reducir los ataques a través de los buscadores.

Tú no sirves. ¡¡Fuera!!

Elimina del servidor todo aquello que no te haga falta. Extensiones de terceros o idiomas que no usas, ficheros, etc… Es una práctica muy habitual instalar cosas en fase de desarrollo que luego en producción finalmente no se usan. Asi que fuera!!, fuera!!.

El “configuration.php” a la sala VIP

Mueve el fichero “configuration.php” fuera del espacio público del servidor, es decir, que no sea accesible vía URL. Es el fichero mas sensible de Joomla! ya que contiene información crítica sobre la base de datos, sobre el FTP, sobre el servidor SMTP, sobre la estructura de directorios del servidor, etc…

Cambia el nombre a los directorios “logs” y “tmp”

Estos dos directorios pueden llegar a contener información sensible que a más de un “malo” le gustaría tener. Te aconsejo que les cambies de nombre y que además, te asegures de que el directorio “tmp” esté vacío y no se haya quedado basura producida por alguna instalación anterior.

Permisos 755 para directorios y 644 para ficheros

Una vez que el sitio web está configurado y es estable, debes establecer los permisos de directorios y ficheros correctamente protegiéndolos contra escritura. Lo mejor, en la medida de lo posible, es que los directorios tengan permisos 755 y los ficheros tengan permisos 644.

Directorio “administrator”: una caja fuerte

Supongo que a estas alturas de artículo (si has llegado hasta aquí deja que me dé la enhorabuena), te ha quedado claro que a los “malos” ni agua. Vamos a seguir poniéndoselo muy dificil.

Ahora te propongo que protejas el directorio “administrator” con contraseña usando una autenticación HTTP. Existen muchas herramientas que te pueden ayudar y además, te aconsejo que lo hagas con una buena contraseña (mínimo 12 caracteres), por ejemplo una combinación aleatoria de letras mayúsculas, letras minúsculas, números y símbolos.

Para rematar, lo mejor es que el fichero que contiene la contraseña encriptada descanse fuera del espacio publico de tu servidor, al igual que hemos hecho con el “configuration.php”. Acuérdate, la zona VIP.

Securiza, securiza y securiza todo lo que puedas

Añade toda la seguridad que puedas o sepas en la configuración de Apache (a través de un fichero .htaccess). Algunos ejemplos:

#Protege el propio fichero .htaccess
<Files .htaccess>
order allow,deny
deny from all
</Files>

#Protege el fichero configuration.php
<FilesMatch “configuration.php”>
Order allow,deny
Deny from all
</FilesMatch>

#Dentro del directorio “images” evita que se ejecuten scripts
<FilesMatch “\.(phtml|php|php3|php4|php5|php6|phps|cgi|exe|pl|py|asp|aspx|shtml|shtm|fcgi|fpl|jsp|htm|html|wml|cgi|cgi|sh)$”>
Order Allow,Deny
Deny from all
</FilesMatch>

#Oculta la estructura de directorios
Options All -Indexes

Máquinas no, aquí personas

Incluye un captcha en todos los formularios del sitio web en los que veas oportuno. Así evitarás ataques automatizados y masivos a través de ellos.

Deja un comentario