Continuando la entrada anterior en la que montamos un MTA con OpenSMTPd, en esta ocasión facilitaremos el poder descargar el correo recibido utilizando cualquier cliente de correo que soporte IMAP. Al igual que en el anterior, utilizaremos a los usuarios del sistema para autenticarnos. También continuaremos manteniendo la simplicidad como principio básico, lo que nos lleva a utilizar Dovecot.

Requisitos

Como esta es la continuación del anterior, diremos que necesitamos un sistema FreeBSD actualizado y con OpenSMTPd instalado y funcional, tal y como lo dejamos la última vez.

Instalación

pkg install dovecot

Configuración

La configuración de ejemplo tras la instalación se ubica en un directorio diferente, por lo que necesitamos llevarlo a su ubicación definitiva, y una vez ahí podremos adaptarlo y utilizarlo.

cp -r /usr/local/etc/dovecot/example-config/* /usr/local/etc/dovecot/

Desactivar POP3 y Submission

El protocolo POP3 ya no tiene mucho sentido hoy día, con lo que vamos a impedir que Dovecot lo sirva. Por otro lado, ya dejamos configurado OpenSMTPd para que se encargue de gestionar submission, así que los deshabilitaremos. Hemos de dejar LMTP ya que nuestro MTA necesita poder entregarle el correo al MDA.

sed -ip 's/^protocols/protocols = imap lmtp/g' /usr/local/etc/dovecot/dovecot.conf

Configurar TLS

Vamos a utilizar los mismos certificados que teníamos para OpenSMTPd. Si la ubicación de los mismos o los nombres cambian, recordemos adaptar el fichero de configuración.

sed -ip 's/^ssl_key/ssl_key =<\/usr\/local\/etc\/mail\/ssl\/private\/mail.correo.com.key.pem/g' /usr/local/etc/dovecot/conf.d/10-ssl.conf
sed -ip 's/^ssl_cert/ssl_cert =<\/usr\/local\/etc\/mail\/ssl\/certs\/mail.correo.com.cert.pem/g' /usr/local/etc/dovecot/conf.d/10-ssl.conf
sed -ip 's/^#ssl = yes/ssl = required/' /usr/local/etc/dovecot/conf.d/10-ssl.conf

Configurar los buzones

Dovecot usa buzones estándar con carpetas Draft, Junk, Trash, Sent e Inbox. Además no se crean de manera automática, con lo cual los clientes de correo darán errores al conectarse e intentar suscribir las carpetas. Por este motivo vamos a hacer que Dovecot las cree automáticamente.

Editamos /usr/local/etc/dovecot/conf.d/15-mailboxes.conf tal que:

...
namespace inbox {
  # These mailboxes are widely used and could perhaps be created automatically:
  mailbox Drafts {
    special_use = \Drafts
    auto = create
  }
  mailbox Junk {
    special_use = \Junk
    auto = create
  }
  mailbox Trash {
    special_use = \Trash
    auto = create
  }

  # For \Sent mailboxes there are two widely used names. We'll mark both of
  # them as \Sent. User typically deletes one of them if duplicates are created.
  mailbox Sent {
    special_use = \Sent
    auto = create
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
...

Habilitar e iniciar el demonio

sysrc dovecot_enable="YES"
service dovecot start

Pruebas

Dovecot registra sus eventos en /var/log/maillog, así que es el primer sitio al que acudiremos a comprobar cómo van las cosas y si el demonio inicia correctamente.

tail /var/log/maillog
<22>1 2022-12-25T06:45:33.699554+02:00 mail.correo.com dovecot 13317 - - master: Dovecot v2.3.19.1 (9b53102964) starting up for imap, lmtp

Y por supuesto comprobamos que se encuentran a la escucha los protocolos configurados:

sockstat -4l
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS      
root     dovecot    13317 35 tcp4   *:143                 *:*
root     dovecot    13317 36 tcp4   *:993                 *:*

Configurar un cliente

Ahora podemos configurar un cliente de correo para suscribir y sincronizar el buzón. Como hasta ahora los únicos usuarios válidos son los del sistema, los que están en /etc/passwd, omitiremos el @correo.com en la configuración de autenticación.

IMAP

  • Servidor de correo entrante: mail.correo.com:143
  • Seguridad: STARTTLS
  • Autenticación: Contraseña, normal
  • Credenciales: usuario/contraseña

SMTP

  • Servidor de correo saliente: mail.correo.com:587
  • Seguridad: STARTTLS
  • Autenticación: Contraseña, normal
  • Credenciales: usuario/contraseña