1. Instalación de WordPress
Instalar el CMS es una de las tareas cruciales para mantenerlo seguro, si bien es posible realizarlas una vez está instalado, es más sencillo y conveniente hacerlo en este momento.
A. Requisitos del sistema
Una instalación de una versión superior a la 2.5 de WordPress requiere para funcionar:
· Un servidor Web que soporte PHP. Automattic recomienda usar Apache o Litespeed.
· Si se usa Apache, contar con el módulo mod_rewrite instalado.
· PHP 4.3 o superior.
· MySQL 4.0 o superior.
· Para seguir este tutorial, Subversion 1.4 o superior.
Para seleccionar una versión en concreto de las herramientas anteriores es conveniente tener en cuenta que las versiones más nuevas ofrecen nuevas características, pero frecuentemente más agujeros de seguridad, además es necesario mantenerlas actualizadas constantemente.
B. Configuración previa de la base de datos
Es necesario crear una base de datos para WordPress, para ello es posible usar la interfaz de comandos de MySQL:
mysql> create database <db>;
Query OK, 1 row affected (0.01 sec)
Donde <db> será el nombre de la base de datos que usará WordPress. Una buena estrategia es utilizar un nombre que no sea obvio, como wp, wordpress o el nombre del sitio Web.
Además, es más que conveniente crear un usuario con permisos limitados para acceder a esta base de datos y evitar el uso de root o similares. Para ello, se puede usar el siguiente comando:
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE
‐> ON <db>.*
‐> TO ‘<user>’@'localhost’
‐> IDENTIFIED BY ‘<pass>’;
Query OK, 0 rows affected (0.01 sec)
En este caso, se crea un usuario con permisos concretos sobre la base de datos <db>. Es recomendable usar una contraseña robusta, como de costumbre.
A este usuario podrían dársele permisos de DROP sobre los objetos de la base de datos, pero es preferible omitirlos y borrar los objetos manualmente. Hay que recordar que los permisos SQL DELETE y DROP son diferentes, mientras que el primero permite eliminar registros de las tablas, el segundo permite eliminar objetos enteros.
C. Obtención de los ficheros de WordPress
Para facilitar la instalación y actualización de WordPress y evitar que queden ficheros huérfanos entre los cambios de versión, es muy recomendable mantener la copia local del repositorio SVN de Automattic (1).
En el momento de escribir esta guía, la última versión de WordPress es la 2.5.1, por lo que para obtener una copia del repositorio se puede usar el siguiente comando en el directorio donde Apache busque los ficheros:
$ svn co http://svn.automattic.com/wordpress/tags/2.5.1/ .
Con esto, tenemos una copia lista para usar de WordPress.
D. Creación del fichero wp-config.php
Este es el fichero fundamental que contiene la configuración de la base de datos a la que se conectará WordPress. Para ello, hay que renombrar el fichero wp-config-sample.php que incluye la instalación por defecto:
$ mv wp-config-sample.php wp-config.php
Y cambiar las siguientes líneas:
define(’DB_NAME’, ‘<db>’);
define(’DB_USER’, ‘<user>’);
define(’DB_PASSWORD’, ‘<pass>’);
define(’SECRET_KEY’, ‘<secret_key>);
$table_prefix = ‘<prefix>_’;
Los campos <db>, <user> y <pass> son los que anteriormente fueron creados y que identifican la base de datos.
El campo <secret_key> es una clave secreta que permite a WordPress tener ciertas funciones criptográficas. Es conveniente generarlo aleatoriamente, para lo que se puede visitar el URI (2) donde se genera de forma aleatoria y con una buena longitud.
El campo <prefix> identifica el prefijo que las tablas de WordPress van a tener en la base de datos. Para evitar ciertos ataques a la base de datos es importante seleccionar un prefijo aleatorio de entre 6 y 8 caracteres alfanuméricos.
E. Instalación automática
En este punto, ya es posible finalizar la configuración desde el navegador, al abrir la URI del servidor se presentará en pantalla un formulario para configurar de forma básica el blog:
En este caso hay que configurar el título del sitio y el correo electrónico del administrador. Cuando la configuración termine de cargar la base de datos y generar ciertos datos, se mostrará una contraseña generada aleatoriamente, que podremos cambiar desde el panel de administración una vez nos identifiquemos.
2. Actualización de WordPress
Es fundamental mantener actualizado todo lo que haya instalado en el blog: el propio WordPress y los plugins y plantillas que se estén usando.
A. Principios de actualización
Mantener actualizada la distribución de WordPress es interesante porque, además de incluir nuevas características, se suelen resolver problemas de seguridad y rendimiento.
Un buen orden para llevar a cabo esta tarea es, en primer lugar, actualizar todos los plugins y plantillas que se estén usando, de forma que se garantice la compatibilidad con las nuevas versiones de WordPress y a continuación, pasar a actualizar WordPress (3).
B. Actualización automática y privacidad
Las versiones de WordPress 2.3 y superiores cuentan con la funcionalidad de notificar las actualizaciones disponibles, además, si se cuenta con versiones 2.5 y superiores, éstas permiten actualizar automáticamente los plugins.
El problema principal de este sistema es que cada vez que se visita la pestaña de plugins del panel de administración, el servidor ha de comprobar las versiones de todos los plugins instalados, aumentando la carga del servidor y revelando a un atacante cuáles son éstos y qué versión tienen.
Para desactivar la actualización automática de WordPress y sus plugins, existen sendos plugins que llevan a cabo esta tarea: Disable WordPress Core Update (4) y Disable WordPress Plugin Updates (5).
Mientras estén activos, se desactivarán las actualizaciones automáticas. Para actualizar o comprobar las actualizaciones, basta con desactivarlos.
C. Actualizando mediante SVN
Al tener realizada la instalación como una copia local del repositorio SVN de Automattic, la actualización y la eliminación de ficheros huérfanos es tan sencilla como hacer un switch SVN al nuevo tag del repositorio para la nueva versión:
$ cd <dir>
$ svn sw http://svn.automattic.com/wordpress/tags/<version>/
De esta forma, Subversion actualizará todos los ficheros implicados y eliminará los no necesarios. A continuación, se debe ejecutar el tradicional wp-admin/upgrade.php para ejecutar las posibles actualizaciones a la base de datos.
3. Configuración de acceso al blog
Para incrementar la protección ante ataques como de enumeración de usuarios o de escalada de permisos, es conveniente realizar unas pequeñas tareas en la base de datos del blog.
A. Cambio del nombre de usuario del administrador
Por omisión, el nombre del usuario con más poderes de WordPress es admin. Cambiando el nombre de este usuario incrementa la protección contra ataques de enumeración de usuarios.
Para ello, se debe usar el siguiente mandato SQL en la consola de base de datos:
mysql> UPDATE <prefix>_users SET user_login=’admin’,user_login=’<adm>’;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Donde <prefix> corresponde al prefijo que fue antes asignado y <adm> al nuevo nombre del administrador.
B. Crear usuarios para el uso diario
Para el uso general de WordPress, es decir, escribir entradas y páginas administrar los comentarios que llegan es más que suficiente contar con usuario con permisos limitados.
Para crearlo, es necesario visitar la pestaña Users del panel de administración. A la hora de aplicar los permisos, el rol Contributor es el más apropiado.
En cualquier caso, y conforme al principio de mínimo privilegio, aplicar una mayor granularidad sobre los permisos de los usuarios es posible usando el plugin Role Manager (6).
C. Proteger el acceso a directorios vitales
Además de establecer permisos correctos en el sistema operativo del servidor, es importante restringir los listados de directorios por parte del servidor Web. Los directorios a proteger son:
· wp-content
· wp-content/themes
· wp-content/plugins
· wp-content/uploads
· wp-includes
· wp-admin
La protección de estos directorios se debe hacer en dos vertientes:
a) Introducir en ellos ficheros index.htm, index.html e index.php vacíos. Esto evita listados de directorios no deseados.
b) Si se usa Apache, editar un fichero .htaccess en cada uno de ellos limitando las peticiones a ficheros de imágenes y ECMAScript (necesarios para los temas y plugins). El fichero puede contener lo siguiente (hay que agregar además los ficheros PHP que se necesiten, pues algún complemento puede necesitarlos):
Order Allow,Deny
Deny from all
<Files ~ “.(css|jpe?g|png|gif|js)$”>
Allow from all
</Files>
D. Proteger la parte de administración
El panel de administración de WordPress es fundamental para su funcionamiento y seguridad. Además de la propia protección que ofrece el sistema, es posible usar una zona Web privada que solicite otra contraseña al acceder. Para ello es necesario generar un fichero .htpasswd, que hay que almacenar fuera de ningún directorio accesible por la Web.
Para generarlo, basta con usar el comando siguiente:
$ htpasswd ‐cm <dir>/.htpasswd <adm2>
$ New password:
$ Re‐type new password:
Adding password for user <adm2>
Esto genera un fichero de contraseñas en el directorio especificado por <dir> y agrega la del usuario <adm2>, que es conveniente que sea diferente a la del administrador. Para cada usuario que tenga acceso a la parte de administración, hay que crearle una pareja de contraseñas (la de WordPress y la del servidor Web).
Para hacer que se solicite la contraseña, basta con editar el fichero .htaccess del directorio wp-admin y agregar lo siguiente:
AuthUserFile <dir>/.htpasswd
AuthType Basic
AuthName “WordPress”
Esto hace que Apache solicite autenticación, además de WordPress para acceder al panel de administración. Además, hay que restringir a la lista de usuarios válidos, agregando:
require user <adm2> <adm3>
Por último, es posible restringir el acceso a determinadas direcciones IP. Aunque es una medida muy segura, es poco útil para acceder desde cualquier sitio o si se posee una conexión con direccionamiento dinámico. Para agregar la limitación se debe agregar al fichero .htaccess del directorio wp-admin lo siguiente:
Order deny,allow
Allow from <ip>
Deny from all
4. Asegurando la privacidad
Una de las maneras más completas para asegurar la privacidad de los lectores es ofrecer el blog a través de un servidor Web con SSL habilitado. Este sistema garantiza que todos los datos intercambiados entre los clientes y el servidor irán cifrados y protegerán frente a ataques de modificación. Como contrapartida tiene que incrementa notablemente la carga en servidor cuando hay muchas visitas.
Una solución intermedia, aunque algo más compleja de mantener, es tener la parte pública bajo un servicio HTTP tradicional y la parte de administración bajo un servicio HTTPS (7).
Para establecer este sistema de seguridad es necesario configurar el servidor Web para el uso de un certificado, que previamente hay que crear.
A. Instalación de SSL
Instalar el módulo SSL en Apache es tan sencillo como ejecutar los comandos:
$ a2enmod ssl
Module ssl installed; run /etc/init.d/apache2 force-reload to enable.
$ /etc/init.d/apache2 force-reload
B. Creación del certificado
A continuación se explica la creación de un certificado personal para Apache. Este certificado generará avisos de seguridad a los usuarios, por lo que lo más recomendable es obtener un certificado SSL otorgado por una entidad certificadora.
Para generar un certificado personal, se pueden usar los siguientes comandos:
$ mkdir /etc/apache2/ssl
$ make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
Esto genera un certificado SSL tras introducir los parámetros solicitados (8) (9).
C. Configuración del sitio Web
Es momento de configurar el servidor para que escuche peticiones HTTPS (en el puerto 443) y redirija las peticiones HTTP (puerto 80) al puerto seguro.
En primer lugar, hay que crear un host virtual sobre el mismo directorio donde está instalado WordPress:
$ cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl
$ ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ssl
A continuación, se edita el fichero /etc/apache2/sites-enabled/ssl para cambiar las dos primeras líneas:
NameVirtualHost *:443
<VirtualHost *:443>
De esta forma, Apache ya escucha el puerto 443. Además, es conveniente editar el fichero /etc/apache2/sites-enabled/000-default para que éste escuche el puerto 80, cambiando las dos primeras líneas:
NameVirtualHost *:80
<VirtualHost *:80>
Además, hay que configurar el listener en el puerto 443 de Apache, para lo que se edita el fichero /etc/apache2/ports.conf para dejarlo así (este paso puede estar ya configurado al instalar mod_ssl):
Listen 80
<IfModule mod_ssl.c>
Listen 443
</IfModule>
Por último, es necesario indicar el certificado que se debe de usar, editando el fichero /etc/apache2/sites-enabled/ssl para agregar las líneas siguientes por ejemplo, justo debajo de justo debajo de la línea ServerSignature On:
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem
Con el fin de que todas las peticiones se hagan sobre SSL, se puede habilitar una redirección al protocolo seguro, editando el fichero .htaccess en la raíz del directorio de WordPress:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Para terminar, basta con reiniciar el servidor:
$ /etc/init.d/apache2 force-reload
5. Protección contra SPAM
Con la proliferación de interfaces de procedimiento remoto basadas en XML (XML-RPC) que permiten tener acceso a ciertas funciones de publicación a máquinas además de las personas, se ha incrementado notablemente la cantidad de comentarios no deseados en los sitios Web que implementan este protocolo, como es WordPress.
La mejor forma para protegerse contra este fenómeno indeseable es, además de usar las medidas anteriores, combinarlas con un sistema de detección de SPAM.
El plugin que más SPAM detecta y que menos interfiere con la usabilidad del sitio es Akismet (10), que requiere una clave para el API de WordPress.com. Este es un sistema basado en aplicar reglas para detectar los comentarios no deseados, pero hace que los comentarios se envíen a un servidor externo para ser comprobados, aumentando el tráfico de red.
Otros métodos de protección incluyen el uso de CAPTCHAS (esas letras que hay que introducir en un campo de texto), scripts u obligar al registro de los usuarios. Estos métodos interfieren más con el usuario y no detectan más cantidad de SPAM.
6. Otras medidas de protección
En este apéndice se resumen otras medidas adicionales que ayudan a mantener una instalación segura de WordPress.
A. Eliminar rastros trazables
Se entiende por rastros trazables cualquier información que pueda facilitar el trabajo a un atacante, como versiones o mensajes de error.
Para eliminar la información de versiones usadas, se puede hacer manualmente o usando un plugin como bs-wp-noversion (11).
Desde la versión 2.3.2 de WordPress, los errores de acceso a la base de datos se ocultan automáticamente, por lo que es útil actualizarse.
B. Detección de intrusiones
Es posible, si se es un poco paranoico, instalar un IDS (Sistema de Detección de Intrusiones) para vigilar los accesos a WordPress.
WPIDS (12) es un plugin que implementa esta funcionalidad.
C. Análisis de vulnerabilidades
Como cada blog es un mundo, hay posibilidad de hacer un análisis (13) de vulnerabilidades de la instalación de WordPress y el servidor Web.
7. La legislación española y WordPress
A. Ley Orgánica de Protección de Datos
La LOPD (Ley Orgánica 15/1999, de 13 de diciembre) impone ciertas condiciones y derechos a la hora de almacenar datos personales.
WordPress almacena ciertos datos personales a la hora de hacer comentarios, como la dirección IP, el identificador del agente de usuario, su correo electrónico o su nombre. Estos datos no necesitan medidas de seguridad especiales, pero sí la identificación y el registro del fichero de datos.
En primer lugar, hay que agregar un aviso del estilo:
Este sitio almacena un fichero de datos relativos a los comentarios enviados a este sitio. Podrá ejercer sus derechos de acceso, rectificación, cancelación u oposición mediante un envío de un correo electrónico a la dirección <Correo electrónico>.
Los ficheros de datos se gestionan con el fin de almacenar comentarios a las opiniones aquí vertidas y bajo la titularidad de <Nombre completo>.
Y además, registrar el fichero de datos en la Agencia Española de Protección de Datos o en la agencia territorial que corresponda.
B. Ley de Servicios de la Sociedad de la Información y de Comercio Electrónico
La LSSI (Ley 34/2002, de 11 de julio) pretende regular el comercio electrónico en Internet. En el caso del blogging, afecta principalmente a los blogs que contienen publicidad con la que se obtiene beneficio económico. Para satisfacer la LSSI, es suficiente con incluir un aviso en el sitio similar al siguiente:
Este sitio Web es propiedad de <Nombre completo>, residente en <Ciudad> (España) y con NIF <NIF>. Esta página es explotada publicitariamente por la anterior persona.
Esto no es necesario cuando los anuncios no son incluidos por la administración del sitio, como en ciertos alojamientos gratuitos.
8. Introducción a la optimización de WordPress
Mantener el servidor optimizado es importante de cara a ofrecer un servicio correcto y sin interrupciones. WordPress es un sistema eficiente, pero que agradece la aplicación de ciertas buenas costumbres.
A. Mantenimiento de la base de datos
Este es el punto más importante. Una base datos optimizada rendirá mejor y las consultas requerirán menos tiempo en completarse. Además se ahorrará espacio.
Para mantener optimizada la base de datos, basta con hacerlo desde el administrador de MySQL o usando algún script que lo automatice, como (14) o algún plugin, como Optimize DB(15).
B. Complementos y rendimiento
En este aspecto hay una regla clara: cuantos menos, mejor. Los plugins ocupan memoria y tiempo de proceso y, además, pueden ser inseguros.
Si la plantilla es un desarrollo propio, se puede intentar hacer inline las funciones de los plugins, con el correspondiente aumento del mantenimiento y la responsabilidad de comprobar la seguridad.
C. Caché
Para agilizar el servicio y reducir el tiempo que le cuesta al servidor generar una página, es muy recomendable usar un sistema de caché, que mantendrán las páginas generadas durante cierto tiempo.
Existen opciones interesantes, como WP-cache (16) o 1 Blog Cacher (17).
9. Bibliografía
1. Automattic. Installing/Updating WordPress with Subversion. WordPress Codex. [En línea] [Citado el: 21 de Mayo de 2008.] http://codex.wordpress.org/Installing/Updating_WordPress_with_Subversion.
2. —. Secret Key generator. WordPress.org API. [En línea] [Citado el: 21 de Mayo de 2008.] http://api.wordpress.org/secret-key/1.0/.
3. —. Upgrading WordPress. WordPress.org Codex. [En línea] [Citado el: 21 de Mayo de 2008.] http://codex.wordpress.org/Upgrading_WordPress.
4. Blackbourn, John. Disable WordPress Core Update. WordPress Plugins. [En línea] [Citado el: 21 de Mayo de 2008.] http://wordpress.org/extend/plugins/disable-wordpress-core-update/.
5. —. Disable WordPress Plugin Updates. WordPress Plugins. [En línea] [Citado el: 21 de Mayo de 2008.] http://wordpress.org/extend/plugins/disable-wordpress-plugin-updates/.
6. im web gefunden. Role Manager. im web gefunden. [En línea] [Citado el: 21 de Mayo de 2008.] http://www.im-web-gefunden.de/wordpress-plugins/role-manager/.
7. BlogSecurity.net. bs-wp-encrypt plugin: Encrypt Logins. BlogSecurity.net. [En línea] [Citado el: 21 de Mayo de 2008.] http://blogsecurity.net/wordpress/bs-wp-encrypt-plugin/.
8. Canonical. SSL Install Method. Ubuntu forum. [En línea] [Citado el: 21 de Mayo de 2008.] https://help.ubuntu.com/community/forum/server/apache2/SSL.
9. —. HTTPD - Apache 2 Web Server. [En línea] [Citado el: 21 de Mayo de 2008.] https://help.ubuntu.com/7.10/server/C/httpd.html#https-configuration.
10. Automattic. Akismet. [En línea] [Citado el: 21 de Mayo de 2008.] http://akismet.com/.
11. BlogSecurity.net. bs-wp-noversion plugin: Removes WordPress Version. BlogSecurity.net. [En línea] [Citado el: 21 de Mayo de 2008.] http://blogsecurity.net/wordpress/bs-wp-noversion/.
12. —. WordPress Security Whitepaper. [PDF] s.l. : BlogSecurity.net, 2008.
13. Automattic. Installing WordPress. WordPress.org Codex. [En línea] [Citado el: 21 de Mayo de 2008.] http://codex.wordpress.org/Installing_WordPress.


































Be First To Comment
Post relacionados
Deja tus comentarios a continuación