Esta es una entrada dentro de la serie para la instalación de un servidor de correo completo. Índice completo de contenidos pincha aquí.
En esta entrada vamos a configurar el servicio que gestiona las conexiones de lectura al buzón y gestiona los filtros que cada usuario configura a nivel individual o el administrador a nivel global.
Tabla de contenidos
Dovecot
Configuración
Primero creamos el buzón postmaster@tiraquelibras.com o un alias con esta misma dirección apuntando a otro buzón que tengamos ya creado, sin importar que coincidan sus dominios. Podemos crear el buzón accediendo a la interfaz web de gestión de la base de datos que hemos instalado en el servidor en una sección anterior. Para dirigirte a esta pincha aquí.
Copiamos todos los archivos de configuración originales:
sudo cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig sudo cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig sudo cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig sudo cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig sudo cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig sudo cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig
Editamos el archivo /etc/dovecot/dovecot.conf y agregamos los protocolos:
## Dovecot configuration file ... # Enable installed protocols !include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap pop3 lmtp ... postmaster_address=postmaster@tiraquelibras.com
Editamos el archivo /etc/dovecot/conf.d/10-mail.conf que controla como Dovecot interactúa con el sistema de ficheros del servidor para almacenar y acceder a los mensajes:
... mail_location = maildir:/var/mail/vhosts/%d/%n/ ... mail_privileged_group = mail ...
Creamos el directorio para almacenar los dominios y buzones:
sudo mkdir -p /var/mail/vhosts/
Creamos el grupo vmail con ID 5000 y el usuario vmail que agregamos al grupo vmail creado. Este usuario del sistema leerá los mails del servidor:
sudo groupadd -g 5000 vmail sudo useradd -g vmail -u 5000 vmail -d /var/mail
Cambiamos los permisos del directorio creado anteriormente para almacenar los dominios y buzones:
sudo chown -R vmail:vmail /var/mail
Ahora editamos el archivo /etc/dovecot/conf.d/10-auth.conf:
... disable_plaintext_auth = yes ... auth_mechanisms = plain login ... !include auth-system.conf.ext ... !include auth-sql.conf.ext ...
Ahora editamos el directorio /etc/dovecot/conf.d/auth-sql.conf.ext para indicar la información de autenticación y almacenamiento.
... passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } ... #userdb { # driver = sql # args = /etc/dovecot/dovecot-sql.conf.ext #} ... userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n } ...
Actualizamos el archivo /etc/dovecot/dovecot-sql.conf.ext con la información de conexión del MySQL.
... driver = mysql ... connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuserpass ... default_pass_scheme = PLAIN-MD5 ... password_query = SELECT email as user, password FROM virtual_users WHERE email='%u' and active='1'; ...
OJO, si queremos que los alias se usen como login también deberemos de cambiar la password_query con el siguiente contenido, pero yo no lo configuré en mi entorno:
password_query = SELECT email as user, password FROM virtual_users WHERE email=(SELECT destination FROM virtual_aliases WHERE source = '%u' and active='1') and active='1';
Cambiamos el propietario y grupo del directorio /etc/dovecot por vmail y dovecot con el comando:
sudo chown -R vmail:dovecot /etc/dovecot
Ahora los permisos con:
sudo chmod -R o-rwx /etc/dovecot
Editamos el archivo /etc/dovecot/conf.d/10-master.conf en donde deshabilitamos el desencriptado IMAP y POP3 indicando los puertos de los protocolos a valor 0. Descomentamos las variables port y ssl:
... service imap-login { inet_listener imap { port = 0 } inet_listener imaps { port = 993 ssl = yes } ... } ... service pop3-login { inet_listener pop3 { port = 0 } inet_listener pop3s { port = 995 ssl = yes } } ...
Y ahora el servicio lmtp:
... service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { #mode = 0666i mode = 0600 user = postfix group = postfix } ... }
Ahora el servicio auth:
... service auth { ... unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail } ... user = dovecot } ...
Y ahora el auth-worker:
... service auth-worker { ... user = vmail }
Para finalizar editamos el archivo /etc/dovecot/conf.d/10-ssl.conf para requerir SSL y agregar la ubicación de los certificados SSL, además de deshabilitar el protocolo SSLv3 MUY INSEGURO:
... # SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt> ssl = required ... ssl_cert = </etc/letsencrypt/live/correu2.yeloquehay.com/fullchain.pem ssl_key = </etc/letsencrypt/live/correu2.yeloquehay.com/privkey.pem … # SSL protocols to use #ssl_protocols = !SSLv3 ssl_protocols = !SSLv3 …
Configuramos un log personalizado para Dovecot en el archivo /etc/dovecot/conf.d/10-logging.conf con los siguientes cambios:
… # Log file to use for error messages. "syslog" logs to syslog, # /dev/stderr logs to stderr. #log_path = syslog log_path = /var/log/dovecot.log … # mail_log plugin provides more event logging for mail processes. plugin { # Events to log. Also available: flag_change append mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename # Available fields: uid, box, msgid, from, subject, size, vsize, flags # size and vsize are available only for expunge and copy events. mail_log_fields = uid box msgid size } ## ## Log formatting. ## # Prefix for each line written to log file. % codes are in strftime(3) # format. ###log_timestamp = "%b %d %H:%M:%S " log_timestamp = "%Y-%m-%d %H:%M:%S " # Space-separated list of elements we want to log. The elements which have # a non-empty variable value are joined together to form a comma-separated # string. login_log_format_elements = user=<%u> method=%m rip=%r lip=%l mpid=%e %c # Login log format. %s contains login_log_format_elements string, %$ contains # the data we want to log. login_log_format = %$: %s # Log prefix for mail processes. See doc/wiki/Variables.txt for list of # possible variables you can use. mail_log_prefix = "%s(%u): " # Format to use for logging mail deliveries. See doc/wiki/Variables.txt for # list of all variables you can use. Some of the common ones include: # %$ - Delivery status message (e.g. "saved to INBOX") # %m - Message-ID # %s - Subject # %f - From address # %p - Physical size # %w - Virtual size ###deliver_log_format = msgid=%m: %$ ###deliver_log_format = msgid=%m: %$ : Subject: %s deliver_log_format = Message-ID: %m - Subject: %s - From: %f - Size: %p - Status: %$
Ahora los eventos de Dovecot se escriben en el fichero /var/log/dovecot.log
Configuraciones adicionales
Subscribimos los directorios por defecto en el archivo /etc/dovecot/conf.d/15- mailboxes.conf:
… mailbox Drafts { special_use = \Drafts auto = subscribe } # mailbox Junk { # special_use = \Junk # } mailbox Spam { special_use = \Junk auto = subscribe } mailbox Trash { special_use = \Trash auto = subscribe } … mailbox Sent { special_use = \Sent auto = subscribe } # mailbox "Sent Messages" { # special_use = \Sent # } …
En el archivo /etc/dovecot/conf.d/20-imap.conf cambiamos:
… imap_logout_format = in=%i out=%o … protocol imap { … mail_plugins = $mail_plugins mail_log notify # Maximum number of IMAP connections allowed for a user from each IP address. # NOTE: The username is compared case-sensitively. mail_max_userip_connections = 10 }
En el archivo /etc/dovecot/conf.d/20-pop3.conf cambiamos:
... pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s, deleted=%{deleted_bytes} … protocol pop3 { … mail_plugins = $mail_plugins mail_log notify # Maximum number of POP3 connections allowed for a user from each IP address. # NOTE: The username is compared case-sensitively. mail_max_userip_connections = 10 }
Reiniciamos Dovecot con:
sudo systemctl restart dovecot
Error en los logs
Para evitar este tipo de errores en los logs del archivo auth.log:
Oct 1 09:58:01 h2847530 auth: pam_unix(dovecot:auth): authentication failure; logname= uid=5000 euid=5000 tty=doveco Oct 1 09:58:04 h2847530 auth: pam_unix(dovecot:auth): check pass; user unknown Oct 1 09:58:04 h2847530 auth: pam_unix(dovecot:auth): authentication failure; logname= uid=5000 euid=5000 tty=doveco Oct 1 09:58:08 h2847530 auth: pam_unix(dovecot:auth): check pass; user unknown
Tenemos que editar el archivo /etc/dovecot/conf.d/auth-system.conf.ext. Primero hacemos una copia:
cp /etc/dovecot/conf.d/auth-system.conf.ext /etc/dovecot/conf.d/auth-system.conf.ext.orig
Luego lo editamos y comentamos las siguientes líneas:
… ###passdb { ### driver = pam # [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>] # [cache_key=<key>] [<service name>] #args = dovecot ###} … ###userdb { # <doc/wiki/AuthDatabase.Passwd.txt> ### driver = passwd # [blocking=no] #args = # Override fields from passwd #override_fields = home=/home/virtual/%u ###} …
Reiniciamos Dovecot y ya se solucionaría:
systemctl restart dovecot
Sieve y ManageSIEVE
Instalamos los paquetes necesarios:
apt-get install dovecot-sieve dovecot-managesieved
Habilitamos los plugins de Dovecot en el archivo /etc/dovecot/conf.d/20-lmtp.conf
protocol lmtp { # Space separated list of plugins to load (default is global mail_plugins). #mail_plugins = $mail_plugins portmaster_address = postmaster@yeloquehay.com mail_plugins = $mail_plugins sieve }
Ahora editamos el archivo /etc/dovecot/conf.d/90-sieve.conf:
plugin { sieve = ~/.dovecot.sieve sieve_global_path = /var/lib/dovecot/sieve/default.sieve sieve_dir = ~/sieve sieve_global_dir = /var/lib/dovecot/sieve/ }
Y para finalizar en el archivo /etc/dovecot/dovecot.conf agregamos lo siguiente:
… # Enable installed protocols … protocols = imap pop3 lmtp sieve …
Archivo /etc/dovecot/conf.d/20-managesieve.conf
… service managesieve-login { inet_listener sieve { port = 4190 } inet_listener sieve_deprecated { port = 2000 } # Number of connections to handle before starting a new process. Typically # the only useful values are 0 (unlimited) or 1. 1 is more secure, but 0 # is faster. <doc/wiki/LoginProcess.txt> #service_count = 1 # Number of processes to always keep waiting for more connections. #process_min_avail = 0 # If you set service_count=0, you probably need to grow this. #vsz_limit = 64M } service managesieve { # Max. number of ManageSieve processes (connections) process_limit = 1024 } …
Si hacemos un telnet al puerto de SIEVE 4190 vemos todos los comandos habilitados para este servicio:
# telnet X.X.X.X 4190 Trying 81.169.229.19... Connected to 81.169.229.19. Escape character is '^]'. "IMPLEMENTATION" "Dovecot Pigeonhole" "SIEVE" "fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext" "NOTIFY" "mailto" "SASL" "" "STARTTLS" "VERSION" "1.0" OK "Dovecot ready."
Vemos la información que hace referencia a SIEVE:
«IMPLEMENTATION» «Dovecot Pigeonhole»
«SIEVE» «fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext»
IMPORTANTE, para que los filtros SIEVE funcionen, sobre todo al redireccionar o reenviar emails, debemos de cambiar los permisos del directorio de Postfix
chmod 755 -R /etc/postfix
Creamos el archivo SIEVE para las reglas globalesque afectarán a todos los mensajes que cumplan los requisitos indicados.
Creamos el directorio:
mkdir /var/lib/dovecot/sieve
Ahora el archivo dentro del directorio anterior /var/lib/dovecot/sieve/default.sieve con el siguiente contenido:
require "fileinto"; if header :contains "X-Spam-Flag" "YES" { fileinto "Junk"; }
Con esto conseguimos que los mensajes con la cabecera de SPAM se entreguen en el directorio pertinente.
Cambiamos el propietario del archivo
chown -R vmail:vmail /var/lib/dovecot
Compilamos el archivo SIEVE para que se aplique correctamente
sievec /var/lib/dovecot/sieve/default.sieve
En este archivo podemos configurar reenvíos a otros buzones, rechazos, almacenar en un directorio determinado, respuesta a mensajes, respuesta de no disponible, … indicando determinados patrones que se den en las cabeceras de los mensajes que reciba nuestra plataforma.
Índice general pincha aquí.