next_inactive up previous


Postfix+Cyrus Imap+Sasl+tls

Mario Teijeiro Otero

Resumen:

En el momento en que hay la necesidad de leer el correo desde más de un ordenador, se hace necesario dejar el modelo POP3, en el cual el correo es descargado para su consulta, y pasar a un modelo en el cual todo el correo se organiza en el servidor, pudiendo gozar de todas las posibilidades del POP3 (organización del correo en carpetas, marcado de mensajes como leidos,...) y como añadido, se hace especialmente interesante para líneas lentas, ya que sólo hay que descargarse los mensajes a medida que se leen.

En este artículo se utilizará un sistema debian sarge.

Introducción

Al final del artículo conseguiremos tener un sistema de correo con un servidor de correo cyrus-imap y postfix con las siguientes características:

Autentificación de usuarios

Para la autentificación de usuarios se va a utilizar cyrus-sasl que es la implementación del equipo de cyrus del RFC2222. Es necesario instalar los paquetes adecuados:

libsasl2
Librería de que realiza la abastracción a los módulos de autentificación.
libsasl2-modules
Módulos de autentificación, a través de ellos se puede autentificar contra MySQL, por OTP (One Time Password) RFC1938, sasldb...
sasl2-bin
Demonio de autentificación y utilidades para el manejo de la base de datos de usuario sasldb.

Parada del demonio saslautd

Se va a utiliar únicamente el módulo sasldb, y, para utilizar éste, no es necesario ejecutar el demonio de autentificación:

	cernicalo:~# update-rc.modules -f saslauthd remove

o bien, en el fichero /etc/default/saslauthd:

Figura 1: /etc/default/saslauthd
\begin{figure}\begin{verbatim}...


Creación base de datos de usuarios

La base de datos residirá en el fichero /etc/sasldb2 y tendrá los permisos:

cernicalo:~# ls -l /etc/sasldb2
-rw-r-----    2 root     sasl        12288 Nov  7 21:02 /etc/sasldb2

Por lo que todos los usuarios que quieran acceder a ella, y que no sea a través del demonio saslauthd, deben pertenecer al grupo sasl.

Para añadir/eliminar los usuarios a la base de datos se utilizará el programa saslpasswd2:

cernicalo:~# saslpasswd2 -f /etc/sasldb2 -c usuario
Password:
Again (for verification):
cernicalo:/tmp# sasldblistusers2 /etc/sasldb2
usuario@cernicalo: userPassword
prueba@cernicalo: userPassword
cernicalo:~# saslpasswd2 -f /etc/sasldb2 -d prueba
cernicalo:/tmp# sasldblistusers2 /etc/sasldb2
usuario@cernicalo: userPassword

Para que la librería libsasl2 utilice el módulo de autentificación sasldb se ha de configurar cada programa que use esta librería las opciones pwchek_method=auxprop y auxprop_plugin=salsdb.

Instalación del cyrus-imapd

Éste es el programa que va a dar servicio imap, imaps, sieve ... Los paquetes necesarios instalar son:

cyrus21-common
Ficheros comunes a todos los paquetes de cyrus.
cyrus21-imapd
Servidor de correo IMAP.
cyrus21-admin
Herramientas para la administración de los buzones.
libcyrus-imap-perl21
Interfaz a la librería cliente de cyrus-imap, necesaria por cyrus21-admin.

Al instalar estos programas se crea una jerarquía de directorios en /var/spool/cyrus/mail para almacenar los buzones de correo. Todos estos ficheros tienen como propietario a cyrus y grupo mail.

Sólo hay dos ficheros de configuración:

/etc/cyrus.conf
En dónde se configura qué servicios se va a arrancar al levantar el sistema cyrus.
/etc/imapd.conf
Configuración específica para el servicio imap de cyrus.

El fichero de configuración cyrus.conf

Consta de tres partes bien diferenciadas: programas que ejecuta al arrancar el sistema cyrus, los servicios que levanta, y programas a ejecutar ante la llegada de eventos de tiempo.

Dentro de los servicios se ha de tener activados (descomentado):

imap, imaps
Para dar servicio de imap (puerto 143) e imap seguro (993). Al menos uno debería estar activado.
lmtp, lmtpunix
Mediante estos protocolos se le alimenta los mensajes para que cyrus los reparta entre sus usuarios. En caso de usar el programa cyrdeliver no es necesario tenerlos activados. El primero utiliza socket TCP/IP y el segundo sockets unix. Si la fuente de mensajes (postfix) está en la misma máquina se recomienda usar lmtpunix, en caso contrario es necesario usar lmtp. Debe activarse el que se vaya a utilizar.
sieve
Para permitir la actualización de los scripts de filtrado para los usuarios. En debian viene restringido para que sólo se puedan actualizar desde localhost. Para permitir la actualización se ha de modificar el parámetro listen="localhost:sieve" a listen="sieve".

El fichero de configuración imapd.conf

altnamespace: yes
A yes si se quiere que las subcarpetas del buzón de usuario no aparezcan al mismo nivel que INBOX.
unixhierarchysep: no
Separador de subcarpetas es el `.', no `/'.
admins: cyrus
Usuario que va a ser el administrador de los mailboxes. Este usuario se va a autentificar mediante el método sasl, por lo que debe añadirse a la base de datos mediante el programa saslpasswd2, ver 2.2.
allowanonymouslogin: no
En principio no se va a permitir usuarios anónimos. Ésto es útil si se crean mailboxes públicos.
autocreatequota: 0
Si es distinto de creo se permite que los usuarios creen su INBOX y se le aplica la quota inidicada.
umask: 077
Umask a aplicar a los mailboxes creados.
sendmail: /usr/sbin/sendmail
Programa compatible con sendmail que va a usar sieve para enviar los reject,redirect, y respuestas de vacaciones.

sieveusehomedir: false
No leer el fichero ~/.sieve. Ésto sólo tiene sentido en sistemas en dónde los usuarios del correo son usuarios del sistema.
sievedir: /var/spool/sieve
si sieveusehomedir es false, el directorio en dónde se buscan los scripts sieve.
hashimapspool: true
El directorio del spool es hashed
allowplaintext: no
No se permite el uso del mecanismo de autentificación sasl plain.
sasl_mech_list: login cram-md5 digest-md5
Mecanismos permitidos para la autentificación sasl.
sasl_pwcheck_method: auxprop
Método usado para chequear la password.
sasl_auxprop_plugin: sasldb
Se utilizará sasldb.

tls_imap_cert_file: /etc/ssl/certs/cyrus-imapd.cert.pem
Fichero a utilizar como certificado. (necesario en caso de utilizar imaps). Si no se especifica se usa el de la variable tls_cert_file que es la configuración global para todos los servicios.
tls_imap_key_file: /etc/ssl/private/cyrus-imapd.key.pem
Fichero a utilizar como clave privada (necesario en caso de utilizar imaps).
tls_ca_path: /etc/ssl/certs
Directorio en dónde están los certificados de las autoridades certificadoras.
tls_session_timeout: 1440
Timeout de la sesión
tls_cipher_list: TLSv1:SSLv3:SSLv2:!NULL:!EXPORT:!DES:!LOW:@STRENGTH
Cifrados que se permiten.
lmtpsocket: /var/run/cyrus/socket/lmtp
Socket a utilizar para recibir mensajes. Debe ser el mismo que aparece en el fichero de configuración /etc/cyrus.conf.
idlesocket: /var/run/cyrus/socket/idle
Socket a utilizar por el programa idled encargado de revisar cambios en los mailboxes. Debe ser el mismo que aparece en el fichero de configuración /etc/cyrus.conf.

Administración de los buzones de correo

La administración de los buzones de correo se realiza mediante el programa cyradm. Se ha de conectar con un usuario de los indicados en admins:

cernicalo:~emeteo$ cyradm --user cyrus localhost
Password:
localhost>help
authenticate, login, auth         authenticate to server
chdir, cd                         change current directory
createmailbox, create, cm         create mailbox
deleteaclmailbox, deleteacl, dam  remove ACLs from mailbox
deletemailbox, delete, dm         delete mailbox
disconnect, disc                  disconnect from current server
exit, quit                        exit cyradm
help, ?                           show commands
info                              display mailbox/server metadata
listacl, lam, listaclmailbox      list ACLs on mailbox
listmailbox, lm                   list mailboxes
listquota, lq                     list quotas on specified root
listquotaroot, lqr, lqm           show quota roots and quotas for mailbox
reconstruct                       reconstruct mailbox (if supported)
renamemailbox, rename, renm       rename (and optionally relocate) mailbox
server, servername, connect       show current server or connect to server
setaclmailbox, sam, setacl        set ACLs on mailbox
setinfo                           set server metadata
setquota, sq                      set quota on mailbox or resource
version, ver                      display version info of current server

Todos los buzones de usuario estarán bajo el directorio user. Por lo que para crear el buzón del usuario `usuario':

localhost> cm user.usuario
localhost>lm
user.usuario (\HasNoChildren)
localhost>lm user.usuario.personales
localhost>lm
user.usuario (\HasChildren)
user.usuario.personales (\HasNoChildren)

En el caso de tener la opción de configuración altnamespace: yes, el usuario vería en su programa cliente de correo la carpeta `INBOX' y la carpeta `personales' al mismo nivel.

Instalación de postfix

Será el encargado de repartir el correo localmente. Veremos que podemos utilizar tres métodos para entregar el correo a cyrus: procmail, cyrdeliver, lmtp.

La instalación de postfix-tls en Debian ya deja funcionando el servidor. Sólo queda personalizar la configuración de éste para que entregue el correo a cyrus permitiendo SMTP AUTH autentificando mediante sasl y permita la transmisión de correo mediante forma segura.

Entrega de correo a cyrus

Mediante cyrdeliver

En la instalación de Debian en el fichero /etc/postfix/master.cf ya existe un transporte llamado cyrus que emplea el programa cyrdeliver:

cyrus     unix  -       n       n       -       -       pipe
  flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -m ${extension} ${user}

Sólo queda indicarle en el /etc/postfix/main.cf:

	mailbox_transport = cyrus


Mediante procmail

Basta con poner en /etc/postfix/main.cf la opción mailbox_transport = cyrus, ya que, al igual que el transporte cyrus, tiene su entrada correspondiente en /etc/postfix/master.cf.

Para realizar la entrega de correo desde procmail se puede utilizar un /etc/procmailrc como este:

Figura 2: /etc/procmailrc
\begin{figure}\begin{verbatim}DELIVERMAIL=''/usr/sbin/cyrdeliver''
LOGFILE=''/...
...SER/.procmailrc
...

El problema de este sistema es que se necesita que los usuarios del correo sean usuarios del sistema para que éstos utilicen procmail con el fin de repartir su correo.


Mediante lmtp

Éste es el método a utilizar si se quiere aprovechar las ventajas de sieve, ya que mediante este método se aplican los filtros sieve. Los métodos anteriores no utilizan sieve porque se basan en el programa cyrdeliver, que hace la entrega directa en el buzón indicado.

Para utilizar éste método hay que indicar en /etc/postfix/main.cf:

	mailbox_transport = lmtp:unix:/var/run/cyrus/socket/lmtp

Hay que puntualizar que debian no ejecuta el programa de postfix que maneja el protocolo lmtp en un chroot, ya que así está marcado en /etc/postfix/master.cf:

# 	service type  private unpriv  chroot  wakeup  maxproc command + args
	local     unix  -       n       n       -       -       local
	virtual   unix  -       n       n       -       -       virtual
	lmtp      unix  -       -       n       -       -       lmtp

En caso de que se quiera ejecutar en un chroot habría que hacer accesible el socket /var/run/cyrus/socket/lmtp desde su jaula, bien haciendo un enlace duro, bien modificando el path del socket en la configuración de cyrus.

Autentificación mediante sasl

El objetivo es autentificar a los clientes smtp para que puedan hacer relay a través del servidor de correo.

Para ello se modifica la opción smtpd_recipient_restrictions del fichero /etc/postfix/main.cf:

smtpd_sasl_auth_enable=yes
smtpd_tls_auth_only = yes
smtpd_sasl_local_domain=cernicalo
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,\
 	reject_unauth_destination
	smtpd_sasl_security_options=noanonymous

Así se permite hacer relay a los clientes sin autentificar que pertenezcan a las redes indicadas en mynetworks y a los clientes autentificados mediante el método sasl. Se rechazarán los que están sin autentificar. Además es necesario utilizar tls para autentificarse. Con la opción smtpd_sasl_local_domain=cernicalo se indica que compruebe el usuario entrando en /etc/sasldb2 con usuario@cernicalo.

Existe un problemilla causado porque el servicio smtpd de postfix se ejecuta en una jaula, y, por lo tanto, no puede acceder al fichero /etc/sasldb2 para consultar a los usuarios. Como solución se puede tomar hacer una enlace duro:

cernicalo:/var/spool/postfix/etc# ln /etc/sasldb2 sasldb2

En el caso de que no fuera posible (por estar en distintas particiones), habría que recurrir a otro método (se deja como ejercicio al lector).

Para que postfix sepa qué método utilizar con sasl, hay que crear el fichero /etc/postfix/sasl/smtpd.conf:

pwcheck_method: auxprop
mech_list: login cram-md5 digest-md5

Configuración segura

Para permitir un canal seguro mediante tls sólo hay que indicar en /etc/postfix/main.cf que así lo haga:

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/postfix.cert.pem
smtpd_tls_key_file = /etc/ssl/private/postfix.key.pem

Los certificados deben tener derechos de lectura para el usuario postfix.

Utilización de sieve

Para aprovecharse de los scripts en sevidor se ha de utilizar el método de entrega de correo lmtp 4.1.3.

Un ejemplo de script sieve1:

Figura 3: Ejemplo script sieve
\begin{figure}\begin{verbatim}require [ ''fileinto''];
if header :contains
['...
...''] ''SNORT''
{ fileinto ''Servidores.snort''; stop;}\end{verbatim}\end{figure}

Para subir un script al servidor se utiliza el programa sieveshell, perteneciente al paquete cyrus21-admin:

emeteo@cormoran$ sieveshell -u emeteo cernicalo
connecting to cernicalo
Please enter your password:
> put repartecorreo.sie
> ls
repartecorreo.sie
> activate repartecorreo.sie
> ls
repartecorreo.sie  <- active script
> quit

Actualmente kmail sólo soporta editar las respuestas fuera de oficina. Esperemos que soporte un editor completo de estos filtros.

Sobre este documento...

Postfix+Cyrus Imap+Sasl+tls

This document was generated using the LaTeX2HTML translator Version 2K.1beta (1.48)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html imap+postfix.tex -split 0

The translation was initiated by Mario Teijeiro Otero on 2003-11-13


Notas al pie

...sieve1
Aquí se omite el INBOX en el path a los buzones, debido a que en /etc/imapd.conf se indicó altnamespace: yes

next_inactive up previous
Mario Teijeiro Otero 2003-11-13