Instalar un servidor de correo con docker

Hace tiempo que vengo mirando la tecnología de contenedores con interés, la verdad es que desde hace mucho tiempo el trabajo más ingrato, después de haber terminado un desarrollo, era configurar el servidor donde se iba a ejecutar finalmente. No basta con saber el sistema operativo, necesitas instalar una miriada de dependecias y de versiones de software que no siempre se encuentra en la versión que usaste para el desarrollo. Docker promete poder replicar entornos completos mediante una virtualización parcial y eso me parece muy, muy interesante.

Aunque no entraré al análisis profundo de cómo funciona docker, por el momento, si que veremos un ejemplo práctico de una tarea muy habitual como administrador de sistemas, configurar un servidor de correo con todos los servicios habituales. Para ello vamos a utilizar una máquina virtual (no sirve cualquiera, hay sistemas de virtualización que no se llevan bien con docker, en mi caso usé un VPS de OVH después de desechar otros dos de strato y webserver4you). Nuestra máquina virtual tiene un ubuntu 14.04… Al lío.

Lo primero que hay que hacer es instalar docker. Por suerte esto es bastante sencillo:

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
sudo apt-get install docker-engine

Con esto ya tendremos docker en la máquina. Podemos probarlo:

sudo service docker start
sudo docker run hello-world

Si no queremos andar usando sudo para cada comando, añadiremos nuestro usuario al grupo de docker:

sudo groupadd docker
sudo usermod -aG docker $USER

Ahora usaremos Poste.io como contenedor de nuestro servidor de correo. Es una solución simplemente completa y muy sencilla de instalar y configurar. En nuestro caso lo único que hay que hacer para ponerlo a funcionar es crear un directorio (en mi caso /home/mail/data) y ejecutar lo siguiente:

docker run \
-p 25:25 \
-p 81:80 \
-p 110:110 \
-p 143:143 \
-p 8443:443 \
-p 465:465 \
-p 587:587 \
-p 993:993 \
-p 995:995 \
-v /etc/localtime:/etc/localtime:ro \
-v /home/mail/data:/data \
-e "HTTPS=OFF" \
--name "mailserver" \
--restart=always \
-t analogic/poste.io

Lo más relevante en este caso es que NO queremos las redirecciones https porque vamos a configurar el servidor apache que ya tenemos para que actúe de proxy y será él quien tenga el https y los certificados y que el puerto que exponemos para la administración es el puerto 81 (redirigido al puerto 80 del contenedor).

Para que sea accesible desde el exterior por https lo que hicimos fue configurar un virtualhost en apache de esta manera:

<VirtualHost *:80>
        ServerName mail.midominio.es
        AssignUserId mailuser mailuser

        ServerAdmin [email protected]
        DocumentRoot /home/mailuser/www

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <Directory /home/mailuser/www>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>

ProxyPass / http://localhost:81/

RewriteEngine on
RewriteCond %{SERVER_NAME} =mail.midominio.es
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>

La configuración del https es similar, aunque yo dejé que el certbot de let’s encrypt me lo configurase automáticamente al generar los certificados, quedó una cosa como esta:

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName mail.midominio.es
        AssignUserId mailuser mailuser

        ServerAdmin [email protected]
        DocumentRoot /home/mailuser/www

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <Directory /home/mailuser/www>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>

ProxyPass / http://localhost:81/

SSLCertificateFile /etc/letsencrypt/live/mail.midominio.es/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mail.midominio.es/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/mail.midominio.es/chain.pem
</VirtualHost>
</IfModule>

Si todo ha ido bien (seguro que algún detalle se nos pasa), tendremos el contenedor funcionando y podremos acceder al administrador de esta manera:

https://mail.midominio.es/admin/

Y, después de verificar la identidad y hacer los primeros ajustes de dominio, cuentas y demás podremos disfrutar de nuestro servidor de correo…

 

Utilizando el DNIe desde ubuntu

Hace ni se sabe que tengo un lector de DNI electrónico, bueno, si lo se, me lo regalaron por asistir a un FICOD cuando eso todavía significaba algo… El lector es el que podéis ver en la imagen y, obviamente, bajo todos esos logotipos debería haber algo que funcionase, ¿no?

DNIeY la oportunidad para usarlo me vino por un despiste, vamos, lo normal… Dejé que caducase mi certificado de la FNMT, una pena, llevaba con él como 15 años y no lo había dejado caducar nunca, y me sirvió fielmente para todas mis gestiones desde el primer día… Pero en estos tiempos uno tiene la cabez donde no debe y se olvida de cosas como estas. En cualquier caso, y dado que salir a la delegación de hacienda para identificarme me parecía muy del siglo pasado, me busqué la forma de hacerlo totalmente por internet. Y, por increible que parezca, esa forma existe, se puede solicitar un certificado de la FNMT utilizando el DNI electrónico, ¿fácil no?

