LINUX

Cómo configurar el servidor de correo Postfix en Ubuntu 16.04 (Dovecot – MySQL)

Generalmente, todos los servidores de correo constan de tres componentes principales: MTA, MDA y MUA. Cada componente juega un papel específico en el proceso de mover y administrar los mensajes de correo electrónico y es importante para garantizar la entrega adecuada de los correos electrónicos. Por lo tanto, configurar un servidor de correo es un proceso difícil que implica la configuración adecuada de estos componentes. La mejor manera es instalar y configurar cada componente individual uno por uno, asegurándose de que cada uno funcione y construyendo gradualmente su servidor de correo.

En este artículo, proporciono las pautas sobre cómo podemos configurar un servidor de correo en un servidor Ubuntu 16.04 con Postix (MTA) y Dovecot (MDA) usando una base de datos externa (MySQL) para administrar usuarios virtuales. En primer lugar, comencemos con los requisitos previos para construir nuestro servidor de correo.

Prerrequisitos

  • Servidor MySQL instalado
  • Un nombre de host completamente calificado
  • Dominio resolviéndose en su servidor

Después de completar nuestros requisitos previos, podemos comenzar a construir nuestro servidor de correo uno por uno.

Instalación de paquetes

Primero, necesitamos actualizar nuestros paquetes de repositorio APT y comenzar con la instalación de los paquetes postfix y dovecot requeridos.

root@ubuntu:~# apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql

postfix1postfix2

Durante la instalación de Postfix, aparecerán ventanas emergentes para la configuración inicial. Necesitamos elegir el «sitio de Internet» y establecer un FQDN como el nombre de correo de nuestro sistema durante la fase de instalación. Esto procede con la instalación de los paquetes requeridos como se muestra a continuación.

Postfix is now set up with a default configuration. If you need to make
changes, edit
/etc/postfix/main.cf (and others) as needed. To view Postfix configuration
values, see postconf(1).

After modifying main.cf, be sure to run '/etc/init.d/postfix reload'.

Running newaliases
Setting up postfix-mysql (3.1.0-3) ...
Processing triggers for libc-bin (2.23-0ubuntu3) ...
Processing triggers for ureadahead (0.100.0-19) ...
Processing triggers for systemd (229-4ubuntu4) ...
Processing triggers for ufw (0.35-0ubuntu2) ...
Processing triggers for dovecot-core (1:2.2.22-1ubuntu2) ..

Cree una base de datos para administrar los usuarios de correo

El siguiente paso es crear una base de datos para administrar los usuarios y dominios de correo electrónico en nuestro servidor de correo. Como dije antes, estamos administrando los usuarios de correo electrónico con esta base de datos MySQL. Podemos instalar MySQL si no está instalado ejecutando este comando apt-get install mysql-server-5.7.

Vamos a crear una base de datos llamada «lnmailserver» con tres tablas como se muestra a continuación:

  • Dominios virtuales: para administrar dominios
  • Usuarios virtuales: para administrar usuarios de correo electrónico
  • Alias ​​virtual: para configurar alias

Creemos nuestras bases de datos con todas estas tablas.

  • Creando una base de datos llamada lnmailserver.
mysql> CREATE DATABASE lnmailserver;
Query OK, 1 row affected (0.00 sec)
  • Crear un usuario de base de datos lnmailuser y otorgar acceso a esta base de datos con una contraseña.
mysql> GRANT SELECT ON lnmailserver.* TO 'lnmailuser'@'127.0.0.1' IDENTIFIED BY 'lnmail123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
  • Cambiar a la base de datos lnmailserver y creando nuestras tres tablas, a saber dominios_virtuales, usuarios_virtuales y alias_virtuales con especificación y formato de tabla.
mysql> USE lnmailserver;
Database changed
mysql> CREATE TABLE `virtual_domains` (
-> `id` INT NOT NULL AUTO_INCREMENT,
-> `name` VARCHAR(50) NOT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE `virtual_users` (
-> `id` INT NOT NULL AUTO_INCREMENT,
-> `domain_id` INT NOT NULL,
-> `password` VARCHAR(106) NOT NULL,
-> `email` VARCHAR(120) 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;
Query OK, 0 rows affected (0.03 sec)
mysql> CREATE TABLE `virtual_aliases` (
-> `id` INT NOT NULL AUTO_INCREMENT,
-> `domain_id` INT 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;
Query OK, 0 rows affected (0.02 sec)
  • Añadiendo los dominios, usuarios y alias a cada una de estas tablas según nuestros requerimientos.
mysql> INSERT INTO `lnmailserver`.`virtual_domains`
-> (`id` ,`name`)
-> VALUES
-> ('1', 'linoxidemail.com'),
-> ('2', 'ubuntu.linoxidemail.com');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> INSERT INTO `lnmailserver`.`virtual_users`
-> (`id`, `domain_id`, `password` , `email`)
-> VALUES
-> ('1', '1', ENCRYPT('blogger123', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'blogger1@linoxidemail.com'),
-> ('2', '1', ENCRYPT('blogger321', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'blogger2@linoxidemail.com');
Query OK, 2 rows affected, 2 warnings (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 2
mysql> INSERT INTO `lnmailserver`.`virtual_aliases`
-> (`id`, `domain_id`, `source`, `destination`)
-> VALUES
-> ('1', '1', 'info@linoxidemail.com', 'blogger1@linoxidemail.com');
Query OK, 1 row affected (0.00 sec)
  • Verificando el contenido de cada tabla
mysql> select * from virtual_domains;
+----+-------------------------+
| id | name |
+----+-------------------------+
| 1 | linoxidemail.com |
| 2 | ubuntu.linoxidemail.com |
+----+-------------------------+
2 rows in set (0.00 sec)
mysql> select * from virtual_users;
+----+-----------+------------------------------------------------------------------------------------------------------------+---------------------------+
| id | domain_id | password | email |
+----+-----------+------------------------------------------------------------------------------------------------------------+---------------------------+
| 1 | 1 | $6$da4aa6fc680940d4$jt1plE8Lvo4hcjdP3N0pNxSC/o1ZsN4mpJ4WCcwk2mSqyY7/2l4ayyI7GcipeTf0uwzk5HnWbjddvv/jGomh41 | blogger1@linoxidemail.com |
| 2 | 1 | $6$36d2dc2e68ab56f6$L2b/D44yuT7qXsw22kTFPfxTbEbUuRDhr0RDoBnRc/q/LGcRF3NsLQCyapXdYKyA2zkSE9MJIXL7nHAbbCmlO. | blogger2@linoxidemail.com |
+----+-----------+------------------------------------------------------------------------------------------------------------+---------------------------+
2 rows in set (0.00 sec)
mysql> select * from virtual_aliases;
+----+-----------+-----------------------+---------------------------+
| id | domain_id | source | destination |
+----+-----------+-----------------------+---------------------------+
| 1 | 1 | info@linoxidemail.com | blogger1@linoxidemail.com |
+----+-----------+-----------------------+---------------------------+
1 row in set (0.00 sec)

mysql > exit

Configuración de Postfix

Nuestro siguiente paso es modificar la configuración de Postfix de acuerdo con nuestro plan de configuración de cómo debemos aceptar las conexiones SMTP. Antes de realizar cambios en la configuración, siempre se recomienda realizar una copia de seguridad del archivo.

root@ubuntu:~# cp -rp /etc/postfix/main.cf /etc/postfix/main.cf-bkp

Ahora podemos abrir el archivo y realizar los siguientes cambios.

  • Modifique las siguientes entradas para habilitar la compatibilidad con TLS para que los usuarios se conecten, especifique el certificado SSL que se utiliza para asegurar la conexión.
This section is modified from:

#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

To :

smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem
smtpd_tls_key_file=/etc/ssl/private/dovecot.key
smtpd_use_tls = yes
smtpd_tls_auth_only = yes

Estoy usando certificados SSL gratuitos de Dovecot que se especifican aquí. Podemos generar certificados SSL autofirmados de Dovecot con el siguiente comando. Si tiene un certificado SSL válido para su nombre de host, puede especificarlo en su lugar.

openssl req -new -x509 -days 1000 -nodes -out "/etc/ssl/certs/dovecot.pem" -keyout "/etc/ssl/private/dovecot.pem"
  • Necesitamos agregar estos parámetros TLS a la configuración de Postfix, lo que hace que Postfix use Dovecot para autenticación e inicialización de conexiones.
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
  • Necesitamos comentar las entradas predeterminadas de «mydestination» y actualizarlas para usar solo «localhost».
mydestination = localhost
  • Confirme la parte myhostname, ya sea que esté configurada correctamente como nuestro nombre de host FQDN.
root@ubuntu:~# grep myhostname /etc/postfix/main.cf
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
myhostname = ubuntu.linoxidemail.com
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

Ahora necesitamos crear estos archivos mencionados anteriormente uno por uno. Consulte los detalles de mi archivo a continuación:

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

root@ubuntu:~# cat /etc/postfix/mysql-virtual-mailbox-domains.cf
user = lnmailuser
password = lnmail123
hosts = 127.0.0.1
dbname = lnmailserver
query = SELECT 1 FROM virtual_domains WHERE name="%s"
root@ubuntu:~#

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

root@ubuntu:~# cat /etc/postfix/mysql-virtual-mailbox-maps.cf
user = lnmailuser
password = lnmail123
hosts = 127.0.0.1
dbname = lnmailserver
query = SELECT 1 FROM virtual_users WHERE email="%s"
root@ubuntu:~#

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

root@ubuntu:~# cat /etc/postfix/mysql-virtual-alias-maps.cf
user = lnmailuser
password = lnmail123
hosts = 127.0.0.1
dbname = lnmailserver
query = SELECT destination FROM virtual_aliases WHERE source="%s"

Estos archivos describen cómo Postfix se conecta con la base de datos externa. Necesitamos reiniciar Postfix después de realizar estos cambios.

root@ubuntu:~# service postfix restart

Necesitamos ejecutar los siguientes comandos para confirmar la conectividad y verificar si Postfix puede obtener la información requerida de la base de datos.

  • Para comprobar si Postfix encuentra su dominio en la base de datos, podemos ejecutar esto. Esto debería devolver ‘1’ si el intento es exitoso.
root@ubuntu:/etc/ssl/certs# postmap -q linoxidemail.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
1
  • Para verificar si Postfix encuentra su dirección de correo electrónico requerida en la base de datos, podemos ejecutar esto. Esto también debería devolver ‘1’ si funciona correctamente.
root@ubuntu:/etc/ssl/certs# postmap -q blogger1@linoxidemail.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
1
  • Para comprobar si Posfix encuentra su reenviador de correo electrónico en la base de datos, podemos ejecutar esto. Esto debería devolver su reenviador de correo electrónico configurado si el intento es exitoso.
root@ubuntu:/etc/ssl/certs# postmap -q info@linoxidemail.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf
blogger1@linoxidemail.com

Nota: Puede conectarse de forma segura con sus clientes de correo electrónico utilizando Postfix en el puerto 587, puede abrir el puerto descomentando la siguiente parte en la configuración maestra de Postfix: /etc/postfix/master.cf.

postfixmaster

Debe reiniciar Postfix después de realizar cambios en la configuración. Al usar el comando telnet, puede confirmar si el puerto está abierto.

Configuración de Dovecot

Nuestro siguiente paso es configurar nuestro MDA para permitir que los protocolos POP3 o IMAP y otras opciones de configuración se conecten a una base de datos externa y Postfix. Principalmente estamos modificando los siguientes archivos.

/etc/dovecot/dovecot.conf
/etc/dovecot/conf.d/10-mail.conf
/etc/dovecot/conf.d/10-auth.conf
/etc/dovecot/conf.d/auth-sql.conf.ext
/etc/dovecot/dovecot-sql.conf.ext
/etc/dovecot/conf.d/10-master.conf
/etc/dovecot/conf.d/10-ssl.conf

Siempre se recomienda realizar una copia de seguridad de estos archivos antes de realizar cambios en la configuración. Podemos modificar cada archivo uno por uno.

Modificación del archivo de configuración principal de dovecot: /etc/dovecot/dovecot.conf

  • La siguiente configuración no está comentada de forma predeterminada. Pero debemos asegurarnos de que no esté comentado.
!include conf.d/*.conf
  • Podemos habilitar todos los protocolos requeridos en esta directiva. Si necesita habilitar POP3, podemos agregar pop3 a esta línea y también asegurarnos de instalar los paquetes de dovecot requeridos «dovecot-pop3d» para habilitar eso.
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp

Modificación del archivo de configuración de Dovecot Mail: /etc/dovecot/conf.d/10-mail.conf

  • Necesitamos encontrar el siguiente parámetro «mail_location» en la configuración y actualizar con nuestra ruta de almacenamiento de correo. Tengo mis carpetas de correo ubicadas dentro de la carpeta «/ var / mail / vhosts /». Por lo tanto, modifiqué la ruta del archivo de la siguiente manera:
mail_location = maildir:/var/mail/vhosts/%d/%n
  • Necesitamos configurar el «mail_privileged_group«parámetro para»correo«.
mail_privileged_group = mail

Una vez hecho esto, debemos asegurarnos de que hemos establecido la propiedad y los permisos adecuados para nuestras carpetas de correo. Cree las carpetas de correo para cada dominio que hemos registrado en la tabla MySQL dentro de esta carpeta «/ var / mail / vhosts» y establezca las propiedades / permisos adecuados.

root@ubuntu:~# ls -ld /var/mail
drwxrwsr-x 2 root mail 4096 Apr 21 16:56 /var/mail
root@ubuntu:~# mkdir -p /var/mail/vhosts/linoxidemail.com

Created a separate user/group named "vmail" with an id 5000 and changed the mail folders ownerships to that.
root@ubuntu:~# groupadd -g 5000 vmail
root@ubuntu:~# useradd -g vmail -u 5000 vmail -d /var/mail
root@ubuntu:~# chown -R vmail:vmail /var/mail

Modificación del archivo de autenticación de Dovecot: /etc/dovecot/conf.d/10-auth.conf

  • Deshabilite la autenticación de texto sin formato para garantizar la seguridad modificando el siguiente parámetro a «sí».
disable_plaintext_auth = yes
  • Modifique el parámetro «auth_mechanisms» como se muestra a continuación:
auth_mechanisms = plain login
  • Necesitamos comentar la línea mencionada y habilitar la autenticación MySQL descomentando la línea auth-sql.conf.ext como se muestra a continuación:
#!include auth-system.conf.ext
!include auth-sql.conf.ext

Modificación del archivo SQL de autenticación: /etc/dovecot/conf.d/auth-sql.conf.ext

Asegúrese de que su archivo de autenticación MySQL tenga este aspecto.

sqlauth

Modificación del archivo de configuración de Dovecot + MySQL: /etc/dovecot/dovecot-sql.conf.ext

  • Necesitamos descomentar el parámetro «controlador» y configurarlo en MySQL como se muestra a continuación:
driver = mysql
  • Modifique y establezca los parámetros de conexión según el nombre y el usuario de nuestra base de datos.
connect = host=127.0.0.1 dbname=lnmailserver user=lnmailuser password=lnmail123
  • Modifique default_pass_scheme a SHA-512 y la línea password_query como se muestra a continuación:
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM virtual_users WHERE email="%u";

Tenga en cuenta: establezca permisos en el directorio / etc / dovecot para que el usuario de vmail pueda usarlo.

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

Modificación del archivo de configuración de Dovecot Master: /etc/dovecot/conf.d/10-master.conf

Estamos modificando cuatro secciones en este archivo de configuración. Sección IMAP, sección de transferencia de correo local, sección de autenticación y última sección del proceso de trabajo de autenticación. Consulte las capturas de pantalla de cada sección a continuación para ver las modificaciones:

palomar-imap

palomar-lmtp

servi_auth

dovecto_suthorker

Modificación de la configuración de SSL: /etc/dovecot/conf.d/10-ssl.conf

Estamos modificando esta sección para habilitar SSL para las conexiones entrantes / salientes. Estos ajustes de configuración son opcionales. Pero los recomendaría para mayor seguridad.

  • Cambie el parámetro SSL a obligatorio
ssl = required
  • Especifique el certificado SSL y la ubicación del archivo de claves para nuestra configuración. Puede ver la captura de pantalla para obtener más detalles.

ssl-palomar

Debe reiniciar Dovecot después de todas estas modificaciones.

Eso es todo 🙂 Hemos completado la configuración de nuestro servidor de correo. ¡Viva! Puede acceder a su cuenta de correo electrónico utilizando su nombre de usuario y contraseña en cualquiera de sus clientes de correo electrónico preferidos. Pude acceder con éxito a mi cuenta de correo electrónico usando estas configuraciones a continuación:

emailcientconfig

Espero que hayas disfrutado leyendo este artículo. Recomendaría sus valiosas sugerencias y comentarios al respecto.
¡Que tenga un lindo día!

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar