No estás usando esta distribución?

Selecciona una versión o distribución diferente

En los siguientes 4 artículos veremos como configurar un servidor de correo seguro con Postfix y Dovecot. Además almacenaremos los dominios, los usuarios y los alias en una base de datos con MariaDB.

Durante el proceso también instalaremos RoundCube para poder enviar e-mails desde el cliente web. Tanto RoundCube como el servidor de correo completo estará configurado bajo SSL.

Todo el proceso lo realizaremos bajo Debian 10, pero la configuración es muy similar en otras distribuciones como Ubuntu o CentOS.

Instalación y configuración de Postfix

Ahora es momento de configurar Postfix que es el encargado de enviar los e-mails dentro del servidor de correo.

Primero procedemos para instalar Postfix:

apt install postfix postfix-mysql

Empezamos a configurar Postfix, lo primero es editar el fichero de configuración /etc/postfix/main.cf y revisamos que tenga toda esta configuración:

append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
message_size_limit = 4194304
readme_directory = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (CentOS)
smtpd_tls_cert_file=/etc/letsencrypt/live/dominio.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/dominio.com/privkey.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

Luego tendremos que comentar estos dos parámetros:

#dovecot_destination_recipient_limit = 1
#mydestination = mail.dominio.com dominio.com

Debemos de tener en cuenta que los parámetros smtpd_tls_cert_file y smtpd_tls_key_file debemos de poner la ruta para nuestro dominio (este certificado lo habremos creado en el primer apartado de este tutorial).

Los tres parámetros siguientes son de especial importancia. Las tres rutas siguientes serán ficheros de configuración donde indicaremos el acceso a Postfix a las tablas de la base de datos que se creó en la parte 1 del tutorial.

virtual_mailbox_domains = mysql:/etc/postfix/mariadb-vdomains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mariadb-vusers.cf
virtual_alias_maps = mysql:/etc/postfix/mariadb-valias.cf

Crearemos los ficheros y deberemos de poner especial atención a la configuración de los tres ficheros cambiando el parámetro user, password y dbname donde deberemos de configurar el acceso a la base de datos.

touch /etc/postfix/mariadb-{vdomains,vusers,valias}.cf

En /etc/postfix/mariadb-vdomains.cf:

user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Domains_tbl WHERE DomainName='%s'

En /etc/postfix/mariadb-vusers.cf:

user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Users_tbl WHERE Email='%s'

En /etc/postfix/mariadb-valias.cf:

user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT Destination FROM Alias_tbl WHERE Source='%s'

Finalmente, cambiamos los permisos a los ficheros:

chmod 640 /etc/postfix/mariadb-*.cf

Y propietarios:

chown root:postfix /etc/postfix/mariadb-*.cf

Ahora habilitaremos las conexiones seguras, tendremos que descomentar o añadir si fuera necesario en /etc/postix/master.cf:

submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp

showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
#virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

Luego al final del fichero añadimos lo siguiente:

dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}

Luego reiniciamos el servicio, pero antes deberemos de asegurarnos de que la sintaxis del fichero de configuración es correcta:

postfix check

Si todo es correcto, reiniciamos y habilitamos al arranque:

systemctl enable postfix
systemctl restart postfix

Para comprobar que la conexión a la base de datos es correcta, podremos hacerlo con el comando postmap:

postmap -q dominio.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q admin@dominio.com mysql:/etc/postfix/mariadb-vusers.cf
postmap -q postmaster@dominio.com mysql:/etc/postfix/mariadb-vusers.cf
postmap -q superadmin@dominio.com mysql:/etc/postfix/mariadb-valias.cf

Los comandos anteriores deberían de devolver un 1 para que todo sea correcto. De lo contrario no se mostrará nada en la pantalla. En el caso del alias devolverá la cuenta de correo electrónico real.

Instalación y configuración de Dovecot

Como servidor IMAP/POP3, Dovecot proporciona a los usuarios una forma de acceder a su correo a través de un MUA (Agente de Usuario de Correo), como Thunderbird o RoundCube.

Para empezar, vamos a instalar el software necesario:

apt install dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql

Luego vamos a crear un usuario y un grupo para controlar los correos electrónicos (esto lo necesitamos para gestionar los correos del servidor). Se puede usar otro UID y GID:

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

La configuración de Dovecot se dividen en varios archivos de configuración, primero empezaremos con /etc/dovecot/dovecot.conf:

!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf

En /etc/dovecot/conf.d/10-auth.conf (solo habilitaremos la autentificación a través de SQL):

disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext

En /etc/dovecot/conf.d/auth-sql.conf.ext (ten en cuenta que los correos se almacenarán en /home/vmail)

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}

Las bandejas de entrada para las cuentas de usuario se crearán cuando se reciban por primera vez los correos electrónicos en dichas cuentas.

En /etc/dovecot/conf.d/10-mail.conf:

mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
  inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl

En /etc/dovecot/conf.d/10-master.conf:

service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
   mode = 0600
   user = vmail
  }
  user = dovecot
}
service auth-worker {
  user = vmail
}
service dict {
  unix_listener dict {
  }
}

service stats {
   unix_listener stats-reader {
      user = vmail
      group = vmail
      mode = 0660
   }

   unix_listener stats-writer {
      user = vmail
      group = vmail
      mode = 0660
   }
}

En /etc/dovecot/conf.d/10-ssl.conf deberemos de modificar la ruta de nuestro certificado:

ssl = required
ssl_cert = </etc/letsencrypt/live/dominio.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/dominio.com/privkey.pem

En /etc/dovecot/dovecot-sql.conf.ext modificaremos los datos de la base de datos:

driver = mysql
connect = "host=127.0.0.1 dbname=EmailServer_db user=dba password=PassWith#Here"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE Email='%u';

Adicionalmente, también puedes configurar un fichero de registro para Dovecot y separarlo de Postfix en /etc/dovecot/conf.d/10-logging.conf:

log_path = /var/log/dovecot.log

Finalmente, nos aseguramos de que Dovecot tiene acceso al log:

touch /var/log/dovecot.log
chown vmail:dovecot /var/log/dovecot.log
chmod 660 /var/log/dovecot.log

Luego modificamos algunos permisos de algunos ficheros:

chown vmail:vmail -R /home/vmail
chown vmail:dovecot -R /etc/dovecot
chmod -R o-rwx /etc/dovecot

Configurar cuenta en Thunderbird

Pues ha llegado el momento de la verdad. Deberíamos de poder configurar nuestra cuenta en cualquier cliente, como por ejemplo Thunderbird.

Cuando añadamos la cuenta en Thunderbird, debería de detectar automáticamente la configuración de correo, de todos modos, debería de ser esta:

Servidor IMAP/POP3:

  • Servidor IMAP: mail.dominio.com
  • Puerto IMAP: 143
  • Autentificación con usuario (usuario@dominio.com)
  • Método de autentificación: Contraseña normal
  • Conexión segura: STARTTLS

Servidor SMTP:

  • Servidor SMTP: mail.dominio.com
  • Puerto SMTP: 587
  • Autentificación con usuario (usuario@dominio.com)
  • Método de autentificación: Contraseña normal
  • Conexión segura: STARTTLS

Tras configurar la cuenta, podremos probar de enviar un e-mail, el resultado en el log de Postfix debería de ser el siguiente:

Jul 21 13:30:47 mail postfix/submission/smtpd[1022]: 6658462404: client=mail.host[XX.XXX.XXX.XXX], sasl_method=PLAIN, sasl_username=admin@dominio.com
Jul 21 13:30:47 mail postfix/cleanup[1027]: 6658462404: message-id=<0a1ff437-9d74-d522-330a-ddb7453491cf@dominio.com>
Jul 21 13:30:47 mail postfix/qmgr[31547]: 6658462404: from=<admin@dominio.com>, size=644, nrcpt=1 (queue active)
Jul 21 13:30:48 mail postfix/smtp[1028]: 6658462404: to=<test-n7tls@mail-tester.com>, relay=mail-tester.com[94.23.206.89]:25, delay=0.61, delays=0.04/0.01/0.28/0.29, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as CF7989FB92)
Jul 21 13:30:48 mail postfix/qmgr[31547]: 6658462404: removed

Y para recibir e-mails, el log debería de mostrar lo siguiente:

Jul 21 13:25:44 mail postfix/smtpd[985]: 2D6D762404: client=mail-io1-f48.google.com[209.85.166.48]
Jul 21 13:25:44 mail postfix/cleanup[995]: 2D6D762404: message-id=<CAPuNWKrLggpN_WuN3fprWj8Yx5Q0garakLqan0gKOgAu_dvgLg@mail.gmail.com>
Jul 21 13:25:44 mail postfix/qmgr[31547]: 2D6D762404: from=<usuario@gmail.com>, size=2480, nrcpt=1 (queue active)
Jul 21 13:25:44 mail postfix/pipe[996]: 2D6D762404: to=<admin@dominio.com>, relay=dovecot, delay=0.04, delays=0.01/0.01/0/0.02, dsn=2.0.0, status=sent (delivered via dovecot service)
Jul 21 13:25:44 mail postfix/qmgr[31547]: 2D6D762404: removed
Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación