servidor de correo opensmtpd

42
SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org SERVIDOR DE CORREO CON OPENSMTPD Autor: Fernando Quintero Correo electrónico: [email protected] Fecha de creación : 03/10/09 Ultima modificación: 12/11/09 Índice de contenido 1.Licencia (BSD)..................................................................................................................................1 2.¿ Qúe es OpenSMTPD ?...................................................................................................................2 3.Configuración del servidor de correo................................................................................................2 3.1.Recibiendo correo para un dominio...........................................................................................2 a.Configuración básica del sistema operativo OpenBSD.......................................................3 b.Eliminando los rastros de sendmail.....................................................................................4 c.Habilitamos el servidor OpenSMTPD para recibir en MBOX............................................5 d.Habilitamos el servidor OpenSMTPD para recibir en formato MailDir.............................9 3.2.OpenSMTPD usando TLS......................................................................................................11 3.3.OpenSMTPD usando SSL......................................................................................................18 4.Descargando el correo por POP e IMAP.........................................................................................19 5.Habilitando un webmail seguro.......................................................................................................23 5.1.Servidor web seguro (https).....................................................................................................23 5.2.Instalando el servidor MySQL.................................................................................................26 5.3.Soporte PHP/MySQL para Apache.........................................................................................29 5.4.Instalando el webmail (roundcubemail)..................................................................................31 6.Conclusiones....................................................................................................................................40 7.Enlaces recomendados.....................................................................................................................42 1. Licencia (BSD) Copyright (c) 2009, Fernando Quintero (a.k.a nonroot), All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the OpenBSD Colombia nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR ________________________________________________________________________________ 1.Licencia (BSD) 1/42

Upload: tradersan

Post on 18-Dec-2014

50 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

SERVIDOR DE CORREO CON OPENSMTPD

Autor: Fernando QuinteroCorreo electrónico: [email protected]

Fecha de creación : 03/10/09 Ultima modificación: 12/11/09

Índice de contenido1.Licencia (BSD)..................................................................................................................................12.¿ Qúe es OpenSMTPD ?...................................................................................................................23.Configuración del servidor de correo................................................................................................2

3.1.Recibiendo correo para un dominio...........................................................................................2 a.Configuración básica del sistema operativo OpenBSD.......................................................3 b.Eliminando los rastros de sendmail.....................................................................................4 c.Habilitamos el servidor OpenSMTPD para recibir en MBOX............................................5 d.Habilitamos el servidor OpenSMTPD para recibir en formato MailDir.............................9

3.2.OpenSMTPD usando TLS......................................................................................................113.3.OpenSMTPD usando SSL......................................................................................................18

4.Descargando el correo por POP e IMAP.........................................................................................195.Habilitando un webmail seguro.......................................................................................................23

5.1.Servidor web seguro (https).....................................................................................................235.2.Instalando el servidor MySQL.................................................................................................265.3.Soporte PHP/MySQL para Apache.........................................................................................295.4.Instalando el webmail (roundcubemail)..................................................................................31

6.Conclusiones....................................................................................................................................407.Enlaces recomendados.....................................................................................................................42

1. Licencia (BSD)Copyright (c) 2009, Fernando Quintero (a.k.a nonroot),

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

• Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following

disclaimer in the documentation and/or other materials provided with the distribution. • Neither the name of the OpenBSD Colombia nor the names of its contributors may be used to endorse or promote products

derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOTLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FORA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR

________________________________________________________________________________ 1.Licencia (BSD) 1/42

Page 2: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, ORPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OFLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDINGNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THISSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

2. ¿ Qúe es OpenSMTPD ?OpenSMTPD es un MTA en proceso de desarrollo, que busca crear un servidor de correo orientado a la seguridad, con muchas funcionalidades y bastante fácil de configurar. Actualmente esta siendo desarrollado en gran parte por jacekm@ y gilles@, siendo este último el frontend del proyecto.

Cuando leí la noticia de un nuevo servidor de correo pensé lo que seguramente estas pensando, para que otro nuevo MTA si ya se tiene postfix, sendmail, qmail, exim, etc?. La respuesta la obtuve después de hacerle mucho seguimiento a la lista de soporte @misc y de algunas entrevistas a los desarrolladores. Y la conclusión a la que llego es que vale la pena el esfuerzo por crear algo nuevo al estilo BSD ;). Porque?, porque los otros MTA no tienen licencias adecuadas, por eso nunca han entrado en el sistema base de OpenBSD, postfix y qmail son ejemplos de estos, no permiten que el equipo OpenBSD realice sus cambios a voluntad, esto según la filosofía del proyecto, no es algo que se pueda aceptar.

Actualmente OpenBSD trae en su sistema base una modificación del demonio sendmail, el MTA mas antiguo y posiblemente el que tenga mas funcionalidades, pero también el mas complicado de configurar, ya que para usar los famosos milters, es necesario recompilar el software o crear macros m4 que no todo el mundo puede comprender...

En conclusión, se quiere crear un nuevo servidor de correo al estilo OpenBSD, Libre, Funcional y Seguro!, entonces le damos la bienvenida a OpenSMTPD !!!.

En este documento voy a mostrar como configurar de forma práctica un servidor de correo con OpenSMTPD que ya viene en el sistema base (no habilitado) en la actual release 4.6. Como siempre, cualquier duda o comentario lo pueden enviar a la lista de soporte de OpenBSD Colombia.

3. Configuración del servidor de correoVamos a comprobar lo sencillo que es configurar un servidor de correo con este nuevo software y vamos a documentar el proceso para que los usuarios de una LAN o desde Internet se puedan conectar al mismo.

3.1. Recibiendo correo para un dominioEl funcionamiento mas simple de un servidor de correo es que pueda recibir correo para un dominio especifico, vamos a mostrar la configuración para un dominio llamado ejemplo.com. Si quieres leer sobre como crear dominios virtuales, la única guía hasta el momento se encuentra aquí:

https://calomel.org/OpenSMTPD.html

Esta guía esta creada para la versión 4.5 entonces los primeros pasos no son necesarios, como lo dije antes, en la release 4.6 OpenSMTPD ya viene instalado en el sistema base.

________________________________________________________________________________ 3.Configuración del servidor de correo 2/42

Page 3: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Para nuestras configuraciones partiremos de un sistema base 4.6 recién instalado.

a. Configuración básica del sistema operativo OpenBSDLo primero es asegurarnos que el sistema este configurado de forma mínima, que tenga un nombre de host, un nombre de dominio, una dirección IP y que este registrado en un DNS local o externo.

Configuremos el nombre de la estación:

# uname -aOpenBSD correo.localdomain 4.6 GENERIC#58 i386# vi /etc/myname # cat /etc/myname correo.ejemplo.com# sh /etc/rc# hostnamecorreo.ejemplo.com

Configuremos la dirección IP de la interfaz, en mi caso se llama vic0:

# cat /etc/hostname.vic0 inet 192.168.0.200 255.255.255.0 192.168.0.255# sh /etc/netstart

Configuremos el gateway por defecto:

# cat /etc/mygate 192.168.0.100

Configuremos el servidor DNS de la red (en mi caso 192.168.0.3):

# vi /etc/resolv.conf # cat /etc/resolv.conf domain ejemplo.comsearch ejemplo.comnameserver 192.168.0.3

Verificamos que se resuelvan los hosts para el dns y el servidor de correo:

________________________________________________________________________________ 3.Configuración del servidor de correo 3/42

Page 4: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

# ping dns.ejemplo.comPING dns.ejemplo.com (192.168.0.3): 56 data bytes64 bytes from 192.168.0.3: icmp_seq=0 ttl=255 time=0.361 ms64 bytes from 192.168.0.3: icmp_seq=1 ttl=255 time=0.307 ms--- dns.ejemplo.com ping statistics ---2 packets transmitted, 2 packets received, 0.0% packet lossround-trip min/avg/max/std-dev = 0.307/0.334/0.361/0.027 ms

# ping correo.ejemplo.comPING correo.ejemplo.com (192.168.0.200): 56 data bytes64 bytes from 192.168.0.200: icmp_seq=0 ttl=255 time=0.128 ms64 bytes from 192.168.0.200: icmp_seq=1 ttl=255 time=0.114 ms--- correo.ejemplo.com ping statistics ---2 packets transmitted, 2 packets received, 0.0% packet lossround-trip min/avg/max/std-dev = 0.114/0.121/0.128/0.007 ms

Recuerden que el DNS debe tener un registro MX apuntando a nuestro servidor de correo (192.168.0.200):

@ IN MX 10 correo.ejemplo.com.correo.ejemplo.com. IN A 192.168.0.200

b. Eliminando los rastros de sendmailPara que pueda entrar en funcionamiento nuestro servidor de correos, debemos eliminar la configuración de sendmail que viene por defecto en el sistema:

“Matamos el demonio”:

# ps aux | grep -i sendmailroot 23640 0.0 0.7 1096 1452 ?? Ss 7:19AM 0:00.25 sendmail: accepting connections (sendmail)root 28380 0.0 0.4 332 744 p0 S+ 8:11AM 0:00.07 grep -i sendmail# pkill sendmail

Lo deshabilitamos del arranque:

________________________________________________________________________________ 3.Configuración del servidor de correo 4/42

Page 5: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

En el archivo /etc/rc.conf, reemplazamos la línea:

sendmail_flags="-L sm-mta -C/etc/mail/localhost.cf -bd -q30m"

por

sendmail_flags=NO

Evitamos los chequeos automáticos con el crontab:

Ejecutamos crontab -e y comentamos la línea:

#*/30 * * * * /usr/sbin/sendmail -L sm-msp-queue -Ac -q

Cambiamos la información de las utilidades:

# mv /etc/mailer.conf /etc/mailer.copia

y ponemos lo siguiente:

# cat /etc/mailer.conf sendmail /usr/sbin/smtpctlsend-mail /usr/sbin/smtpctlmailq /usr/sbin/smtpctlmakemap /usr/libexec/smtpd/makemapnewaliases /usr/libexec/smtpd/makemap

Para reconstruir los mapas usamos:

# makemap -t aliases -o /etc/mail/aliases.db /etc/mail/aliases # newaliases /etc/mail/aliases: 50 aliases

c. Habilitamos el servidor OpenSMTPD para recibir en MBOX

Antes de poder recibir y enviar correos, debemos tener usuarios válidos en el sistema, para el ejemplo vamos a crear dos usuarios: nando y astrid, usando el comando adduser.

Una vez creados los usuarios podemos hacer los cambios en el archivo de configuración del

________________________________________________________________________________ 3.Configuración del servidor de correo 5/42

Page 6: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

servidor de correo: /etc/mail/smtpd.conf.

# See smtpd.conf(5) for more information.

listen on vic0

map "aliases" { source db "/etc/mail/aliases.db" }

accept for local deliver to mboxaccept for domain "ejemplo.com" deliver to mboxaccept for all relay

Como pueden ver, lo único que he hecho es modificar la interfaz de red donde escuchará el servidor de correo (en mi caso vic0) y agregamos una regla para aceptar correos que vayan para “ejemplo.com”. La sintaxis de OpenSMTPD es muy simple.

Para hacer pruebas configuramos una cuenta en un software cliente de correo (MUA), en mi caso tengo thunderbird , un cliente de correo multiplataforma con bastantes funcionalidades.

Le configuramos una cuenta para el usuario nando y luego intentamos enviar un correo.

________________________________________________________________________________ 3.Configuración del servidor de correo 6/42

Page 7: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Fig 1. Configuración básica de una cuenta de correo usando thunderbird.

Si no quieres tener problemas mas adelante con los certificados digitales en el campo del servidor usa el nombre del servidor y no su IP, por ejemplo: correo.ejemplo.com.

El problema es que cuando intentamos enviar un correo obtenemos el siguiente mensaje:

Fig 2. Error al enviar el primer mensaje de prueba.

________________________________________________________________________________ 3.Configuración del servidor de correo 7/42

Page 8: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Esto ocurre porque en el servidor de correos (OpenSMTPD) no hemos permitido el envío de correos desde otro lugar diferente a la maquina local, para esto nuestro MTA incorpora filtros al estilo packet filter, la línea que debemos cambiar en la configuración es:

accept for domain "ejemplo.com" deliver to mbox

por

accept from "192.168.0.0/24" for domain "ejemplo.com" deliver to mbox

Esta línea traduce algo como:

Permita la recepción de correos provenientes desde la red 192.168.0.0/24 con destino al dominio ejemplo.com, cada uno de estos correos deben ser almacenado usando el formato MBOX.

Recuerden que MBOX es uno de los dos formatos de almacenamiento de correos mas populares, su diferencia con MailDir radica en que todos los correos pertenecientes a un mismo usuario se almacenan en un mismo archivo, lo que puede ocasionar bloqueos cuando las aplicaciones intentan entrar a su contenido, por esto en la actualidad se recomienda mejor usar el formato MailDir.

Si queremos permitir el envío de correos desde cualquier lugar, debemos cambiar el

from “192.168.0.0/24”

por

from all

Antes de enviar correos es importante recordar que el servidor de correo no esta funcionando, para habilitarlo de forma temporal ejecutamos en una consola del sistema el comando:

#smtpd -dv

Si queremos que el servicio funcione de forma permanente, podemos agregar smtpd_flags=””, en el archivo /etc/rc.conf.local, de esta forma cada vez que inicie el servidor OpenBSD tendremos OpenSMTPD habilitado.

Para verificar que los correos llegan, podemos usar el comando mail, con la cuenta del usuario receptor:

$ whoaminando$ pwd/home/nando

________________________________________________________________________________ 3.Configuración del servidor de correo 8/42

Page 9: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

$ mailMail version 8.1.2 01/15/2001. Type ? for help."/var/mail/nando": 2 messages 2 new [Read only]>N 1 [email protected] Sun Nov 8 09:06 15/536 aaa N 2 [email protected] Sun Nov 8 09:08 17/620 Correo de prueba&

O podemos verificarlo manualmente buscando el archivo MBOX almacenado en el sistema:

# cd /var/mail# pwd/var/mail# ls -latotal 28drwxr-xr-x 2 root wheel 512 Nov 8 09:10 .drwxr-xr-x 23 root wheel 512 Jul 1 18:54 ..-rw------- 1 astrid astrid 1638 Nov 8 09:07 astrid-rw-r--r-- 1 root wheel 1156 Nov 8 09:08 nando-rw------- 1 root wheel 4532 Nov 8 09:07 root# tail nandoUser-Agent: Thunderbird 2.0.0.23 (Macintosh/20090812)MIME-Version: 1.0To: [email protected]: Correo de pruebaContent-Type: text/plain; charset=ISO-8859-1; format=flowedContent-Transfer-Encoding: 7bit

Hola como estamos?#

d. Habilitamos el servidor OpenSMTPD para recibir en formato MailDir

Como ya dijimos en la actualidad se recomienda usar el formato MailDir, así que vamos a cambiar la configuración que tenemos para que soporte este formato, lo único que hacemos es modificar la

________________________________________________________________________________ 3.Configuración del servidor de correo 9/42

Page 10: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

regla delivery, escribiendo lo siguiente:

accept from “192.168.0.0/24” for domain "ejemplo.com" deliver to maildir "/home/%u/Maildir"

El archivo /etc/mail/smtpd.conf, queda así:

listen on vic0map "aliases" { source db "/etc/mail/aliases.db" }accept for local deliver to mboxaccept from “192.168.0.0/24” for domain "ejemplo.com" deliver to maildir "/home/%u/Maildir"

accept for all relay

El %u se reemplazará en tiempo real por el nombre del usuario que recibe el correo electrónico, también se puede usar el %d para determinar el dominio al que llegan los correos.

Para verificar que el correo ha llegado:

# pwd/home/nando# ls -la Maildir/ total 20drwx------ 5 nando nando 512 Nov 8 10:11 .drwxr-xr-x 4 nando nando 512 Nov 8 10:11 ..drwx------ 2 nando nando 512 Nov 8 10:11 curdrwx------ 2 nando nando 512 Nov 8 10:11 newdrwx------ 2 nando nando 512 Nov 8 10:11 tmp

# cat Maildir/new/1257693105.YXQw59jyRwUaefw2.3512425487 Received: from imac-de-fernando-quintero.local (<unknown> [192.168.0.4]) by correo.ejemplo.com (OpenSMTPD) with ESMTP id 1257693105.YXQw59jyRwUaefw2 for <[email protected]>; Sun, 8 Nov 2009 10:11:45 -0500 (COT)Message-ID: <[email protected]>…

________________________________________________________________________________ 3.Configuración del servidor de correo 10/42

Page 11: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Fig 3. OpenSMTPD en modo debug recibiendo correos.

3.2. OpenSMTPD usando TLSCuando se envían correos electrónicos sin usar medios seguros estamos propensos a que alguien pueda interceptarlos, por ejemplo. Si tenemos un sniffer capturando el tráfico en el momento en que se envía el correo anterior podemos capturar lo siguiente:

________________________________________________________________________________ 3.Configuración del servidor de correo 11/42

Page 12: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Fig 4. Captura de un correo no cifrado.

¿Qué podemos hacer entonces?, la solución es cifrar el canal, usando un protocolo que pueda asegurar nuestras comunicaciones. Actualmente tenemos SSL y TLS, en sus versiones 3.0 y 1.0, respectivamente. ¿Cuál es la diferencia de usar uno u otro?, básicamente trabaja de la misma forma solo que si usamos TLS la comunicación segura será opcional y la debe solicitar el cliente, si usamos SSL la comunicación siempre se hace cifrada, pero debemos usar un puerto alterno para comunicarnos. Por ejemplo para cifrar el tráfico de correo en el puerto 25, debemos usar otro puerto reservado para SMTPS, el 465.

________________________________________________________________________________ 3.Configuración del servidor de correo 12/42

Page 13: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Lo primero que debemos hacer es verificar que nuestro MTA soporta cifrado con certificados digitales, una vez comprobado esto (preguntandole al desarrollador, leyendo manuales, leyendo la lista @misc) podemos crear los certificados y ubicarlos en las rutas correctas.

Vamos a crear el certificado de nuestra CA, de esta forma todas las comunicaciones serán validadas por este certificado raíz:

#openssl req -days 3650 -nodes -new -x509 -keyout /etc/ssl/private/CA.key -out /etc/ssl/CA.crt

Con este comando generamos el certificado digital de la CA (CA.crt) y su llave privada (CA.key)

Fig 5. Creando una CA local, para validar certificados digitales.

Lo siguiente es crear el certificado para el servidor de correo, lo primero es generar una petición de certificado, que generalmente estará en formato PKCS#10 y tendrá la extensión .csr. El siguiente comando genera una llave privada para el servidor de correo (vic0.key) y el archivo de petición del certificado (que no el certificado digital).

#openssl req -days 3650 -nodes -new -x509 -keyout /etc/ssl/private/vic0.key -out /etc/ssl/vic0.csr

________________________________________________________________________________ 3.Configuración del servidor de correo 13/42

Page 14: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Fig 6. Creando la petición del certificado para el servidor de correo.

Observe que el certificado tiene como nombre el que se usa en la interfaz donde escucha el servidor de correo (vic0), esto es necesario para que OpenSMTPD pueda asociar el certificado digital en el momento de arranque.

Si queremos que el certificado del servidor tenga validez, necesitamos firmarlo con la llave privada de la CA, de esta forma cuando el MUA del usuario intente verificar un tercero confiable, este lo resolverá sin problemas. En este punto es importante recordar que los certificados se pueden obtener de diferentes formas y puedes pagar por un certificado de una entidad reconocida. Pero para efectos de prueba y solo con ánimos demostrativos vamos a trabajar con estos certificados autofirmados.

Fig 7. Generando el certificado digital para el servidor a través de la CA.

Debes verificar que salga “Signature ok”, de lo contrario el certificado quedará con problemas.

# openssl x509 -req -days 3650 -in /etc/ssl/vic0.csr -out /etc/ssl/private/vic0.crt /-CA /etc/ssl/CA.crt -CAkey /etc/ssl/private/CA.key -CAcreateserial Signature oksubject=/C=CO/ST=OpenBSD/L=Medellin/O=IT/OU=IT/CN=correo.ejemplo.com/[email protected] CA Private Key

________________________________________________________________________________ 3.Configuración del servidor de correo 14/42

Page 15: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Una vez tengamos el certificado del servidor de correo creado y firmado por nuestra CA, vamos a ubicar los archivos donde el OpenSMTPD los necesita.

# mkdir /etc/mail/certs# cp /etc/ssl/private/vic0.crt /etc/mail/certs/# cp /etc/ssl/private/vic0.key /etc/mail/certs/ # cp /etc/ssl/CA.crt /etc/mail/certs/CA.crt

El nombre del archivo para la CA debe ser: Cacert.pem, debido a que el servidor de correo lo buscará con este nombre, lo que hacemos entonces es renombrarlo:

# mv /etc/mail/certs/CA.crt /etc/mail/certs/CAcert.pem

¿Son iguales los certificados generados como .crt y los .pem?

Si no lo crees, puedes hacer la conversión usando los siguientes comandos:

# openssl x509 -in CA.crt -out CA.der -outform DER # openssl x509 -in CA.der -inform DER -out CAcert.pem -outform PEM

Fig 8. Puede ser que te encuentres con este problema.

Si haces algo incorrecto es posible que recibas un mensaje como este. Se recomienda repetir con cuidado el procedimiento de generación de los certificados digitales.

Del lado del servidor veremos algo así:

________________________________________________________________________________ 3.Configuración del servidor de correo 15/42

Page 16: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Fig 9. Error con un certificado incorrecto, repite el procedimiento.

Si por el contrario todo va bien, al tratar de enviar un correo obtendremos el siguiente mensaje:

Fig 10. Advertencia por no tener en la BD de thunderbird el certificado de la CA.

________________________________________________________________________________ 3.Configuración del servidor de correo 16/42

Page 17: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Si queremos aceptarlo de forma temporal, simplemente le damos aceptar. Si queremos que nuestro sitio sea confiable del todo, debemos pasar el certificado digital de la CA a todos los MUA que vayamos a usar. En thunderbird la ruta para agregar una CA es: Opciones → Avanzadas → Certificados → Ver certificados → Autoridades → Importar. El certificado que se importa es el CA.crt, o en nuestro caso el Cacert.pem.

Para hacer la prueba configuramos el MUA para que use TLS y opcionalmente autentique los usuarios y luego capturamos el tráfico:

Fig 11. Configuración de la cuenta para usar TLS.

Podemos hacer el ejercicio de capturar el tráfico usando por ejemplo el sniffer wireshark.

________________________________________________________________________________ 3.Configuración del servidor de correo 17/42

Page 18: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Fig 12. Captura de tráfico usando TLS para enviar correos.

3.3. OpenSMTPD usando SSL

Para darle soporte a SSL solo basta con cambiar una línea en el archivo de configuración, quedando de la siguiente forma:

# cat /etc/mail/smtpd.conf listen on vic0 smtps enable authmap "aliases" { source db "/etc/mail/aliases.db" }accept for local deliver to mboxaccept from "192.168.0.0/24" for domain "ejemplo.com" deliver to maildir "/home/%u/Maildir"

accept for all relay#

La diferencia esta en la línea: listen on vic0 smtps enable auth.

________________________________________________________________________________ 3.Configuración del servidor de correo 18/42

Page 19: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Se cambia la palabra tls por smtps.

Ahora el servidor se inicia de la forma tradicional y observamos que el puerto por el que escucha es el 465:

Fig 13. Inicio del servidor con soporte de SSL, se siguen usando los mismos certificados.

Obviamente tendremos que cambiar la configuración del MUA para que no use TLS sino SSL.

Si quieres tener uno o mas puertos escuchando al tiempo, puedes agregar una línea “listen” al archivo de configuración por cada puerto o interfaz donde quieras que el servidor OpenSMTPD escuche.

4. Descargando el correo por POP e IMAPCon el fin de que nuestros usuarios puedan recuperar el correo electrónico a sus estaciones o que puedan acceder y leerlos desde un MUA o un webmail, es necesario implementar el soporte para los protocolos POP3 e IMAP, estos dos protocolos son los mas conocidos para cumplir con esta tarea.

OpenBSD no trae por defecto estos servicios activados, es necesario instalar un paquete que los soporte, por ejemplo, el conocido software dovecot.

La forma mas sencilla es descargar el archivo index.txt de la ruta de paquetes, por ejemplo:

ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/index.txt

y luego buscar el nombre exacto del paquete a instalar.

Hay que recordar que es importante tener en cuenta la arquitectura en la que esta instalado el sistema operativo, por ejemplo, si el procesador tuviera una arquitectura amd64 la ruta sería:

ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/amd64/index.txt

________________________________________________________________________________ 4.Descargando el correo por POP e IMAP 19/42

Page 20: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Si navegamos a este sitio, podemos encontrar que el paquete dovecot se llama: dovecot-1.1.16.tgz.

Y para instalarlo nos olvidamos de compilar código y usamos los paquetes ya listos del repositorio de OpenBSD, simplemente ejecutamos:

#pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/dovecot-1.1.16.tgz

Fig 14. Instalación del paquete dovecot en OpenBSD, usando los binarios.

Si queremos que dovecot arranque automáticamente, agregamos lo siguiente al archivo /etc/rc.local

if [ -x /usr/local/sbin/dovecot ]; then echo -n ' dovecot'; /usr/local/sbin/dovecotfi

También nos recomiendan ejecutar el script: /usr/local/sbin/dovecot-mkcert.sh.Esto para generar el certificado autofirmado del dovecot, pero como ya tenemos una CA creada, vamos a generar un nuevo certificado para dovecot y lo vamos a firmar con nuestra CA.

Siguiendo los pasos entonces:

1. Generamos la petición del certificado:

