Servicios / abril 19, 2021

Cómo configurar el filtrado de correo del lado del servidor con Dovecot Sieve y Roundcube

Esta podría ser una continuación de mi popular artículo sobre Cómo configurar un servidor de correo seguro con Postfix, Dovecot y MariaDB, pero he preferido dejarlo por separado, ya que es algo adicional que podemos configurar.

En este tutorial vamos a configurar reglas de filtrado de correo del lado del servidor para entregar automáticamente los correos específicos basándose en una regla de filtrado. Es decir, vamos usar un plugin de Dovecot para filtrar el correo en función de diversas reglas para que el mismo servidor se encargue de guardarlo en la carpeta que toca, borrarlos, marcalos como SPAM o incluso responder.

Para esto usaremos el lenguaje Sieve (RFC 5228) y el protocolo ManageSieve al servidor de Dovecot. Además podremos gestionar fácilmente las reglas a través de la interfaz de RoundCube.

Habilitar Manage-Sieve en Dovecot

Para habilitar el protocolo ManageSieve en Dovecot, primero tienes que instalar los paquetes necesarios:

apt install dovecot-managesieved dovecot-sieve

Luego editaremos la configuración de Dovecot para añadir el protocolo:

nano /etc/dovecot/dovecot.conf

Y añadiremos lo siguiente:

protocols = imap lmtp sieve

Luego editamos /etc/dovecot/conf.d/10-master.conf y añadimos lo siguiente en service auth {:

unix_listener auth-client {
   group = postfix
   mode = 0660
   user = postfix
}
unix_listener auth-master {
   group = vmail
   mode = 0660
   user = vmail
}

Y en /etc/dovecot/conf.d/90-sieve.conf debemos de añadir o editar lo siguiente y configurar nuestro dominio dentro de la configuración:

service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
}
service managesieve {
}
protocol sieve {
    managesieve_max_line_length = 65536
    managesieve_implementation_string = dovecot
    log_path = /var/log/dovecot-sieve-errors.log
    info_log_path = /var/log/dovecot-sieve.log
}
plugin {
    sieve = ~/dovecot.sieve
    sieve_global_path = /etc/dovecot/sieve/default.sieve
    sieve_dir = ~/sieve
    sieve_global_dir = /etc/dovecot/sieve/global/
}
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
protocol lda {
    mail_plugins = $mail_plugins autocreate sieve quota
    postmaster_address = postmaster@mydomain.com
    hostname = mail.mydomain.com
    auth_socket_path = /var/run/dovecot/auth-master
    log_path = /var/log/dovecot-lda-errors.log
    info_log_path = /var/log/dovecot-lda.log
}
protocol lmtp {
    mail_plugins = $mail_plugins autocreate sieve quota
    log_path = /var/log/dovecot-lmtp-errors.log
    info_log_path = /var/log/dovecot-lmtp.log
}

Luego deberemos de crear los ficheros de log que hemos configurado así como dar permisos a los directorios:

touch /var/log/{dovecot-lda-errors.log,dovecot-lda.log}
touch /var/log/{dovecot-sieve-errors.log,dovecot-sieve.log}
touch /var/log/{dovecot-lmtp-errors.log,dovecot-lmtp.log}
mkdir -p /etc/dovecot/sieve/global

chown vmail: -R /etc/dovecot/sieve
chown vmail:mail /var/log/dovecot-*

Reiniciamos el servicio de Dovecot para aplicar los cambios:

systemctl restart dovecot

Y verificamos que manage-sieve está escuchando por el puerto 4190:

netstat -tunlp | grep :4190

Configurar la entrega de PostFix

Para que todo esto funcione, hay que modificar la configuración de PostFix. Para ello editaremos el fichero de configuración:

nano /etc/postfix/main.cf

Y añadiremos o cambiaremos las siguientes líneas:

virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

Ahora editamos este otro fichero y al final del todo añadimos el texto de continuación:

nano /etc/postfix/master.cf
dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

Reiniciamos PostFix para que tenga efecto:

systemctl restart postfix

Habilitar el Plugin Sieve en RoundCube

En mi caso, RoundCube lo tengo instalado en otro servidor, por lo que para estos casos hay que habilitar una opción extra. Si no, por defecto Sieve revisa el puerto desde localhost.

Entramos dentro del directorio de RoundCube y editamos el fichero de configuración:

nano config/main.inc.php

En el apartado de Plugins, añadimos el plugin:

$rcmail_config['plugins'] = array('managesieve');

Luego vamos al directorio de los plugins y editamos el fichero de configuración de managesieve:

cp plugins/managesieve/config.inc.php.dist plugins/managesieve/config.inc.php
nano plugins/managesieve/config.inc.php

Y añadimos lo siguiente:

$rcmail_config['managesieve_port'] = 4190;
$rcmail_config['managesieve_default'] = '/etc/dovecot/sieve/default.sieve';
$config['managesieve_auth_type'] = plain;
$config['managesieve_usetls'] = true;

Si nuestro servidor Dovecot se encuentra en otro servidor, deberemos de añadir también esto:

$config['managesieve_host'] = 'IP_Servidor_Dovecot';

Ahora deberías de poder acceder a RoundCube y navegar en Configuración > Filtros y añadir los filtros que necesites.

Ejecutar manualmente los filtros

Si quieres comprobar que funcionan correctamente los filtros, puedes ejecutarlos desde la misma terminal de la siguiente forma:

sieve-filter -e -W -u micuenta@dominio.com /home/vmail/dominio.com/micuenta/sieve/MisFiltros.sieve inbox

2 comentarios “Cómo configurar el filtrado de correo del lado del servidor con Dovecot Sieve y Roundcube”

Suscribirte
Notificarme
guest
2 Comments
más viejos
más nuevos más votados
Inline Feedbacks
View all comments
Javier
1 mes

Muchísimas gracias por el procedimiento, funciona a la perfección.

Utilizamos cookies propias y de terceros para mejorar nuestros servicios. Si continúa navegando, consideramos que acepta su uso. Doble clic sobre aquí para cerrar.