Pues no… En la página de la FNMT nos explican con todo lujo de detalles cómo configurar los navegadores y las limitaciones que tenía el proceso (en principio solo soportaban Internet Explorer con Windows XP y Firefox – con versiones inferiores a la 33 – en el resto). Bueno, todo es intentarlo.

Lo primero es hacer que funcione el DNIe en mi Ubuntu 14.04, dado que hay una guía fantástica guia ubuntu al respecto y mi lector estaba soportado, pues nada, simplemente la seguí al pié de la letra y, aparentemente, funcionó. Desde firefox (la versión que descargué ad-hoc para el proceso) se reconocía el dispositivo de seguridad y pedía el pin para ver los certificados… Vamos bien.

Lo siguiente no fué tan bien… El proceso de solicitud del certificado se paraba diciendo que «su navegador no ha generado una firma válida». Round 1 para FNMT.

Bueno, no pasa nada, lo intentaremos en MAC… Nada que hacer, ni siquiera consigo que me reconozca la tarjete. Round 2 también para FNMT.

Da igual, probamos en una máquina virtual con Windows 7, seguro que hay un procedimiento sencillo… Instalo los drivers y todos los exe que me aparecen en la sección de descargas y… Nada, Firefox no reconoce la tarjeta y Explorer (si, la desesperación nos puede) si que la reconoce pero da un error detrás de otro (ni siquiera llego al error que me sale en Ubuntu).

Llegados a este punto me pregunto, ¿alguien ha conseguido ejecutar este procedimiento alguna vez? y lo dejo pasar hasta hoy… Donde decido que ya es suficiente y que tengo que conseguirlo… Me pongo serio, me remango y me siento ante mi Ubunto 14.04, reviso que el DNI se lee correctamente y después de mucho trastear me encuentro con que el problema por el que no se genera la firma adecuada no es de los certificados de la FNMT, sino de la tarjeta, en concreto de este:

Captura de pantalla de 2014-12-05 22:50:22Que solo salió por casualidad cuando estaba repasando TODOS los certificados de autoridades que tenía en el Firefox (y son cientos), el caso es que este certificado hay que permitir que firme también editando la confianza:

Captura de pantalla de 2014-12-05 22:51:59Después de esto ya pasabamos del paso de generar la firma, peeeeeero nos quedaba otro error que nos saltaba justo después de ese paso y es que nos daba un error así:

Un módulo PKCS #11 ha devuelto CKR_GENERAL_ERROR, indicando que ha sucedido un error no recuperable.

(Código de error: sec_error_pkcs11_general_error)

Y esto no pintaba bien… Por suerte google salió al rescate y encontré este hilo en cenatic que hablaba del problema. La solución fue buscar la librería libpcsclite.so.1 y poner la ruta completa en el archivo /etc/opensc/opensc.conf en la línea:

provider_library = /lib/x86_64-linux-gnu/libpcsclite.so.1

Con eso y un poquitín más de tiempo ¡Lo conseguí! pude por fin solicitar mi certificado (y ya lo tengo de hecho)… Lo que no se es lo que hará la gente con windows.

Usar el mando remoto de la PS3 en XBMC

BDRemote
Como ya he comentado, recientemente le compré una Playstation 3 a mi hijo (y a mi, claro está) y aproveché para comprarme el mando BDRemote para poder manejar las (pocas) películas bluray que tengo en casa. Además de sufrir el atraco a mano armada de pagar sus 30 Euros por él (si, ya se que ahora están más baratos) descubrí que la mayoría de las operaciones que se hacen con el BDRemote se pueden hacer desde el mando sixaxis. Además, dio la fatal casualidad que a los pocos días de tener la PS3 mi mediacenter empezó a fallar (cosas del hardware), así que me decidí a montarme otro mediacenter cambiando placa y micro (y caja) y qué mejor que usar el completisimo mando a distancia de la PS3 para controlarlo.

Y alguno dirá ¿pero la PS3 no es ya un media center?… Si, pero no. Es decir, yo necesito ver las películas en alta definición con MKV y este formato no lo soporta la PS3, además, es tal el calor que desprende la bestia que cualquier media center que quiera montar será un congelador a su lado.

Antes de montar del todo el mediacenter (que irá con ubuntu + xbmc) he probado la configuración del mando en otro ordenador que tenía de prueba y ha funcionado. Aqui os explico como:
Sigue leyendo

XBMC ubuntu y extigy

xbmc

Una de mis aficiones en los ratos que tengo libres es montar media centers con los restos de ordenador que tengo por ahí, el que tengo en mi salón lo monté inicialmente con un ubuntu 7.10 y freevo, y ha terminado con un ubuntu 8.04 y con XBMC.

Para el que no lo sepa, XBMC (XBox Media Center) es un proyecto muy completo que se puede ejecutar tanto en linux, como en windows, como en mac (incluso en apple-tv) y que realmente está muy cerca de ser el media center perfecto (solo le falta manejar las controladoras de TV para serlo).

El caso es que he descubierto que hay cosillas un poco escondidas y que a lo mejor os pueden servir de ayuda para montar vuestro propio media center con algún cacharro que tengais por ahi tirado. En esta entrada os voy a proponer usar una «tarjeta» de sonido externa (Extigy) como sistema de audio y controlador del media center (usando su mando a distancia).

El proceso completo (luego lo iré detallando en próximos días) para tener un media center «pooofesioná» que dirían por allí sería lo siguiente:

    1. Hacerse con un PC que tenga disco y una vga que soporte la resolución de nuestra pantalla (y si esta tiene entrada DVI o VGA, mejor que mejor) y alguna forma de conectarse a la red (ethernet o wifi).
    2. Instalarle un ubuntu 9.04 (o 9.10 ahora cuando salga) sin ninguna opción especial
    3. Instalarle XBMC (aqui están las instrucciones).
    4. Pincharle la extigy (la reconoce a la primera el ubuntu)
    5. Instalar el Lirc:
sudo apt-get install lirc
    1. Configurarlo (te pregunta durante la instalación) para Sound Blaster Extigy/Audigy 2 NX (ALSA snd-usb-audio).
    2. Crear el archivo Lircmap.xml, si no existe ya, en ~/.xbmc/userdata con este contenido:
<lircmap>
	<remote device="RM-1500">
		<play>play-pause</play>
		<pause>step</pause>
		<stop>stop-eject</stop>
		<forward>next</forward>
		<reverse>prev</reverse>
		<left>left</left>
		<right>right</right>
		<up>up</up>
		<down>down</down>
		<select>ok</select>
		<back>return</back>
		<menu>options</menu>
		<title>cancel</title>
		<info>display</info>
		<start>start</start>
		<record>rec</record>
		<volumeplus>vol+</volumeplus>
		<volumeminus>vol-</volumeminus>
		<mute>mute</mute>
		<power>cmss</power>
		<one>1</one>
		<two>2</two>
		<three>3</three>
		<four>4</four>
		<five>5</five>
		<six>6</six>
		<seven>7</seven>
		<eight>8</eight>
		<nine>9</nine>
		<zero>0</zero>
	</remote>
</lircmap>
    1. Arrancar el xbmc y disfrutar

He ajustado las teclas para que sean lo más naturales posibles, si no os gusta la distribución solo teneis que toquetear un poco este archivo hasta que salga lo que necesitais.

Si vais a usar este ordenador en exclusiva para media center, os recomiendo que instaleis el paquete xbmc-standalone y sigais estas instrucciones para que el arranque sea sin pasar por una sesion gnome (lo que hace que sea mucho más rápido):

sudo apt-get install xbmc-standalone

Sistema => Administración => Ventana de entrada => (pedirá password) => Sesión por defecto => (escoger XBMC).

      No necesitais ni teclado ni ratón a partir de este momento… El ordenador arrancará y diréctamente nos llevará al programa media center que manejaremos con el mando a distancia de la extigy, y cuando terminemos la opción apagar de xbmc nos apagará la máquina.

Si sois muy pijos, también hay varios temas de arranque para xbmc (incluso hay un paquete en 9.04 xbmc-usplash) para que os quede como si no hubiese so por debajo.

Por que uso Ubuntu…

Al hilo de una discusión en facebook con un colega. sobre por qué uso Ubuntu y Java le escribí una respuesta en su misma página, pero por arte de facebook no se ha mostrado.

Dado que me pilla caliente, y todavía me acuerdo de lo que le iba a decir, lo escribo aqui, que siempre quedará grabado en un sistema que administro yo.

Le comenté que yo tenía instalado Ubuntu en mi eeePC 4G y que iba de maravilla (aqui mismito lo tengo ahora enchufado a un monitor a 1280×1024 y lo mueve bien) y él me replicó que «La era Windows sigue aquí y no se va a ir tan alegremente. Los antivirus seguirán siendo negocio. Ya se sabe. Por otro lado, me encanta que haya gente como tú que, comprometida con unos principios sea consecuente» .

Mi respuesta es que yo no lo hago por principios. Siempre me han molestado los radicalismos y más en el aspecto tecnológico (podeis ver mi artículo Stallman Apesta en este blog), mi razón para utilizar Ubuntu es simplemente práctica, me conviene mucho más para el trabajo y para las cosas que hago en el día a día.
Sigue leyendo