Email con Postfix, Dovecot y MySQL

Servidor de correo electrónico Email con Postfix, Dovecot y MySQL

Email con Postfix dovecot y MySQL

Muy buenas esta guía la hemos diseñado con MySQL porqué en el VPS que usamos no tengo PostgreSQL instalado, pero también se puede configurar con PostgreSQL si estáis interesados en ello también lo puedo explicar ¿queréis que explique como se hace PostgreSQL?

Esta guiá yo la he explicado con MySQL así que halla vamos y veréis que es muy fácil configurar Postfix y Dovecot.

Yo uso Linode pero vamos que el que uses uno u otro solo cambiara la interfaz de la configuracion de DNS los aspectos técnicos son los mismos.

Podéis descargar el pdf aquí

Configurando Postfix y Dovecot

Postfix es el servidor de correo SMTP de correo saliente que ademas es de software libre.

Dovecot es el servidor de correo IMAP o POP3 de correo entrante que ademas es de software libre.

Así que este documento sera una completa guia en Español de configuración del servidor Postfix y Dovecot de como lo hemos configurado.

Instalando certificado SSL en Postix y Dovecot

Nosotros hemos instalado el certificado SSL de let’s encrypt por ser gratis pero por lo visto no funciona del todo bien y da aviso de que el certificado no funciona, asi que lo mismo es mejor probar con un certificado generado por openssl.

Openssl req -sha256 -x509 -nodes -newkey rsa:4096 -days 1825 \ -out dominio.tld.crt – keyout dominio.tld.key

Este comando solicitara varios datos:

  • Código de letras para el país.
  • Estado o provincia.
  • Ciudad.
  • Nombre de la empresa o razón social.
  • Unidad o sección.
  • Nombre del anfitrión.
  • Dirección de correo electrónico.

Tambien se puede crear el certificado con let’s encrypt como lo tenemos nosotros pero creo que da problemas y lo tendremos que cambiar pero se haria de esta manera.

Certbot-auto certonly -d dominio.com –email user@email.com –rsa-key-size 4096

este comando lanzarlo sin el –email user@email.com pero si con -rsa key-size 4096

Instalando paquetes o software para postfix y dovecot

Como donde tendremos que instalar el software es en nuestro VPS pues entramos a el por SSH.

ssh root@example

sudo su

ponemos la clave del usuario root

apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql mysql-server

3 imagenes.

MySQL

En este apartado simplemente lo he hecho por ordenes de comandos así que copiar y pegarlas y os sera fácil todo el proceso con MySQL con SQL a mano.

Crea la nueva base de datos

mysqladmin -p create mailserver

Logueate con MySQL

mysql -p mailserver Crea el usuario de MySQL que tendra acceso a la base de datos 100% que hemos creado de mailserver. GRANT SELECT ON mailserver.* TO ‘mailuser’@’127.0.0.1’ IDENTIFIED BY ‘mailuserpass’; Ni que decir tiene mailuserpass es la que ustedes quieran poner recomiendo una contraseña de las fuertes.

Flush
the MySQL privileges to apply the change:

FLUSH
PRIVILEGES;

Crea
una tabla para los dominios que recibiran los mail

CREATE TABLE `virtual_domains` ( `id` int(11) NOT NULL auto_increment, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Crea una tabla para todas las direcciones de correo y contraseñas CREATE TABLE `virtual_users` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `password` varchar(106) NOT NULL, `email` varchar(100) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Crea una tabla para los alias de los correos electrónicos

Create a table for the email aliases:

CREATE TABLE `virtual_aliases` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
AÑADIENDO DATOS

Añadiendo datos

Ahora que la basr de datos y las tablas han sido creadas añade algunos datos a esta base de datos MySQL.

Añade los dominios a la tabla virtual_domains remplaza los valores para example.com y hostname por los tuyos.

INSERT INTO `mailserver`.`virtual_domains` (`id` ,`name`) VALUES (‘1’, ‘example.com’), (‘2’, ‘hostname.example.com’), (‘3’, ‘hostname’), (‘4’, ‘localhost.example.com’);

Nota

Nota cualquier id ira con un dominio, el id is necesario para los siguientes pasos.

Añade las direcciones de correo de los usuarios a la tabla, virtual_users remplaza los valores con las direcciones de correo que desees configurar en el servidor de correo electrónico, remplaza los valores con contraseñas fuertes.

INSERT INTO `mailserver`.`virtual_users` (`id`, `domain_id`, `password` , `email`) VALUES (‘1’, ‘1’, ENCRYPT(‘password’, CONCAT(‘$6$’, SUBSTRING(SHA(RAND()), -16))), ‘email1@example.com’), (‘2’, ‘1’, ENCRYPT(‘password’, CONCAT(‘$6$’, SUBSTRING(SHA(RAND()), -16))), ‘email2@example.com’); Configura los alias de correo electronico y añadelos a la tabla virtual_aliases

To set up an email alias, add it to the virtual_aliases table.

INSERT INTO `mailserver`.`virtual_aliases` (`id`, `domain_id`, `source`, `destination`) VALUES (‘1’, ‘1’, ‘alias@example.com’, ‘email1@example.com’); Ahora que esta lista la base de datos verifica que has añadido los datos a MySQL. Lógicamente testealo según los datos que hayas añadido manualmente a la base de datos. Nosotros añadimos los datos según nuestras necesidades para nuestro VPS

Testando la base de datos

Desde que toda la información ha sido almacenada dentro de MySQL, chequea que los datos esten.

Chequea el contenido de la tabla virtual_domains


SELECT * FROM mailserver.virtual_domains;
<span style="font-family: Liberation Serif, serif;"><span style="font-size: medium;">Verifica que ves la siguiente salida:</span></span>

+----+-----------------------+

| id | name                  |

+----+-----------------------+
|  1 | example.com           |
|  2 | hostname.example.com  |
|  3 | hostname              |
|  4 | localhost.example.com |
+----+-----------------------+
4 rows in set (0.00 sec)

<span style="font-size: medium;">Chequea la tabla virtual_users</span>
SELECT * FROM mailserver.virtual_users;
<span style="font-family: Liberation Serif, serif;"><span style="font-size: medium;">Verifica que la siguiente salida, las claves hashes son largas como aparece aquí debajo</span></span>

+----+-----------+-------------------------------------+--------------------+
| id | domain_id | password                            | email              |
+----+-----------+-------------------------------------+--------------------+
|  1 |         1 | $6$574ef443973a5529c20616ab7c6828f7 |email1@example.com |
|  2 |         1 | $6$030fa94bcfc6554023a9aad90a8c9ca1 |email2@example.com |
+----+-----------+-------------------------------------+--------------------+
2 rows in set (0.01 sec)

<span style="font-family: Liberation Serif, serif;"><span style="font-size: medium;">Chequea la tabla virtual_aliases</span></span>
SELECT * FROM mailserver.virtual_aliases;
Verifica la siguiente salida

+----+-----------+-------------------+--------------------+
| id | domain_id | source            | destination        |
+----+-----------+-------------------+--------------------+
|  1 |         1 | alias@example.com | email1@example.com |
+----+-----------+-------------------+--------------------+
1 row in set (0.00 sec)

Si todas las salidas son correctas. Estas listo con MySQL sal de MySQL.

Exit

<span style="font-family: Liberation Serif, serif;">Postfix</span>

<span style="font-family: Liberation Serif, serif;">Lo
siguiente es que el servidor Postfix pueda aceptar mensajes de salida
de nuestros dominios. </span>
  1. <span style="font-family: Liberation Serif, serif;">Antes
    de realizar cualquier cambio en la configuración haz una copia de
    seguridad de la configuración en caso de que necesites revertir los
    cambios. </span>
    <span style="font-family: Liberation Serif, serif;">cp
    /</span>
    <span style="font-family: Liberation Serif, serif;"><i>etc/</i></span>
    <span style="font-family: Liberation Serif, serif;">postfix/main.cf
    </span>
    <span style="font-family: Liberation Serif, serif;">
    /</span>
    <span style="font-family: Liberation Serif, serif;"><i>etc/</i></span>
    <span style="font-family: Liberation Serif, serif;">postfix/main.cf.orig</span>
  2. <span style="font-family: Liberation Serif, serif;">Edita
    el fichero /</span>
    <span style="font-family: Liberation Serif, serif;"><i>etc/</i></span>
    <span style="font-family: Liberation Serif, serif;">postfix/main.cf
    a los siguientes cambios como viene aquí en este fichero. </span>
    
    
    # See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# TLS parameters
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
#smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_cert_file=/etc/dovecot/dovecot.pem
smtpd_tls_key_file=/etc/dovecot/private/dovecot.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
# Enabling SMTP for authenticated users, and handing off authentication to Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
 
permit_sasl_authenticated,
 
permit_mynetworks,
 
reject_unauth_destination
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = hostname.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
#mydestination = example.com, hostname.example.com, localhost.example.com, localhost
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
# Handing off local delivery to Dovecot's LMTP, and telling it where to store mail
virtual_transport = lmtp:unix:private/dovecot-lmtp
# Virtual domains, users, and aliases
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,
 
mysql:/etc/postfix/mysql-virtual-email2email.cf
  1. <span style="font-family: Liberation Serif, serif;">Crea
    el fichero /etc/postfix/mysql-virtual-mailbox-domains.cf,  para los
    dominios virtuales, algo importante es cambiar la contraseña de de
    la cuenta mailuser. Si usas un usuario diferente, base de datos
    diferente o nombres de tablas diferentes cambia esas configuraciones
    como te venga bien.</span>

1
2
3
4
5

user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'
  1. Crea el fichero
    /etc/postfix/mysql-virtual-mailbox-maps.cf
    <span style="font-family: Liberation Serif, serif;">y
    pon los siguientes valores. Haz los cambios necesarios para la clave
    de mailuser.</span>

    /etc/postfix/mysql-virtual-mailbox-maps.cf

    
    
    1
    2
    3
    4
    5
    
    
    user = mailuser
    password = mailuserpass
    hosts = 127.0.0.1
    dbname = mailserver
    query = SELECT 1 FROM virtual_users WHERE email='%s'
  2. Crea el fichero
    /etc/postfix/mysql-virtual-alias-maps.cf

    y pon todos los valores, y cambia la clave del usuario mailuser por la que hayas puesto./etc/postfix/mysql-virtual-alias-maps.cf

    
    
    1
    2
    3
    4
    5
    
    
    user = mailuser
    password = mailuserpass
    hosts = 127.0.0.1
    dbname = mailserver
    query = SELECT destination FROM virtual_aliases WHERE source='%s'
  3. Crea el fichero
    /etc/postfix/mysql-virtual-email2email.cf
    <span style="font-family: Liberation Serif, serif;">y
    pon los siguientes valores, cambia la contraseña del usuario
    mailuser por la suya.</span>

    /etc/postfix/mysql-virtual-email2email.cf

    
    
    1
    2
    3
    4
    5
    
    
    user = mailuser
    password = mailuserpass
    hosts = 127.0.0.1
    dbname = mailserver
    query = SELECT email FROM virtual_users WHERE email='%s'
  4. Salva los cambios que hayas hecho en el fichero
    /etc/postfix/mysql-virtual-email2email.cf
    <span style="font-family: Liberation Serif, serif;">y
    reincia el servidor postfix</span>
    .
    
    
    sudo service postfix restart
  5. Pon el siguiente comando para estar seguro de poder encontrar el siguiente dominio, remplaza example.com con el primer dominio virtual. El comando retorna 1 si se ha hecho correctamente.
    
    
    postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
  6. Testea postfix para verificar que puedes encontrar la primera dirección de correo electrónico o cualquiera que hayas añadido es para lo que sirve este comando y tiene que devolver un 1 si esta bien la dirección.
    
    
    postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
  7. Testea Postfix para verificar que puedes encotnrar el alias poniendo el siguiente comando remplaza
    alias@example.com

    con el alias que quieras verificar.

    
    
    postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf

    Esto funcionara si retorna el mismo email que hayas puesto en el alias.

  8. Haz una copia del fichero
    /etc/postfix/master.cf
    
    
    cp /etc/postfix/master.cf /etc/postfix/master.cf.orig
  9. Abre el fichero de configuracion y edita y descomenta las 2 lineas que empiezan con submission and smtps y el bloque de lineas que empiezan con -o./etc/postfix/master.cf
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master" or
# on-line: http://www.postfix.org/master.5.html).
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (no)    (never) (100)
# ==========================================================================
#smtp      inet  n       -       y       -       1       postscreen
#smtpd     pass  -       -       y       -       -       smtpd
#dnsblog   unix  -       -       y       -       0       dnsblog
#tlsproxy  unix  -       -       y       -       0       tlsproxy
smtp       inet  n       -       y       -       -       smtpd
submission inet  n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_wrappermode=no
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#  -o smtpd_sasl_type=dovecot
#  -o smtpd_sasl_path=private/auth
  
#  -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_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#smtps     inet  n       -       y       -       -       smtpd
 # -o syslog_name=postfix/smtps
 # -o smtpd_tls_wrappermode=yes
 # -o smtpd_sasl_auth_enable=yes
 # -o smtpd_reject_unlisted_recipient=no
 # -o smtpd_client_restrictions=$mua_client_restrictions
 # -o smtpd_helo_restrictions=$mua_helo_restrictions
 # -o smtpd_sender_restrictions=$mua_sender_restrictions
 # -o smtpd_recipient_restrictions=
 # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
 # -o milter_macro_daemon_name=ORIGINATING
#628       inet  n       -       y       -       -       qmqpd
#smtps      inet  n       -       -       -       -       smtpd
#    -o syslog_name=postfix/smtps
#    -o smtpd_tls_wrappermode=yes
#    -o smtpd_sasl_auth_enable=yes
#    -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#    -o milter_macro_daemon_name=ORIGINATING
pickup    unix  n       -       y       60      1       pickup
cleanup   unix  n       -       y       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
#qmgr     unix  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       y       1000?   1       tlsmgr
rewrite   unix  -       -       y       -       -       trivial-rewrite
bounce    unix  -       -       y       -       0       bounce
defer     unix  -       -       y       -       0       bounce
trace     unix  -       -       y       -       0       bounce
verify    unix  -       -       y       -       1       verify
flush     unix  n       -       y       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       y       -       -       smtp
relay     unix  -       -       y       -       -       smtp
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       y       -       -       showq
error     unix  -       -       y       -       -       error
retry     unix  -       -       y       -       -       error
discard   unix  -       -       y       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       y       -       -       lmtp
anvil     unix  -       -       y       -       1       anvil
scache    unix  -       -       y       -       1       scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent.  See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
#
# ====================================================================
#
# Recent Cyrus versions can use the existing "lmtp" master.cf entry.
#
# Specify in cyrus.conf:
#   lmtp    cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
#
# Specify in main.cf one or more of the following:
#  mailbox_transport = lmtp:inet:localhost
#  virtual_transport = lmtp:inet:localhost
#
# ====================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
#
#cyrus     unix  -       n       n       -       -       pipe
#  user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
#
# ====================================================================
# Old example of delivery via Cyrus.
#
#old-cyrus unix  -       n       n       -       -       pipe
#  flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
#
# ====================================================================
#
# See the Postfix UUCP_README file for configuration details.
#
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# Other external delivery methods.
#
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix  -       n       n       -       2       pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman   unix  -       n       n       -       -       pipe
  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
  ${nexthop} ${user}
  1. Cambia los permisos en el directorio
    /etc/postfix
    <span style="font-family: Liberation Serif, serif;">y
    restringe los permisos solo para el correpondiente grupo, o sea que
    este en chown -R root:root</span>
    <span style="font-family: Liberation Serif, serif;">root@ubuntu:/etc/postfix#
    ls -la</span>
<span style="font-family: Liberation Serif, serif;">total
184</span>
<span style="font-family: Liberation Serif, serif;">drwxr-x---
3 root    root  4096 May 30 13:26 .</span>
<span style="font-family: Liberation Serif, serif;">drwxr-xr-x
155 root    root 12288 May 20 12:10 ..</span>
<span style="font-family: Liberation Serif, serif;">-rw-r-----
1 root    root   153 Mar 28  2017 dynamicmaps.cf</span>
<span style="font-family: Liberation Serif, serif;">-rw-------
1 root    root   887 Aug 28  2017 mail.private</span>
<span style="font-family: Liberation Serif, serif;">-rw-------
1 root    root   315 Aug 28  2017 mail.txt</span>
<span style="font-family: Liberation Serif, serif;">-rw-r--r--
1 postfix root  2787 May 24 10:48 main.cf</span>
<span style="font-family: Liberation Serif, serif;">-rw-r-----
1 root    root  1413 Mar 28  2017 main.cf.orig</span>
<span style="font-family: Liberation Serif, serif;">-rw-r--r--
1 root    root 27126 Nov  3  2017 main.cf.proto</span>
<span style="font-family: Liberation Serif, serif;">-rw-r--r--
1 root    root  7159 May 19 13:55 master.cf</span>
<span style="font-family: Liberation Serif, serif;">-rw-r-----
1 root    root  6068 Mar 28  2017 master.cf.orig</span>
<span style="font-family: Liberation Serif, serif;">-rw-r--r--
1 root    root  6068 Nov  3  2017 master.cf.proto</span>
<span style="font-family: Liberation Serif, serif;">-rw-r-----
1 root    root  6063 Jan 20 05:57 master.cf.save</span>
<span style="font-family: Liberation Serif, serif;">-rw-r-----
1 root    root   143 Mar 28  2017 mysql-virtual-alias-maps.cf</span>
<span style="font-family: Liberation Serif, serif;">-rw-r-----
1 root    root   133 Mar 28  2017 mysql-virtual-email2email.cf</span>
<span style="font-family: Liberation Serif, serif;">-rw-r-----
1 root    root   130 Mar 28  2017 mysql-virtual-mailbox-domains.cf</span>
<span style="font-family: Liberation Serif, serif;">-rw-r-----
1 root    root   129 Mar 28  2017 mysql-virtual-mailbox-maps.cf</span>
<span style="font-family: Liberation Serif, serif;">-rw-r-----
1 root    root 21233 Apr 13  2016 postfix-files</span>
<span style="font-family: Liberation Serif, serif;">-rwxr-x---
1 root    root  9344 Apr 13  2016 postfix-script</span>
<span style="font-family: Liberation Serif, serif;">-rwxr-x---
1 root    root 29446 Apr 13  2016 post-install</span>
<span style="font-family: Liberation Serif, serif;">drwxr-x---
2 root    root  4096 Apr 13  2016 sasl</span>

 


chmod -R o-rwx /etc/postfix

Reinicia Postfix:


service postfix restart
<span style="font-family: Liberation Serif, serif;">¡Felicidades! Has configurado Postfix</span>

 

<span style="font-family: Liberation Serif, serif;">Dovecot</span>

<span style="font-family: Liberation Serif, serif;">Dovecot
allows users to log in and check their email using POP3 and IMAP. In
this section, configure Dovecot to force users to use SSL when they
connect so that their passwords are never sent to the server in plain
text.</span>
  1. Copia todos los ficheros de configuración para facilmente revertir los cambios si lo necesitas:
    
    
    cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
    cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
    cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
    cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
    cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
    cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig
  2. Abre el fichero de configuración y editalo con el contenido que ponemos a continuación, especialmente añale la linea que empieza con protocols debajo de la seccion que empieza por “Enable installed protocols.”/etc/dovecot/dovecot.conf
    
    
    ## Dovecot configuration file

# If you're in a hurry, see http://wiki2.dovecot.org/QuickConfiguration
# "doveconf -n" command gives a clean output of the changed settings. Use it
# instead of copy&amp;pasting files when posting to the Dovecot mailing list.
# '#' character and everything after it is treated as comments. Extra spaces
# and tabs are ignored. If you want to use either of these explicitly, put the
# value inside quotes, eg.: key = "# char and trailing whitespace  "
# Default values are shown for each setting, it's not required to uncomment
# those. These are exceptions to this though: No sections (e.g. namespace {})
# or plugin settings are added by default, they're listed only as examples.
# Paths are also just examples with the real defaults being based on configure
# options. The paths listed here are for configure --prefix=/usr
# --sysconfdir=/etc --localstatedir=/var
# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
# A comma separated list of IPs or hosts where to listen in for connections.
# "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.
# If you want to specify non-default ports or anything more complex,
# edit conf.d/master.conf.
#listen = *, ::
# Base directory where to store runtime data.
#base_dir = /var/run/dovecot/
# Name of this instance. Used to prefix all Dovecot processes in ps output.
#instance_name = dovecot
# Greeting message for clients.
#login_greeting = Dovecot ready.
# Space separated list of trusted network ranges. Connections from these
# IPs are allowed to override their IP addresses and ports (for logging and
# for authentication checks). disable_plaintext_auth is also ignored for
# these networks. Typically you'd specify the IMAP proxy servers here.
#login_trusted_networks =
# Sepace separated list of login access check sockets (e.g. tcpwrap)
#login_access_sockets =
# Show more verbose process titles (in ps). Currently shows user name and
# IP address. Useful for seeing who are actually using the IMAP processes
# (eg. shared mailboxes or if same uid is used for multiple accounts).
#verbose_proctitle = no
# Should all processes be killed when Dovecot master process shuts down.
# Setting this to "no" means that Dovecot can be upgraded without
# forcing existing client connections to close (although that could also be
# a problem if the upgrade is e.g. because of a security fix).
#shutdown_clients = yes
# If non-zero, run mail commands via this many connections to doveadm server,
# instead of running them directly in the same process.
#doveadm_worker_count = 0
# UNIX socket or host:port used for connecting to doveadm server
#doveadm_socket_path = doveadm-server
# Space separated list of environment variables that are preserved on Dovecot
# startup and passed down to all of its child processes. You can also give
# key=value pairs to always set specific settings.
#import_environment = TZ
##
## Dictionary server settings
##
# Dictionary can be used to store key=value lists. This is used by several
# plugins. The dictionary can be accessed either directly or though a
# dictionary server. The following dict block maps dictionary names to URIs
# when the server is used. These can then be referenced using URIs in format
# "proxy::&lt;name&gt;".
dict {
 
#quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
 
#expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
}
# Most of the actual configuration gets included below. The filenames are
# first sorted by their ASCII value and parsed in that order. The 00-prefixes
# in filenames are intended to make it easier to understand the ordering.
!include conf.d/*.conf
# A config file can also tried to be included without giving an error if
# it's not found:
!include_try local.conf
  1. Salva los cambios en el fichero
    /etc/dovecot/dovecot.conf
  2. Abre el fichero
    /etc/dovecot/conf.d/10-mail.conf.
    <span style="font-family: Liberation Serif, serif;">Este
    fichero controla como Dovecot interactuá con el sistema de archivos
    del servidor para almacenar y recuperar mensajes.</span>

     

    Modify the following variables within the configuration file:

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

    
    
    1
    2
    3
    
    
    mail_location = maildir:/var/mail/vhosts/%d/%n
    ...
    mail_privileged_group = mail

    Salva los cambios y sal.

  3. Entra los siguientes comando y verifica los permisos para
    /var/mail
    
    
    ls -ld /var/mail
  4. Verifica que los permisos para
    /var/mail

    son los siguientes. La fecha y el tiempo son diferentes en tu salida:

    
    
    drwxrwsr-x 2 root mail 4096 Mar  6 15:08 /var/mail

    Si sus permisos no son estos ve atrás y haz los pasos correctamente.

  5. Crea el directorio
    /var/mail/vhosts/
    <span style="font-family: Liberation Serif, serif;">y
    un subdirectorio con su dominio remplazando </span>
    <span style="font-family: Liberation Mono, monospace;">example.com</span>
    
    
    mkdir -p /var/mail/vhosts/example.com
    <span style="font-family: Liberation Serif, serif;"><span style="font-size: medium;">Este directorio servira para almacenar el mail enviado por su dominio.</span></span>
  6. Crea el usuario vmail con un usuario y grupo con id de 5000 con este comando. Este usuario sera usado por el servidor para leer el correo electrónico en el servidor.
    
    
    groupadd -g 5000 vmail
    useradd -g vmail -u 5000 vmail -d /var/mail
  7. Cambia el propietario del directorio
    /var/mail/
    <span style="font-family: Liberation Serif, serif;">con
    este comando</span>
    
    
    chown -R vmail:vmail /var/mail
  8. Abre la autenticacion del fichero localizado en
    /etc/dovecot/conf.d/10-auth.conf
    <span style="font-family: Liberation Serif, serif;">y
    desactiva la plain-text authentication descomentando esta linea</span>

    /etc/dovecot/conf.d/10-auth.conf

    
    
    1
    
    
    disable_plaintext_auth = yes

    Configura el

    auth_mechanisms
    <span style="font-family: Liberation Serif, serif;">modificando
    la siguiente linea:</span>

    /etc/dovecot/conf.d/10-auth.conf

    
    
    1
    
    
    auth_mechanisms = plain login
  9. Comenta esta linea que es para el sistema de login/etc/dovecot/conf.d/10-auth.conf
    
    
    1
    
    
    #!include auth-system.conf.ext
  10. Pon disponible la autenticacion descomentando la auth-sql.conf.ext /etc/dovecot/conf.d/10-auth.conf
    
    
    1
    2
    3
    4
    5
    6
    7
    
    
    #!include auth-system.conf.ext
    !include auth-sql.conf.ext
    #!include auth-ldap.conf.ext
    #!include auth-passwdfile.conf.ext
    #!include auth-checkpassword.conf.ext
    #!include auth-vpopmail.conf.ext
    #!include auth-static.conf.ext

    Note

    Aquí tenéis el ejemplo de fichero 10-auth.conf

    Salva los cambios en el fichero

    /etc/dovecot/conf.d/10-auth.conf
  11. Edita el fichero con la información de autenticación. Seguramente contenga estas descomentadas y dejalo tal cual como viene ahí/etc/dovecot/conf.d/auth-sql.conf.ext
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    
    
    passdb {
     
    driver = sql
     
    args = /etc/dovecot/dovecot-sql.conf.ext
    }
    userdb {
     
    driver = static
     
    args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
     
    }

    Salva los cambios en el fichero

    /etc/dovecot/conf.d/auth-sql.conf.ext
  12. Actualiza el fichero con tu conexión a MySQL personalizada, tambien puede ser a otro motor de base de datos aunque en esta guiá no lo hemos hecho. ¿Queréis probar a hacerlo con otro motor?Descomenta y configura la linea del driver a utilizar como se muestra debajo:/etc/dovecot/dovecot-sql.conf.ext
    
    
    1
    
    
    driver = mysql

    Des comenta la liena de conecion y configura la informacion de conexión de MySQL. Usa la clave de Mailuser y cualquier otra configuración personalizada.

    /etc/dovecot/dovecot-sql.conf.ext

    
    
    1
    
    
    connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuserpass

    Descomenta la linea

    default_pass_scheme

    y configurarala

    SHA512-CRYPT

    :

    /etc/dovecot/dovecot-sql.conf.ext

    
    
    1
    
    
    default_pass_scheme = SHA512-CRYPT

    Descomenta la linea y configurala como viene aquí

    /etc/dovecot/dovecot-sql.conf.ext

    
    
    1
    
    
    password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

    Note

    Esta consulta de contraseña vamos a usarla en la dirección de correo listada en la tabla virtual_users como la credencial para una cuenta de correo electrónico. Si desea poder usar el alias como el nombre de usuario en su lugar (enumerado en la tabla virtual_aliases), primero agregue todas las direcciones de correo electrónico primarias a la tabla virtual_aliases (dirigiéndose a sí mismas) y luego use la siguiente línea en / etc / dovecot / dovecot -sql.conf.ext en su lugar:

    password_query = SELECT email as user, password FROM virtual_users WHERE email=(SELECT destination FROM virtual_aliases WHERE source = ‘%u’);

    Note

    Aquí debajo tenéis es un ejemplo de un fichero completo

    dovecot-sql.conf.ext

    Salva los cambios al fichero

    /etc/dovecot/dovecot-sql.conf.ext
  13. Cambia el propietario y grupo de
    /etc/dovecot/

    a vmail y dovecot

    
    
    chown -R vmail:dovecot /etc/dovecot
  14. Cambia los permisos del directorio
    /etc/dovecot/
    
    
    chmod -R o-rwx /etc/dovecot
  15. Abre los sockets del fichero de configuracion localizado en
    /etc/dovecot/conf.d/10-master.conf

    Note

    Aquí hay un ejemplo de un archivo 10-master.conf completo. Hay muchos bloques de código anidados en este archivo, así que preste mucha atención a los corchetes. Probablemente sea mejor si edita línea por línea, en lugar de copiar trozos grandes de código. Si hay un error de sintaxis, Dovecot se bloqueará silenciosamente, pero puede verificar

    /var/log/upstart/dovecot.log

    para ayudarlo a encontrar el error.

  16. Deshabilite IMAP y POP3 sin cifrar estableciendo los puertos de los protocolos en 0, como se muestra a continuación. Asegúrese de que las entradas para port y ssl debajo de las entradas de IMAPS y pop3s estén descomentadas/etc/dovecot/conf.d/10-master.conf
    
    
     
    1
     
    2
     
    3
     
    4
     
    5
     
    6
     
    7
     
    8
     
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    
    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
     
    }
     
    ...
     
    }

    Note

    Deje las versiones seguras sin editar, específicamente los imaps y pop3s, para que sus puertos sigan funcionando. La configuración predeterminada para imaps y pop3s está bien. Opcionalmente, deje las líneas del puerto comentadas, ya que los puertos predeterminados son los estándares 993 y 995.

  17. Deje las versiones seguras sin editar, específicamente los imaps y pop3s, para que sus puertos sigan funcionando. La configuración predeterminada para imaps y pop3s está bien. Opcionalmente, deje las líneas del puerto comentadas, ya que los puertos predeterminados son los estándares 993 y 995.

    Find the

    service lmtp

    section and use the configuration shown below:

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

    
    
     
    1
     
    2
     
    3
     
    4
     
    5
     
    6
     
    7
     
    8
     
    9
    10
    11
    12
    13
    
    
    service lmtp {
     
    unix_listener /var/spool/postfix/private/dovecot-lmtp {
     
    mode = 0600
     
    user = postfix
     
    group = postfix
     
    }
    # Create inet listener only if you can't use the above UNIX socket
    #inet_listener lmtp {
     
    # Avoid making LMTP visible for the entire internet
     
    #address =
     
    #port =
    #}
     
    }

    Localiza la sección y configuralo como viene debajo:

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

    
    
     
    1
     
    2
     
    3
     
    4
     
    5
     
    6
     
    7
     
    8
     
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    
    service auth {
     
    # auth_socket_path points to this userdb socket by default. It's typically
     
    # used by dovecot-lda, doveadm, possibly imap process, etc. Its default
     
    # permissions make it readable only by root, but you may need to relax these
     
    # permissions. Users that have access to this socket are able to get a list
     
    # of all usernames and get results of everyone's userdb lookups.
     
    unix_listener /var/spool/postfix/private/auth {
     
    mode = 0666
     
    user = postfix
     
    group = postfix
     
    }
     
    unix_listener auth-userdb {
     
    mode = 0600
     
    user = vmail
     
    #group =
     
    }
     
    # Postfix smtp-auth
     
    #unix_listener /var/spool/postfix/private/auth {
     
    #  mode = 0666
     
    #}
     
    # Auth process is run as this user.
     
    user = dovecot
    }

    En la seccion de

    service auth-worker
    <span style="font-family: Liberation Serif, serif;">descomenta
    la linea user y configura vmail</span>

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

    
    
    1
    2
    3
    4
    5
    6
    
    
    service auth-worker {
     
    # Auth worker process is run as root by default, so that it can access
     
    # /etc/shadow. If this isn't necessary, the user should be changed to
     
    # $default_internal_user.
     
    user = vmail
    }

    Save the changes to the

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

    file.

  18. Verifica que el certificado Dovecot SSL y la llave exista
    
    
    ls /etc/dovecot/dovecot.pem
    ls /etc/dovecot/private/dovecot.pem

    Note

    Como se indicó anteriormente, estos archivos no se incluyen en Dovecot 2.2.13-7 y versiones posteriores, y no estarán presentes en Debian 8 y en otros sistemas más nuevos, así como tampoco en algunos más antiguos.

    Si utiliza un certificado SSL diferente, cargue el certificado en el servidor y anote su ubicación y la ubicación de la clave.

  19. Abre
    /etc/dovecot/conf.d/10-ssl.conf

    .

    Note

    Aquí esta un ejemplo de un fichero completo 10-ssl.conf

  20. Verifique que la configuración de ssl_cert tenga la ruta de acceso correcta al certificado, y que la configuración de ssl_key tenga la ruta de acceso correcta a la clave. La configuración predeterminada que se muestra utiliza el certificado integrado de Dovecot, por lo que puede dejarlo tal como está si usa el certificado Dovecot. Actualice las rutas en consecuencia si está utilizando un certificado y una clave diferentes./etc/dovecot/conf.d/10-ssl.conf
    
    
    1
    2
    
    
    ssl_cert = &lt;/etc/dovecot/dovecot.pem
    ssl_key = &lt;/etc/dovecot/private/dovecot.pem

    Fuerza a los clientes a usar el cifrado SSL descomentando la linea ssl y configurando en required

    /etc/dovecot/conf.d/10-ssl.conf

    
    
    1
    
    
    ssl = required

    Salva los cambios en el fichero

    /etc/dovecot/conf.d/10-ssl.conf
  21. Finalmente reincia Dovecot
    
    
    service dovecot restart
<span style="font-family: Liberation Serif, serif;">Este
documento es una traducción de <a href="https://www.linode.com/docs/email/postfix/email-with-postfix-dovecot-and-mysql/" rel="nofollow">Email
Postfix and dovecot and MySQL mail server</a></span>
<span style="font-family: Liberation Serif, serif;">Así
que si os apetece ayudarme bien, esto es una buena </span>
<span style="font-family: Liberation Serif, serif;">solución</span>
<span style="font-family: Liberation Serif, serif;">
para montar un servidor de correo electrónico y lo </span>
<span style="font-family: Liberation Serif, serif;">próximo</span>
<span style="font-family: Liberation Serif, serif;">
que pienso probar es </span>
<span style="font-family: Liberation Serif, serif;">el
servidor de correo electrónico Kolab. </span>
<span style="font-family: Liberation Serif, serif;">Más
adelante haré un artículo hablando de Kolab y haré un tutorial de
como configurarlo en un servidor Linux más bien me centro en Ubuntu
16.04 pero lo mismo lo hago en un Debian 9.</span>

Podéis descargar el pdf aquí

<span style="font-family: Liberation Serif, serif;"><b>¿Qué os parece a ustedes que realice un tutorial sobre Kolab?</b></span>
<span style="font-family: Liberation Serif, serif;">,
saludos.</span>

 

 


 

Dejar un comentario