# openssl req -days 3650 -nodes -new -keyout /etc/ssl/private/dovecot.key -out /etc/ssl/private/dovecot.csr Generating a 1024 bit RSA private key..............................................++++++............++++++

________________________________________________________________________________ 4.Descargando el correo por POP e IMAP 20/42

Page 21: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

writing new private key to '/etc/ssl/private/dovecot.key'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) []:COState or Province Name (full name) []:OpenBSDLocality Name (eg, city) []:MedellinOrganization Name (eg, company) []:OpenBSD ColombiaOrganizational Unit Name (eg, section) []:ITCommon Name (eg, fully qualified host name) []:correo.ejemplo.comEmail Address []:[email protected]

Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:An optional company name []:#

2. Lo firmamos con la CA

# openssl x509 -req -days 3650 -in /etc/ssl/private/dovecot.csr -out /etc/ssl/dovecot.crt -CA /etc/ssl/CA.crt -CAkey /etc/ssl/private/CA.key -CAcreateserialSignature oksubject=/C=CO/ST=OpenBSD/L=Medellin/O=OpenBSD Colombia/OU=IT/CN=correo.ejemplo.com/[email protected] CA Private Key#

________________________________________________________________________________ 4.Descargando el correo por POP e IMAP 21/42

Page 22: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

3. Ubicamos los certificados en las rutas recomendadas por el paquete dovecot para OpenBSD:

# cp /etc/ssl/private/dovecot.key /etc/ssl/private/dovecot.pem # cp /etc/ssl/dovecot.crt /etc/ssl/dovecotcert.pem

4. Para ejecutarlo simplemente corremos el comando dovecot.

#dovecot

El paquete dovecot viene listo para funcionar por los puertos 143 (IMAP) y 993 (IMAPS), para probarlo solo basta con crear una nueva cuenta en nuestro MUA y decirle que vamos a usar IMAP.

Recuerde que la configuración del dovecot por defecto deshabilita la autenticación en texto plano en el archivo /etc/dovecot.conf con la opción:

disable_plaintext_auth = yes

y se pueden habilitar los protocolos a usar en la variable:

protocols = imap imaps pop3 pops

Veamos como se visualiza una conexión con TLS al puerto IMAP:

Fig 15. Tráfico capturado en una sesión IMAP/TLS.

________________________________________________________________________________ 4.Descargando el correo por POP e IMAP 22/42

Page 23: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

5. Habilitando un webmail seguroPara el ejercicio vamos a trabajar con roundcubemail, un webmail seguro que esta disponible en los paquetes de OpenBSD. Antes de habilitar un webmail seguro vamos a crear un certificado digital para el servidor web de modo que todas las conexiones que hagan nuestros usuarios sean seguras.

5.1. Servidor web seguro (https)

Para habilitar un servidor web seguro solo basta con crear un nuevo certificado para el servidor web con los datos personales del servidor, lo siguiente es un ejemplo.

Primero se crea la petición de certificado:

# openssl req -days 3650 -nodes -new -keyout /etc/ssl/private/web.key -out /etc/ssl/private/web.csr Generating a 1024 bit RSA private key.++++++........++++++writing new private key to '/etc/ssl/private/web.key'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) []:COState or Province Name (full name) []:OpenBSDLocality Name (eg, city) []:MedellinOrganization Name (eg, company) []:OpenBSD ColombiaOrganizational Unit Name (eg, section) []:ITCommon Name (eg, fully qualified host name) []:webmail.ejemplo.comEmail Address []:[email protected] enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:

________________________________________________________________________________ 5.Habilitando un webmail seguro 23/42

Page 24: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Y luego se firma con la nuestra CA:

# openssl x509 -req -days 3650 -in /etc/ssl/private/web.csr -out /etc/ssl/web.crt -CA /etc/ssl/CA.crt -CAkey /etc/ssl/private/CA.key -CAcreateserial Signature oksubject=/C=CO/ST=OpenBSD/L=Medellin/O=OpenBSD Colombia/OU=IT/CN=webmail.ejemplo.com/[email protected] CA Private Key#

Con esto obtenemos un certificado (web.crt) firmado por nuestra CA.

Ahora configuramos el servidor apache: /var/www/conf/httpd.conf

________________________________________________________________________________ 5.Habilitando un webmail seguro 24/42

Page 25: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Fig 16. Configuración del apache para soportar SSL

Por último en el archivo /etc/rc.conf, cambiamos :

httpd_flags=NO

por

httpd_flags="-DSSL"

Con esto el demonio web se inicia automáticamente después de cada reinicio en modo seguro.

________________________________________________________________________________ 5.Habilitando un webmail seguro 25/42

Page 26: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Para recargar la configuración:

#sh /etc/rc

Para comprobar que funciona el nuevo certificado, visitamos el sitio usando el FQDN usado en el certificado:

Fig 17. Probando el servidor web con SSL

5.2. Instalando el servidor MySQLExiste un paquete en OpenBSD para poner a punto un servidor MySQL, hacemos lo siguiente:

#pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/mysql-server-5.0.83.tgz

# pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/mysql-server-5.0.83.tgz parsing ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/mysql-server-5.0.83.tgzDependencies for mysql-server-5.0.83 resolve to: mysql-client-5.0.83, p5-DBD-mysql-4.010 (todo: mysql-client-5.0.83,p5-DBD-mysql-4.010)mysql-server-5.0.83:parsing mysql-client-5.0.83found libspec c.51.0 in /usr/libfound libspec crypto.18.0 in /usr/libfound libspec m.5.0 in /usr/libfound libspec ncurses.10.0 in /usr/libfound libspec pthread.11.1 in /usr/libfound libspec readline.3.0 in /usr/libfound libspec ssl.15.0 in /usr/libfound libspec z.4.1 in /usr/lib

________________________________________________________________________________ 5.Habilitando un webmail seguro 26/42

Page 27: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

…found libspec z.4.1 in /usr/libadding group _mysqladding user _mysqlinstalled /etc/my.cnf from /usr/local/share/mysql/my-medium.cnf******************************************************************************************************* | 96%mysql-server-5.0.83: complete --- mysql-server-5.0.83 -------------------You can find detailed instructions on how to install a database

in /usr/local/share/doc/mysql/README.OpenBSD.

Con eso quedara instalado el servidor MySQL.

Una vez instalado, debemos inicializar la base de datos con este comando:

#/usr/local/bin/mysql_install_db

Luego debemos cambiar la contraseña de acceso a mysql, para eso ejecutamos el demonio de forma temporal y usamos el comando administrativo para cambiar la clave:

# mysqld_safe &# /usr/local/bin/mysqladmin -u root password 'passwordfuerte'

La clave del usuario root será: passwordfuerte.

Por ultimo debemos correr el script que asegura nuestro entorno MySQL:

/usr/local/bin/mysql_secure_installation

Este preguntará algunas cosas, puedes responder SI/YES para los elementos que quieras asegurar.

Si queremos que mysql se inicie cada vez que se reinicie el sistema debemos agregar lo siguiente al script de arranque /etc/rc.local

________________________________________________________________________________ 5.Habilitando un webmail seguro 27/42

Page 28: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

if [ X"${mysql}" == X"YES" -a -x /usr/local/bin/mysqld_safe ]; then echo -n " mysqld " /usr/local/bin/mysqld_safe --user=_mysql & sleep 5 ln -f /var/run/mysql/mysql.sock /var/www/var/run/mysql/mysql.sock fi

En este momento el archivo /etc/rc.local se debe ver así:

Fig 18. Archivo /etc/rc.local hasta el momento.

________________________________________________________________________________ 5.Habilitando un webmail seguro 28/42

Page 29: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

y en el archivo /etc/rc.conf.local debemos agregar lo siguiente:

# cat /etc/rc.conf.local mysql=YES#

*OJO*: Para lograr tener mysql enjaulado, debemos crear el siguiente directorio:

#pwd/var/www/# mkdir -p var/run/mysql/#

Después podemos recargar usado el comando:

#sh /etc/rc

5.3. Soporte PHP/MySQL para ApacheEl truco consiste en instalar el paquete php5-mysql, el cual corresponde al modulo o extensión de mysql para php, sin embargo durante la comprobación de las dependencias, OpenBSD descargará todos los paquetes necesarios (php5 core, mysql-client, etc).

Instalamos el paquete:

# pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/php5-mysql-5.2.10.tgz

# pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/php5-mysql-5.2.10.tgz parsing ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/php5-mysql-5.2.10.tgzDependencies for php5-mysql-5.2.10 resolve to: mysql-client-5.0.83, php5-core-5.2.10 (todo: php5-core-5.2.10)php5-mysql-5.2.10:parsing php5-core-5.2.10Dependencies for php5-core-5.2.10 resolve to: libxml-2.6.32p2, libiconv-1.13, gettext-0.17p0 (todo: gettext-0.17p0,libxml-2.6.32p2)php5-mysql-5.2.10:parsing gettext-0.17p0Dependencies for gettext-0.17p0 resolve to: libiconv-1.13found libspec c.51.0 in /usr/lib

________________________________________________________________________________ 5.Habilitando un webmail seguro 29/42

Page 30: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

found libspec expat.9.0 in /usr/libfound libspec iconv.6.0 in package libiconv-1.13found libspec m.5.0 in /usr/libfound libspec ncurses.10.0 in /usr/libphp5-mysql-5.2.10:gettext-0.17p0|********************************…php5-mysql-5.2.10: complete --- php5-core-5.2.10 -------------------To enable the php5 module please create a symboliclink from /var/www/conf/modules.sample/php5.confto /var/www/conf/modules/php5.conf.

ln -s /var/www/conf/modules.sample/php5.conf \ /var/www/conf/modules

The recommended php configuration has been installedto /var/www/conf/php.ini. Don't forget that the default OpenBSD httpd is chrootedinto /var/www by default, so you may need to create supportdirectories such as /var/www/tmp for PHP to work correctly.--- php5-mysql-5.2.10 -------------------You can enable this module by creating a symboliclink from /var/www/conf/php5.sample/mysql.ini to/var/www/conf/php5/mysql.ini.

ln -fs /var/www/conf/php5.sample/mysql.ini \ /var/www/conf/php5/mysql.ini

Al terminar de instalar nos recomiendan ejecutar un procedimiento:

1. ln -s /var/www/conf/modules.sample/php5.conf /var/www/conf/modules

2. mkdir /var/www/tmp

________________________________________________________________________________ 5.Habilitando un webmail seguro 30/42

Page 31: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

3. ln -fs /var/www/conf/php5.sample/mysql.ini /var/www/conf/php5/mysql.ini

La forma mas fácil de probar el soporte php instalado es creando un script de prueba:

# pwd/var/www/htdocs# cat test.php <?phpphpinfo();?>#

Debemos obtener algo así:

Fig 19. Script de prueba para comprobar el soporte de PHP en apache.

5.4. Instalando el webmail (roundcubemail)

OpenBSD tiene un paquete llamado roundcubemail-0.2.2.tgz que puede ser instalado de la misma forma que los paquetes anteriores:

# pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/roundcubemail-0.2.2.tgz

________________________________________________________________________________ 5.Habilitando un webmail seguro 31/42

Page 32: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

# pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/roundcubemail-0.2.2.tgzparsing ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/roundcubemail-0.2.2.tgzDependencies for roundcubemail-0.2.2 resolve to: php5-mbstring-5.2.10, php5-core-5.2.10 (todo: php5-mbstring-5.2.10)roundcubemail-0.2.2:parsing php5-mbstring-5.2.10Dependencies for php5-mbstring-5.2.10 resolve to: php5-core-5.2.10found libspec m.5.0 in /usr/libfound libspec stdc++.47.0 in /usr/libroundcubemail-0.2.2:php5-mbstring-5.2.10: complete installed /var/www/roundcubemail/config/db.inc.php from /var/www/roundcubemail/config/db.inc.php.dist | 1%installed /var/www/roundcubemail/config/main.inc.php from /var/www/roundcubemail/config/main.inc.php.distinstalled /var/www/roundcubemail/config/mimetypes.php from /var/www/roundcubemail/config/mimetypes.php.dist | 2%roundcubemail-0.2.2: complete --- php5-mbstring-5.2.10 -------------------You can enable this module by creating a symboliclink from /var/www/conf/php5.sample/mbstring.ini to/var/www/conf/php5/mbstring.ini.ln -fs /var/www/conf/php5.sample/mbstring.ini \ /var/www/conf/php5/mbstring.ini--- roundcubemail-0.2.2 -------------------RoundCube webmail has been installed into /var/www/roundcubemailProceed to complete the installation or upgrade by reading:/var/www/roundcubemail/INSTALL/var/www/roundcubemail/UPGRADINGA database is required to use this package; PostgreSQL, MySQL andSQLite are supported. If you have no requirements for either of thefull-scale RDBMS, you might like to install the php5-sqlite package.#

________________________________________________________________________________ 5.Habilitando un webmail seguro 32/42

Page 33: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Al igual que con los paquetes anteriores, se recomiendan crear unos enlaces y hacer unas configuraciones:

