Instalando memcached en Debian y habilitando su uso con WordPress

herramientas memcached es uno de los sistemas de caché para servidores web más usado. Usa una zona de la memoria RAM del servidor web de tamaño configurable como caché y funciona bien tanto en sitios pequeños y discretos como en grandes sistemas con múltiples servidores. Facebook, Twitter o Youtube, por ejemplo, usan este sistema de cacheado. El 85% de los 20 sitios con más tráfico de Internet lo usan, en realidad. Nada mejor, pues, para estrenar una pequeña sección acerca de sistemas y extensiones de cacheado para apache ¿no?

Partimos para la instalación de una Debian en la que ya tenemos un servidor web apache y la versión 5 de php (paquetes apache2 y php5). Para instalar memcached en una Debian he tenido que recurrir a usar “paquetería” de wheezy (testing) porque parece que hay algún problema de dependencias en la versión estable (squeeze) y la librería de extensión para trabajar con PHP no compilaba correctamente. Así que manos a la obra. El primer paso es instalar el servidor de memcached:

apt-get install memcached

El servicio se instala, como es habitual, en el directorio /etc/init.d y responde a los argumentos start, stop, restart, force-reload y status. En el directorio /usr/share/memcached/scripts existe un script llamado start-memcached que es el encargado de realizar el inicio automático y que toma la configuración del archivo memcached.conf en el directorio /etc. Dentro de este fichero de configuración una de las opciones más interesantes es la que dice a memcached cuanta RAM va a usar como caché. Por defecto son 64M, pero en sistemas con muy poca RAM tal vez nos convenga bajarlo. Mi VPS tiene sólo 512M de RAM y yo he bajado esos 64M a la mitad. Para ello basta con cambiar la línea -m 64 por -m 32 y reiniciar el servicio.

Otra de las opciones interesantes en ese archivo de configuración es la posibilidad de habilitar un archivo de logs que, por defecto, viene deshabilitado. Para ello basta con quitar el comentario a una de las dos opciones que aparecen el el fichero según el nivel de detalle que queramos: -v o -vv. El log se grabará en el fichero /var/log/memcached.log. Esto también es configurable modificando la línea que aparece en el mismo fichero. Y no olvides que para que la opción tome efecto haz de reiniciar de nuevo el servicio de memcached.

El segundo paso sería instalar la extensión de memcached para PHP. Para ello tenemos que instalar los siguientes paquetes:

apt-get install php-pear php5-dev php5-memcached libmemcached10 libmemcached-dev libmemcachedutil2 libhashkit2 libhashkit-dev

Y, a continuación, ejecutar lo siguiente:

pecl install memcached

Si todo sale bien, al final del proceso se nos mostrará un mensaje similar a este:
Instalación del módulo PHP de memcached

La librería debería de haberse creado en el directorio de extensiones de php que se indica al final del proceso y que puedes ver en la imagen anterior (/usr/lib/php5/20100525+lfs) y ya sólo nos resta hacerle caso al mensaje final y añadir la línea extension=memcached.so al final de nuestro fichero php.ini que debería de estar en el directorio /etc/php5/apache2. Reiniciamos apache y, si ejecutamos la función phpinfo veremos una nueva sección:
phpinfo con información del módulo memcached

Para ver información acerca de como está funcionando nuestra cache tenemos un par de opciones más atractivas que inspeccionar el fichero de log que hemos mencionado antes. Una de ellas es usar el script memcached-tools que encontraremos en el directorio /usr/share/memcached/scripts/.

/usr/share/memcached/scripts/memcached-tool 127.0.0.1:11211

El comando anterior muestra información sobre el estado del servicio memcached que hemos instalado en nuestra máquina. Añadiendo al final el argumento stats nos mostrará estadísticas de uso y con el argumento dump realizará un volcado del contenido de la caché por pantalla.

La segunda opción que tenemos es bajarnos de aquí un script hecho en perl y llamado memcache-top. Tienes distintos argumentos para modificar la salida que puedes consultar en la web desde la que te has bajado el script. En la imagen siguiente se muestra con las opciones --cumulative y --commands
ejecución de memcached-top

Y ya sólo nos queda habilitar el uso de memcached desde wordpress. Para ello usaremos Memcached Object Cache que, aunque aparece como cualquier otro en el repositorio de plugins de wordpress, en realidad precisa de una sencilla instalación manual para que funcione. Bajamos el archivo, lo descomprimimos y copiamos el archivo object-cache.php en el directorio wp-content de nuestra instancia de wordpress.

Configurar un servidor de correo multidominio con Postfix

correo ¿Se acuerdan ustedes de la entrada que hicimos por aquí hace algo más de un añito sobre como montar un servidor de correo electrónico en Debian? Bien, pues lo hemos hecho crecer un poco y ahora necesitamos que atienda a los correos de más de un dominio. ¿Que tenemos que añadir a lo allí visto? Poquito más. En el fichero /etc/postfix/main.cf tenemos que incluir las siguientes dos líneas:

virtual_alias_maps = hash:/etc/postfix/virtual
virtual_alias_domains = dominio1.net, dominio2.es, dominio3.es

Con la primera línea indicamos el fichero donde crearemos las equivalencias entre buzones y direcciones de correo y que ahora veremos como se hace. Con la segunda enumeramos los dominios que gestionará nuestro servidor y que, lógicamente, deben de tener sus correspondientes registros MX apuntando hacía la dirección de nuestro servidor de correo. Y no olvides hacer un reload de la configuración después de hacer los cambios:

service postfix reload

En el fichero que hemos indicacado en la línea 1 anterior (/etc/postfix/virtual) hacemos una relación de las diferentes direcciones de correo que queremos que nuestro servidor atienda y si queremos redireccionarlas a otra cuenta (es decir, crear un alias) o guardar lo recibido en el buzón correspondiente de un usuario. Así por ejemplo:

webmaster@dominio1.net  josemaria
webmaster@dominio2.es josemaria
webmaster@domino3.es josemaria
josemaria@dominio2.es josemaria@gmail.com
morales@dominio1.net morales, morales@gmail.com

A la izquierda aparece siempre la dirección de correo que nuestro servidor postfix atenderá y a su derecha el destino del correo que recoja en la misma. En el ejemplo anterior, con las tres primeras líneas le indicamos que todo lo que se recoja a través de las tres cuentas que allí aparecen debe de guardarse en el buzón de correo del usuario josemaria. Con la cuarta línea estamos creando un alias: todo el correo que se reciba en la cuenta josemaria@dominio2.es se remitirá directamente a la cuenta indicada de gmail sin almacenarse en el servidor. La quinta línea recepciona lo recibido en la cuenta morales@dominio1.net, lo reenvía a la cuenta morales@gmail.com y, además, lo guarda en el buzón del usuario morales.

Después de cada cambio en este fichero debemos de ejecutar lo siguiente:

postmap /etc/postfix/virtual

El resultado será un fichero llamado virtual.db en ese mismo directorio y que será realmente el que postfix usa para gestionar alias y buzones.

Por cierto, un recurso interesante para probar si nuestro servidor de correo acepta algún tipo de relay que pueda ser aprovechado por los spammers es este. Y si quieres analizar tu servidor de correo échale un vistazo a este otro.

Instalando Pandora FMS en Debian

opinion Pandora FMS (Flexible Monitoring System) es una herramienta de monitorización de software libre (desarrollada por Ártica, una empresa española) que hace ya tiempo que tenía ganas de probar, así que aprovechando las vacaciones y el reciente lanzamiento de su versión 3.1 me he puesto manos a la obra. Al estilo de lo que dejamos por aquí hace ya unos años cuando hablamos de Nagios, tocaremos en esta primera entrada la instalación y primeros pasos y en posteriores posts veremos algunas de las principales tareas de configuración y gestión. Agarraos.

Vaya por delante que yo nunca he pensado que instalar y/o configurar Nagios sea algo complicado. Pero es que instalar Pandora FMS y crear un primer mapa de los elementos de tu red (que es lo que veremos hoy aquí) es tan fácil como comerse un bizcocho. No existen extrañas dependencias, no hay nada que compilar, ni arcanos ficheros que editar. La instalación de Pandora FMS es más fácil aún que la de wordpress, drupal o la de cualquier otro CMS vulgarote. Una verdadera gozada. Ya no hay excusa válida para no monitorzar el estado de tu red y de sus elementos de forma centralizada.

Pandora FMS está formado por tres componentes: servidor, consola y agente. A grandes rasgos, los servidores son las máquinas desde las que se lanzan los diferentes tests, la consola la que contiene la instancia de Apache a la que nos conectamos para administrar, configurar y monitorizar el conjunto y los agentes serían las máquinas a monitorizar. Una instalación típica de Pandora FMS tendrá una consola, uno o más servidores y tantos agentes (en máquinas windows o GNU/Linux) como deseemos. Para este ejemplo partiremos de una instalación limpia de Debian Lenny 5.0.5 eligiendo sólo los paquetes standard mínimos. Sobre esta máquina instalaremos el servidor, la consola y un primer agente.

Lo primero que debemos hacer es instalar las dependencias previas. Se trata, en su práctica totalidad, de paquetes estándar y disponibles en los repositorios stable de Debian. En la wiki del proyecto (con muy buena documentación, por cierto) hay un apartado dedicado a esto pero a mi me han faltado algunos. La lista que yo he necesitado es la siguiente:

# apt-get install snmp snmpd sudo xprobe2 nmap traceroute mysql-server mysql-client dbconfig-common apache2 php5 libapache2-mod-php5 php5-gd php5-mysql php-pear php5-snmp php-db php-gettext php-db php5-xmlrpc php5-ldap libtime-format-perl libxml-simple-perl libnetaddr-ip-perl libdbi-perl libhtml-parser-perl libmail-sendmail-perl libio-socket-multicast-perl libhtml-tree-perl graphviz

En segundo lugar, nos descargamos e instalamos las herramientas y dependencias que Debian no ofrece como paquetes estándar de las páginas del proyecto en Sourceforge.

Tercero: nos bajamos, también de Sourceforge, los paquetes de los tres componentes de Pandora FMS (consola, servidor y agente) y los instalamos igualmente. El paquete del agente que está disponible ahora mismo da un error de instalación que se soluciona siguiendo las indicaciones de este foro.

Se acabó la línea de comandos. Puesto que en la máquina en la que estamos haciendo la instalación no hemos instalado siquiera las X, nos vamos a nuestra máquina de escritorio, abrimos un navegador y cargamos la siguiente URL para iniciar la configuración:

http://<ip o nombre de la maquina>/pandora_console/install.php

La configuración se hace a través de seis sencillos pasos que podeis ver en las diapos de aquí abajo. Aceptamos la licencia, verificamos que todas las dependencias se han instalado correctamente, aceptamos los datos relativos a la base de datos y la instancia web y cumplimentamos los datos de un usuario con privilegios para crear la nueva base de datos y, muy importante, anotamos la contraseña aleatoria que nos muestra en la pantalla número 5.


Antes de entrar por primera vez en la consóla debemos de proporcionar al servidor la contraseña que se nos ha facilitado durante la instalación. Para ello editamos el fichero /etc/pandora/pandora_server.conf y localizamos en él el parámetro dbpass:

dbpass ghqshtvw

Finalmente relanzamos el proceso del servidor (que debe de haber abortado tras la instalación debido a la ausencia de esta contraseña):

# /etc/init.d/pandora_server start /etc/pandora/pandora_server.conf

pandora fms login Y esto es todo. Si ha habido algún problema debería de haber quedado reflejado en los archivos de log que se encuentran en el directorio /var/log/pandora. Si todo ha salido bien podemos ir a nuestra máquina de escritorio y entrar en la consola a través de la siguiente URL. El usuario creado inicialmente de forma automática es admin y la contraseña pandora:

http://<ip o nombre de la maquina>/pandora_console/

La pantalla inicial que se nos presenta tiene el aspecto de la imagen de aquí abajo (pulsa sobre ella para ampliarla). En la wiki de documentación del proyecto tienes una buena descripción de cada uno de sus apartados:
Pantalla inicial de Pandora FMS

Y vamos a terminar por hoy diciendole a Pandora que lance una tarea de reconocimiento para que veamos cuan fácil es crear un mapa de nuestra red. Para ello, y dentro del menú lateral de administración, desplegamos la opción de “Gestionar servidores” y pulsamos sobre “Gestionar tarea recon”. Pulsamos el botón de Crear y cumplimentamos la ficha con los datos de nuestra red:
Creando una tarea de reconocimiento en Pandora FMS

Ya experimentaremos más adelante con los campos de plantillas, puertos, etc. Por el momento sólo pondremos un nombre a la tarea, cumplimentaremos correctamente el “scope” de nuestra red y pulsaremos el botón de Añadir. La tarea se creará y se lanzará de forma automática. Si queremos ver el avance de la exploración vamos al menú lateral de operaciones, desplegamos la opción de “Servidores” y pulsamos sobre el nombre de nuestro servidor para que nos muestre las tarea que está ejecutando en este momento y el progreso de las mismas:
Creando una tarea de reconocimiento en Pandora FMS

