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
Comentarios