1. ln -fs /var/www/conf/php5.sample/mbstring.ini /var/www/conf/php5/mbstring.ini

2. Leer el archivo INSTALL

Los pasos de la instalación de roundcube son:

============

INSTALLATION

============

1. Decompress and put this folder somewhere inside your document root

2. Make sure that the following directories (and the files within)

are writable by the webserver

– /temp

– /logs

3. Create a new database and a database user for RoundCube (see DATABASE SETUP)

4. Point your browser to http://url-to-roundcube/installer/

5. Follow the instructions of the install script (or see MANUAL CONFINGURATION)

6. After creating and testing the configuration, remove the installer directory

7. Done!

Hagamoslo!

1. El software ya se encuentra descomprimido en: /var/www/roundcubemail/Podemos dejarlo ahí y luego cambiar la ruta del host virtual https en el archivo /var/www/conf/httpd.conf, específicamente la línea donde esta:

...<VirtualHost _default_:443># General setup for the virtual hostDocumentRoot /var/www/roundcubemail/...

________________________________________________________________________________ 5.Habilitando un webmail seguro 33/42

Page 34: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

2. Lo mejor es darle permisos a todo el software roundcube y ponerle permisos de escritura a los dos directorios que se mencionan:

# pwd/var/www/roundcubemail# chown -R www.www roundcubemail/ # cd roundcubemail/ # chmod -R 755 temp/ # chmod -R 755 logs

3. Debemos crear una base de datos para roundcube e inicializarla con el contenido que trae el software:

# mysqladmin -u root -p create roundcube Enter password: # mysql -u root -pEnter password: Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 5Server version: 5.0.83-log OpenBSD port: mysql-server-5.0.83

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> GRANT ALL PRIVILEGES ON roundcube.* TO webmail@localhost IDENTIFIED BY 'webmailpassword';Query OK, 0 rows affected (0.03 sec)

mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)

mysql> quitBye#

________________________________________________________________________________ 5.Habilitando un webmail seguro 34/42

Page 35: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Con esto se creará una base de datos llamada roundcube, un usuario llamado webmail que tiene permisos completos sobre la misma y usa como contraseña: 'webmailpassword' para este usuario.

No sobra advertir que en la configuración real se sugiere usar contraseñas realmente robustas.

Por ultimo creamos la estructura de la base de datos con la plantilla que trae el roundcube:

# mysql -u root -p roundcube < SQL/mysql.initial.sql Enter password: #

En este punto estaremos listos para entrar al instalador web del roundcube:

La primera vez que arranco el instalador recibo el siguiente error:

Fig 20. Error al intentar usar el instalador web por primera vez.

Lo primero es que en el archivo de configuración (/var/www/roundcubemail/config/main.inc.php) debemos habilitar la posibilidad de usar el instalador web, por defecto la variable esta en la línea 321 y hay que ponerla en un estado true.

$rcmail_config['enable_installer'] = true;

Con esto podemos arrancar el instalador web.

Hay un error con respecto al directorio temporal (tmp) debido a que mysql y php requieren un directorio /tmp, pero dentro del chroot, entonces hacemos lo siguiente:

________________________________________________________________________________ 5.Habilitando un webmail seguro 35/42

Page 36: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

# pwd/var/www# chown www.www tmp# chmod 755 tmp

Luego recargamos nuevamente (F5) el instalador web y encontramos lo siguiente:

Fig 21. Aún persisten unos errores en las dependencias de roundcube.

Aquí podemos ver que algunas cosas están bien, pero que aun falta configurar, nos pide que configuremos el acceso a la base de datos desde el archivo de configuración.

________________________________________________________________________________ 5.Habilitando un webmail seguro 36/42

Page 37: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

En el archivo /var/www/roundcubemail/config/db.inc.php, línea 21, modificamos la conexión a la base de datos mysql.

$rcmail_config['db_dsnw'] = 'mysql://webmail:webmailpassword@localhost/roundcube';

Luego de volver a recargar seguimos obteniendo el mismo error, cual es el problema?

Intentamos instalar el paquete Pear-MDB2-Mysql:

# pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/pear-MDB2-mysql-1.4.1p1.tgz

# pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/pear-MDB2-mysql-1.4.1p1.tgzparsing ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/pear-MDB2-mysql-1.4.1p1.tgzDependencies for pear-MDB2-mysql-1.4.1p1 resolve to: php5-mysql-5.2.10, pear-1.7.2, pear-MDB2-2.4.1 (todo: pear-MDB2-2.4.1,pear-1.7.2)pear-MDB2-mysql-1.4.1p1:parsing pear-MDB2-2.4.1Dependencies for pear-MDB2-2.4.1 resolve to: pear-1.7.2 (todo: pear-1.7.2)pear-MDB2-mysql-1.4.1p1:parsing pear-1.7.2Dependencies for pear-1.7.2 resolve to: pear-utils-1.7.2, php5-core-5.2.10 (todo: pear-utils-1.7.2)pear-MDB2-mysql-1.4.1p1:parsing pear-utils-1.7.2pear-MDB2-mysql-1.4.1p1:pear-utils-1.7.2: complete pear-MDB2-mysql-1.4.1p1:pear-1.7.2: complete pear-MDB2-mysql-1.4.1p1:pear-MDB2-2.4.1: complete

pear-MDB2-mysql-1.4.1p1: complete

Muchas veces nos ocurren estos errores cuando trabajamos con OpenBSD y apache en modo chroot, debemos asegurarnos que exista el directorio: /var/www/var/run/mysql, de lo contrario el socket de mysql no podrá ser creado y la aplicación no se podrá conectar a la base de datos. Es importante recordar que para el modo chroot del apache la RAIZ es /var/www, por eso se crea a partir de allí la estructura de directorios. Este directorio lo habíamos creado cuando instalamos MySQL, pero es posible que a alguien se le pase y le cause dolores de cabeza, por eso la insistencia sobre la creación del mismo.

________________________________________________________________________________ 5.Habilitando un webmail seguro 37/42

Page 38: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Fig 22. Pruebas ejecutadas desde roundcube, al servidor SMTP y al servidor IMAP.

Después de hacer los tests correspondientes, editamos el archivo main.inc.php para terminar de organizar algunos detalles de la configuración:

Veamos algunas variables importantes para que nuestro webmail funcione, las otras variables las puedes explorar después de que el sistema funcione.

$rcmail_config['default_host'] = 'tls://192.168.0.200';

Esta variable le dice que nos conectaremos a un host(192.168.0.200) IMAP usando TLS:

$rcmail_config['IMAP_auth_type'] = plain;

Usar autenticación tipo PLAIN, pero dentro del canal seguro con TLS, entonces no hay peligro

$rcmail_config['smtp_server'] = '192.168.0.200';

Se define el servidor de correo, nuestro OpenSMTPD.

$rcmail_config['smtp_port'] = 25;

Puerto donde funciona nuestro MTA.

$rcmail_config['smtp_auth_type'] = 'LOGIN';

Tipo de autenticación en SMTP, recuerden que lo importante es asegurar el canal antes de autenticar usuarios para el envío de correo.

________________________________________________________________________________ 5.Habilitando un webmail seguro 38/42

Page 39: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

$rcmail_config['product_name'] = 'servidor de correo';

Titulo del webmail, este se verá en la barra del navegador con el que visites la aplicación.

Una vez terminados estos cambios, podemos ingresar al webmail.

Al entrar al sitio definido vamos a ver el siguiente mensaje de advertencia que nos indica que debemos eliminar el directorio installer (el que usamos para la instalación), ya que representa un problema de seguridad.

Fig 23. Advertencia sobre la existencia del directorio installer.

# pwd/var/www/roundcubemail# rm -rf installer/ #

Una vez borrado el directorio podemos hacer uso del webmail, ingresa el usuario y clave válidos y este se validara ante el servidor IMAP usando TLS. Una vez adentro te tomará poco tiempo aprender a trabajar con rondcube.

________________________________________________________________________________ 5.Habilitando un webmail seguro 39/42

Page 40: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

Fig 23. RoundCube en acción.

6. Conclusiones

El objetivo del documento era hablar un poco de OpenSMTPD y como han visto me he desviado un poco del tema, pero creo que el ejercicio vale la pena porque se muestra como configurar un servidor de correo seguro con acceso web para usuarios con las herramientas mas comunes en el mundo del software libre.

Es importante recalcar que OpenSMTPD es un software en construcción, aún no tiene todas las características deseadas, cosas como una autenticación diferente a PLAIN o LOGIN en el SMTP aún no están creadas, pero de igual forma, configurando el servicio de una forma adecuada, es posible que no las necesitemos.

________________________________________________________________________________ 6.Conclusiones 40/42

Page 41: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

OpenSMTPD no obliga a establecer una sesión TLS en el momento que un cliente intenta enviar un correo, otros MTA si lo hacen, por ejemplo postfix, tiene una variable que obliga a que una sesión SMTP se vuelva TLS, desafortunadamente esto aún no existe en este nuevo demonio. Esto lo debes de tener en cuenta porque si del lado del cliente no se le configura el uso del canal cifrado, los correos viajarán a través de OpenSMTPD en texto plano, aunque hayamos configurado el protocolo TLS. ¿Cuál es la solución?, mi recomendación es hacer el montaje usando SSL en el puerto 465, de esta forma el cliente se verá obligado a establecer una sesión cifrada.

Roundcube usa las librerías de php internas para establecer la comunicación con el servidor SMTP, desafortunadamente aún no tiene código (o no lo encontré después de mucho buscarlo) que permita establecer una sesión TLS son el servidor SMTP, esto es un problema, ya que todos los correos enviados desde el webmail serán enviados en texto plano, aunque el servidor soporte TLS. ¿Solución?. Afortunadamente roundcube SI soporta una comunicación por SSL, entonces podemos hacer que nuestro servidor de correo soporte SSL y de esa forma garantizar el cifrado en todos los correos que se envían desde el webmail.

Si bien el ejercicio muestra como usar protocolos seguros (SSL, TLS), es importante tener en cuenta que al tener todo el montaje en un mismo servidor (smtpd, webmail, imapd, pop3d, etc), es posible que el uso de cifrado ocasione una perdida en el rendimiento del servidor, si pensamos mejor la situación encontramos que si todos los servicios están en la misma estación física, el uso de canales cifrados es algo que se puede obviar, pues si alguien quiere capturar el tráfico debe ingresar hasta el equipo servidor que tiene instaladas las aplicaciones y esto nos estaría indicando que el servidor fue comprometido. Sin embargo el acceso por web SI debe estar protegido con SSL, pues un usuario remoto puede conectarse desde cualquier lugar usando una red pública vulnerable.

La sintaxis usada en el archivo de configuración de OpenSMTPD promete mucho, como pudieron leer, en menos de 5 líneas tenemos un servidor completamente funcional con reglas de filtrado al estilo packet filter. BIEN POR ESA!.

Por último recordarles que estamos montando un servicio de red bastante demandado (el servicio de correo), por eso el documento apunta a un ejemplo completo sobre como montar una plataforma de correo segura desde cero, el software usado es software que se encuentra en el sistema base de OpenBSD y de forma adicional paquetes creados y en algunas ocasiones auditados por los colaboradores del proyecto, esto es un valor añadido, detalles como usar una configuración mínima para los servicios de red, tener un servidor web enjaulado, tener por omisión solo los puertos necesarios abiertos, etc, le dan un + a nuestras soluciones. Gracias al equipo OpenBSD por trabajar en esto para nosotros.

Es posible que en una segunda entrega acerca de servidores de correo, configure este demonio junto con los sistemas antispam y antivirus disponibles, desafortunadamente, no tengo todo el tiempo que quisiera para escribir documentación, alguien se anima?

________________________________________________________________________________ 6.Conclusiones 41/42

Page 42: Servidor de Correo Opensmtpd

SERVIDOR DE CORREO CON OPENSMTPD - Fernando Quintero, OpenBSDColombia.org

7. Enlaces recomendados

Guía de como configurar OpenSMTPD en OpenBSD 4.5, tiene ejemplos buenos de como crear dominios virtuales y como conectarse con los servidores de correo de google.

https://calomel.org/OpenSMTPD.html

Página del manual de OpenSMTPD (requerida).

http://www.openbsd.org/cgi-bin/man.cgi?query=smtpd&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html

Página del manual de smtpd.conf (el archivo de configuración).

http://www.openbsd.org/cgi-bin/man.cgi?query=smtpd.conf&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html

Página del manual de starttls (te ayuda a entender un poco mas).

http://www.openbsd.org/cgi-bin/man.cgi?query=starttls&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html

Lista de distribución y documentos de OpenBSD Colombia (el repositorio de la comunidad).

http://groups.google.com/group/OpenBSD-Colombia?hl=es&pli=1

Portal oficial de OpenBSD Colombia (Bienvenidos!)

http://www.openbsdcolombia.org/

! LARGA VIDA A OPENBSD !

________________________________________________________________________________ 7.Enlaces recomendados 42/42