Al terminar la exploración desplegamos la opción de “Ver agentes” (también en el menú de operación) y elegimos “Mapa de red”. Et voilà:
Mapa de red en Pandora FMS

Pulsando sobre cualquiera de los dispositivos mostrados en el mapa obtendremos una ventana de detalle como la siguiente:
Vista de detalle de un host en Pandora FMS

Y por el momento basta. Otro día seguimos con ella.

Instalar un servidor de correo IMAP en Linux

correo Hoy vamos a dejar por aquí un paso a paso para montar un servidor de correo de la forma más sencilla posible y con acceso a través de IMAP y de webmail. Partimos, para ello, de un servidor Debian recien instalado y disponemos de un dominio y de un servicio desde el que gestionar los registros de nuestro DNS. Para la instalación usaremos Postfix como SMTP, Dovecot como servidor IMAP y Squirrel como servicio de Webmail.

Lo primero que debemos de hacer es planificar los nombres que necesitamos dar de alta en el DNS para hacerlo cuanto antes y dar tiempo a que se propaguen. Realmente un único registro A y otro MX nos valdrían ya que todo va a funcionar en la misma máquina, pero por aquello de que quede bonito y pensando en futuros cambios en los que el servicio crezca y necesitemos usar máquinas diferentes para cada cosa, deberíamos de crear un registro A diferente para cada uno de los servicios. Algo así:

smtp IN A 99.99.99.99
mail IN A 99.99.99.99
webmail IN A 99.99.99.99
@ IN MX 10 mail.midominio.com

Donde, lógicamente, hemos de cambiar midominio.com por el nombre de dominio que vamos a usar y 99.99.99.99 por la IP de nuestra máquina.

En segundo lugar debemos de instalar los paquetes que necesitamos. Dejaremos el webmail para el final y nos centraremos en el resto. Para ponerlo en funcionamiento necesitamos instalar, además de postfix y dovecot, los paquetes necesarios para realizar la autenticación mediante el protocolo SASL:

# apt-get install postfix-tls libsasl2-2 sasl2-bin libsasl2-modules dovecot-imapd

El archivo de configuración principal de postfix es /etc/postfix/main.cf. Lo siguiente que tenemos que hacer es editarlo y añadir las siguientes líneas a su contenido:

smtpd_sasl_local_domain = $myhostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
home_mailbox = Maildir/

En la primera línea debemos de sustituir la cadena en negritas por el dominio cuyo correo queremos recibir. El resto de los parámetros determinan el tipo de autenticación que vamos a realizar, el servicio que se encargará de la autenticación (dovecot en este caso) y las restricciones de acceso más comunes al servidor. Tienes información detallada de todas ellas en este enlace.

Con el parámetro home_mailbox, muy importante, indicamos a Postfix que queremos usar el formato de correo Maildir y que la ubicación de las carpetas donde se almacenará este será un directorio denominado Maildir en el raiz del directorio home de cada usuario. Si no lo especificamos así, el correo se almacenará en un único fichero con el nombre de la cuenta de cada usuario y bajo el directorio /var/mail.

Una de las operaciones que se realiza durante la instalación de Dovecot es crear la estructura necesaria para albergar los buzones de correo en el directorio /etc/skel que es el que sirve de plantilla para generar el home de los nuevos usuarios. Eso quiere decir que los usuarios que tengamos previamente creados antes de hacer esta instalación no dispondrán de dichos directorios y, por tanto, no funcionaran correctamente. Para remedir esto tenemos que copiar manualmente dicha estructura. Supongamos que queremos copiar la estructura de buzones al usuario josemaria, ya creado antes de esta instalación. La operación sería la siguiente:

# cp -r /etc/skel/Maildir /home/josemaria
# chown -R josemaria:josemaria /home/josemaria/Maildir
# chmod -R 700 /home/josemaria/Maildir

La configuración de dovecot la realizamos en el fichero /etc/dovecot/dovecot.conf. Así como el archivo de configuración de postfix es sencillito y asequible (apenas tiene 20 líneas), el de dovecot es un engendro de más de 1000 líneas. Casi todas son comentarios, si, pero aun así asusta bastante…

Los dos primeros cambios son para determinar el protocolo que vamos a usar y habilitar la autenticación mediante texto plano. Busca las siguientes líneas y asegúrate de que no están comentadas y de que sus valores son estos:

protocols = imap
disable_plaintext_auth = no

El siguiente cambio va encaminado a configurar el identificador único que usaremos para cada email. Para que exista compatibilidad con algunos de los clientes de Microsoft es necesario que se defina de esta forma:

pop3_uidl_format = %08Xu%08Xv

Y ya sólo nos resta por definir los parámetros relativos al mecanismo de autenticación que hemos elegido. Lo hacemos con el siguiente bloque:

auth default {
	mechanisms = plain login
	passdb pam {
	}
	userdb passwd {
	}
	socket listen {
		client {
			path = /var/spool/postfix/private/auth
			mode = 0660
			user = postfix
			group = postfix
		}
	}
}

Ahora necesitamos hacer unas pequeñas modificaciones para permitir la comunicación entre postfix y sasl. Puesto que el daemon de postix se ejecuta mediante chroot en el directorio /var/spool/postfix, crearemos un enlace allí al que podrá acceder el daemon de sasl:

# mkdir -p /var/spool/postfix/var/run/saslauthd
# rm -r /var/run/saslauthd/
# ln -s /var/spool/postfix/var/run/saslauthd /var/run
# chgrp sasl /var/spool/postfix/var/run/saslauthd
# adduser postfix sasl

Y, finalmente, debemos de reiniciar los tres servicios involucrados para que lean los cambios hechos en sus respectivas configuraciones:

#/etc/init.d/saslauthd restart
#/etc/init.d/postfix restart
#/etc/init.d/dovecot restart

Para quién la autenticación mediante usuario y contraseña con texto plano se le quede corta, puede echarle un vistazo a este tutorial donde explican como realizarla mediante TLS.

Vamos ahora con la instalación de Squirrel Mail que es mucho más sencilla. Para ello necesitamos instalar apache, php y el propio squirrel:

# apt-get install apache2 libapache2-mod-php5 php5-cli php5-common php5-cgi squirrelmail

En el directorio /etc/squirrelmail tenemos un archivo llamado apache.conf con la configuración necesaria para crear la instancia de apache que nos permitirá acceder a Squirrel. Debemos de editarlo para modificar los datos correspondientes al Virtual Host que queremos crear:

<VirtualHost *:80>
	DocumentRoot /usr/share/squirrelmail
	ServerName webmail.<strong>midominio.com</strong>
</VirtualHost>

Luego creamos un enlace a este archivo en el directorio sites-availables de apache:

# ln -s /etc/squirrelmail/apache.conf /etc/apache2/sites-available/squirrelmail

Y, por último, habilitamos el sitio y pedimos a Apache que vuelva a recargar su configuración:

#  a2ensite squirrelmail
# /etc/init.d/apache2 reload

La configuración de squirrel se realiza a través de un sencillo programa en modo consola que permite seleccionar, desde el idioma por defecto o el icono de la página de login, hasta la ubicación de carpetas por defecto o los plugins disponibles. Dicho programa se lanza con el siguiente comando:

# /usr/sbin/squirrelmail-configure

Con esto tenemos nuestro servidor de correo perfectamente operativo. Para crear una nueva cuenta de correo basta con que creemos un nuevo usuario en la máquina. Si creamos una cuenta llamada paquito, automaticamente se creará un buzón de correo para paquito@midominio.com cuyos mensajes se almacenaran en un directorio llamado Maildir que colgará del home de nuestro nuevo usuario.

Un par de ajustes finales. Si nuestra máquina permite el acceso por ssh y sólo queremos dar acceso de correo pero no permitir que estos usuarios accedan a la consola de la misma, lo mejor es que creemos un grupo con los usuarios que tendrán acceso de ssh y lo indiquemos así. Además, recordad que la autenticación de las cuentas de correo la estamos haciendo en texto plano, con lo cual cualquiera podría “escucharlas” y disponer de una cuenta de acceso a nuestra máquina. Podríamos, por ejemplo, tener un grupo llamado ssh_permitido al que pertenecerían los usuarios con permiso de acceso e indicarlo en el fichero /etc/ssh/sshd_config con la siguiente directiva:

AllowGroups ssh_permitido

Otro posible “extra” sería permitir que los usuarios con cuenta de correo pudieran modificar sus contraseñas a través de la web. En Unixcraft nos cuentan como hacer un script PHP para permitirlo.

ACTUALIZACIÓN: Los que necesiten gestionar el correo de más de un dominio pueden continuar por aquí. Y si quieres configurar un sistema antispam basado en greylisting échale un vistazo a esto.