Almeria
+34 691 24 53 78

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

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; Verifica que ves la siguiente salida:
+----+-----------------------+
| id | name                  |
+----+-----------------------+ |  1 | example.com           | |  2 | hostname.example.com  | |  3 | hostname              | |  4 | localhost.example.com | +----+-----------------------+ 4 rows in set (0.00 sec)
Chequea la tabla virtual_users SELECT * FROM mailserver.virtual_users; Verifica que la siguiente salida, las claves hashes son largas como aparece aquí debajo
+----+-----------+-------------------------------------+--------------------+ | 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)
Chequea la tabla virtual_aliases 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

Postfix

Lo
siguiente es que el servidor Postfix pueda aceptar mensajes de salida
de nuestros dominios.

  1. 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.
    cp
    /
    etc/postfix/main.cf

    /
    etc/postfix/main.cf.orig
  2. Edita
    el fichero /
    etc/postfix/main.cf
    a los siguientes cambios como viene aquí en este fichero.

    # 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. 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.
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
    y
    pon los siguientes valores. Haz los cambios necesarios para la clave
    de mailuser.
    /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
    y
    pon los siguientes valores, cambia la contraseña del usuario
    mailuser por la suya.
    /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 y
    reincia el servidor postfix
    .

    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
    y
    restringe los permisos solo para el correpondiente grupo, o sea que
    este en chown -R root:root
    root@ubuntu:/etc/postfix#
    ls -la

total
184

drwxr-x---
3 root root 4096 May 30 13:26 .

drwxr-xr-x
155 root root 12288 May 20 12:10 ..

-rw-r-----
1 root root 153 Mar 28 2017 dynamicmaps.cf

-rw-------
1 root root 887 Aug 28 2017 mail.private

-rw-------
1 root root 315 Aug 28 2017 mail.txt

-rw-r--r--
1 postfix root 2787 May 24 10:48 main.cf

-rw-r-----
1 root root 1413 Mar 28 2017 main.cf.orig

-rw-r--r--
1 root root 27126 Nov 3 2017 main.cf.proto

-rw-r--r--
1 root root 7159 May 19 13:55 master.cf

-rw-r-----
1 root root 6068 Mar 28 2017 master.cf.orig

-rw-r--r--
1 root root 6068 Nov 3 2017 master.cf.proto

-rw-r-----
1 root root 6063 Jan 20 05:57 master.cf.save

-rw-r-----
1 root root 143 Mar 28 2017 mysql-virtual-alias-maps.cf

-rw-r-----
1 root root 133 Mar 28 2017 mysql-virtual-email2email.cf

-rw-r-----
1 root root 130 Mar 28 2017 mysql-virtual-mailbox-domains.cf

-rw-r-----
1 root root 129 Mar 28 2017 mysql-virtual-mailbox-maps.cf

-rw-r-----
1 root root 21233 Apr 13 2016 postfix-files

-rwxr-x---
1 root root 9344 Apr 13 2016 postfix-script

-rwxr-x---
1 root root 29446 Apr 13 2016 post-install

drwxr-x---
2 root root 4096 Apr 13 2016 sasl

 

chmod -R o-rwx /etc/postfix

Reinicia Postfix:

service postfix restart ¡Felicidades! Has configurado Postfix

 

Dovecot

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.

  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&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::<name>". 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.
    Este
    fichero controla como Dovecot interactuá con el sistema de archivos
    del servidor para almacenar y recuperar mensajes.

     

    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/
    y
    un subdirectorio con su dominio remplazando
    example.com

    mkdir -p /var/mail/vhosts/example.com Este directorio servira para almacenar el mail enviado por su dominio.
  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/
    con
    este comando

    chown -R vmail:vmail /var/mail
  8. Abre la autenticacion del fichero localizado en /etc/dovecot/conf.d/10-auth.conf y
    desactiva la plain-text authentication descomentando esta linea
    /etc/dovecot/conf.d/10-auth.conf

    1
    disable_plaintext_auth = yes

    Configura el auth_mechanisms modificando
    la siguiente linea:

    /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
    descomenta
    la linea user y configura vmail

    /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 = </etc/dovecot/dovecot.pem ssl_key = </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

Este
documento es una traducción de Email
Postfix and dovecot and MySQL mail server

Así
que si os apetece ayudarme bien, esto es una buena
solución
para montar un servidor de correo electrónico y lo
próximo
que pienso probar es
el
servidor de correo electrónico Kolab.

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.

Podéis descargar el pdf aquí

¿Qué os parece a ustedes que realice un tutorial sobre Kolab?,
saludos.

 

 


 

0

Leave a comment