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
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.
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.
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:
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.
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:
Espero que hayas disfrutado leyendo este artículo. Recomendaría sus valiosas sugerencias y comentarios al respecto.
¡Que tenga un lindo día!