Cyrus IMAP

Cada vez teníamos mas y mas mails, y courier-imap empezó a ir demasiado lento. Era hora de instalar un servidor IMAP más potente. La solución era cyrus:

Otra opción hubiera sido Dovecot, aunque en aquel momento desconocíamos su existencia.

Instalación


$ apt-get install cyrus22-imapd cyrus22-admin sasl2-bin

Cyrus-admin nos proporcionará un interface en modo texto para administrar de forma relativamente sencilla los buzones. Sasl-bin (Simple Authentication and Security Layer) proporciona la base de datos ldap para usuarios y contraseñas.

Aquí tenemos un estupendo howto de cyrus con postfix creado por Mario Teijeiro, compañero de Galpon

Basándome en este howto, pero por el momento sobre exim y sin autenticación ni soporte ssl, comento las cosas que he necesitado a posteriori y no vienen explicadas en el mismo:


localhost>sam user.USUARIO cyradm lrswipcda      # el significado de los permisos podemos verlo en el manual de cyradm.

De lo contrario nos denegará el permiso cuando queramos borrarlo.


munge8bit: no

Con esto incumplimos el estándar SMTP, pero permitimos que se visualicen correctamente los mails enviados desde servidores de correo que incumplen dicho estándar.


lmtp_overquota_perm_failure: yes


/var/lib/cyrus/user/t/this_user/this_user.seen


duplicatesuppression: false


$ telnet localhost 143
. login cyrus clave_cyrus
. list user.* *
. list user.USUARIO *
. setacl user.USUARIO cyrus lrswipcda
. delete user.USUARIO.Borradores
. create user.NUEVOUSUARIO
. reconstruct user.USUARIO
. logout

Cifrando las conexiones al servidor IMAP

Para transmitir los datos de imap por un canal seguro, debemos hacer un par de modificaciones en /etc/cyrus.conf y en /etc/imapd.conf.

En cyrus.conf , bajo la sección "SERVICES" debemos descomentar las líneas correspondientes a los servicios imaps y pop3s, y habilitar la línea de imap solamente para acceder desde localhost (para cyradm)


imap            cmd="imapd -U 30" listen="localhost:imap" prefork=0 maxchild=100
imaps           cmd="imapd -s -U 30" listen="imaps" prefork=0 maxchild=100
#pop3           cmd="pop3d -U 30" listen="pop3" prefork=0 maxchild=50
pop3s           cmd="pop3d -s -U 30" listen="pop3s" prefork=0 maxchild=50

En imapd.conf debemos especificar los ficheros con los certificados.


# File containing the global certificate used for ALL services (imap, pop3,
# lmtp, sieve)
tls_cert_file: /etc/ssl/mail.hermes.pem

# File containing the private key belonging to the global server certificate.
tls_key_file: /etc/ssl/mail.hermes.key

# File containing one or more Certificate Authority (CA) certificates.
tls_ca_file: /etc/ssl/certs/cacert.pem

# Path to directory with certificates of CAs.
tls_ca_path: /etc/ssl/certs

Dominios virtuales

Configurar dominios virtuales en postfix y cyrus es más sencillo de lo que puede parecer. Creo que el mayor problema que tuve residía en no tener el sistema actualizado, por lo que las librerías sasl no admitían múltiples dominios, y por su parte cyrus tiene que ser la versión 2.2 o superior.

Editamos /etc/imapd.conf y añadimos al final del fichero las opciones:


virtdomains: yes
defaultdomain: midominio.com

defaultdomain debe ser el dominio en el que esté nuestra máquina. No tiene porqué coincidir con alguno de los dominios virtuales que queremos alojar. Tuve problemas con usuarios/contraseñas poniendo como default uno de los dominios virtuales. (que no coincidía con el dominio en el q estaba la máquina). Al final encontré que la solución que siempre funciona es poner como defaultdomain el nombre de dominio que tenga el servidor en su /etc/hosts

Filtrando desde el servidor con sieve:

Sieve es una potente herramienta para filtrar mensajes desde el servidor según diversos criterios basados en el contenido de los mensajes.

No encontré forma de autenticarme con sieveshell, pero sí la manera de poner los scripts a mano en las carpetas de sieve. Creamos el script usando el lenguaje definido en el RFC, y luego lo convertimos al formato de sieve con el comando:


/usr/lib/cyrus/bin/sievec script defaultbc

Sugerencia

defaultbc es el script que se comprueba por defecto

La mejor opción es instalar websieve, que por defecto se instala en la carpeta de cgi's de apache (http://127.0.0.1/cgi-bin/websieve.pl). Con websieve podemos añadir scripts de manera intuitiva, y hasta manejar varios servidores de correo (configurándolos en /etc/websieve/websieve.conf). Si tenemos todas las carpetas al mismo nivel que Inbox, debemos cambiar la opción correspondiente a "alternate namespace" en websieve.conf

Ejemplo de script (en caso de ponerlo a mano en el directorio de scripts):


# Mail rules for user jesus@roadrunner.local.gadelek.com
# Created by Websieve version 0.62
require ["fileinto"];

if allof (header :contains  "X-Spam-Flag" "YES") {
     fileinto "Spam";
}

elsif allof (header :contains  "X-Amavis-Alert" "INFECTED") {
     fileinto "Virus";
}

else {
     keep;
}