LINUX

Cómo configurar el servidor de correo usando Postfix, MariaDB, Dovecot y Roundcube

Hola a todos, hoy vamos a configurar un servidor de correo usando Postfix, Devcot y MariaDB en Ubuntu 16.04 LTS.

Aquí configuramos Postfix (servidor smtp), Dovecot (servidor imap / pop) y MariaDB para almacenar información sobre dominios y usuarios virtuales.

La tarea del servidor smtp es aceptar correos entrantes y retransmitir correos salientes de usuarios autorizados en el sistema. Mientras que Dovecot permite a los usuarios autorizados acceder a su Bandeja de entrada y leer cualquier correo que haya. Por lo tanto, nuestro enfoque principal en el artículo es configurar un servidor de correo rápido y seguro utilizando usuarios virtuales.

Requisitos previos de configuración

Hay una serie de requisitos previos que deben seguirse antes de pasar a la configuración del servidor de correo. Esto incluye el reenvío de dominio a su servidor y la configuración de una dirección IP estática para su servidor. Abra este archivo ‘/ etc / hostname’ para configurar su nombre de host apropiado.

# vim /etc/hosts
172.25.10.171 ubuntu-16.linoxide.com ubuntu-16

Para utilizar su servidor de correo en una red más amplia, debe configurar correctamente los registros DNS y MX para el dominio de su host. Luego, asegúrese de que el firewall de iptables o cualquier otro firewall externo no esté bloqueando ninguno de los puertos de correo estándar en su servidor (25, 465, 587, 110, 995, 143 y 993).

Después de la configuración del dominio y el nombre de host, ejecute el siguiente comando para actualizar su sistema con las últimas actualizaciones antes de instalar sus otros paquetes requeridos.

# apt-get update

Instalación de paquetes

Ahora instale todos los paquetes necesarios, incluidos ‘Postfix’, ‘Devcot’ y ‘MySQL’ con algunos otros paquetes necesarios para configurar nuestro servidor de correo, haciendo fluir el siguiente comando con las credenciales de usuario root.

# aptitude update && aptitude install apache2 postfix dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql spamassassin clamav clamav-daemon clamav-base mariadb-client mariadb-server php

Una vez que presionó la tecla ‘y’ para continuar, se le pedirá que configure las configuraciones de postfix. Elija ‘Sitio de Internet’ en la configuración de postfix y haga clic en la tecla ‘Aceptar’ para continuar.

Configuraciones de Postfix

A continuación, se le pedirá que escriba el nombre de correo electrónico de su sistema, que se incluirá en sus correos electrónicos.

nombre de correo del sistema

Después de hacer clic en el botón ‘Aceptar’, su sistema procesará durante un tiempo para completar la instalación de todos los paquetes.

Configurar la base de datos MariaDB

Cuando se complete la instalación y el servicio anterior esté habilitado y en ejecución, comenzaremos configurando la base de datos y las tablas para almacenar información sobre las cuentas de correo de Postfix.

Ejecute el siguiente comando para configurar root passowrd en su MariaDB.

# mysql_secure_installation
Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
- Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
... Failed! Not critical, keep moving...
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Ahora conéctese a MariDB y ejecute los siguientes comandos para crear una nueva base de datos y el usuario MySQL y otorgue al nuevo usuario permisos sobre la base de datos recién creada.

# mysql -u root -p
MariaDB [(none)]> create database mailserver;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> GRANT SELECT ON mailserver.* TO 'mailuser'@'127.0.0.1' IDENTIFIED BY '*****';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Ahora crearemos algunas tablas usando los siguientes comandos. Primero ejecute el siguiente comando para los dominios que recibirán correo en nuestro dominio.

CREATE TABLE `virtual_domains` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Para crear nuevas tablas para todas sus direcciones de correo electrónico y contraseñas, utilice la siguiente consulta.

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;

Luego, cree una tabla más para los alias de correo electrónico utilizando la siguiente consulta.

CREAR TABLA `virtual_aliases` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`source` varchar (100) NOT NULL,
`destino` varchar (100) NOT NULL,
CLAVE PRIMARIA (`id`),
LLAVE EXTRANJERA (domain_id) REFERENCIAS virtual_domains (id) ON DELETE CASCADE
) MOTOR = JUEGO DE CARTOS POR DEFECTO InnoDB = utf8;

creando tablas en MariaDB

Hemos creado una base de datos y algunas tablas necesarias, ahora agregaremos algunos datos a MySQL agregando algunos dominios de prueba a la tabla virtual_domains usando la siguiente consulta.

INSERT INTO `mailserver`.`virtual_domains`
(`id` ,`name`)
VALUES
('1', 'test.com'),
('2', 'ubuntu-16.test.com'),
('3', 'ubuntu-16'),
('4', 'localhost.test.com');

Luego, agregue direcciones de correo electrónico a la tabla virtual_users reemplazando los valores de la dirección de correo electrónico con las direcciones que desea configurar en el servidor de correo y actualice los valores de contraseña con las contraseñas seguras que tenga.

INSERT INTO `mailserver`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@test.com'),
('2', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@test.com');

Ejecute la siguiente consulta para insertar los datos en las tablas para la configuración del alias de correo electrónico.

INSERT INTO `mailserver`.`virtual_aliases`
(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', 'alias@test.com', 'email1@test.com');

insertando datos db

Prueba de datos de MariaDB

Después de ingresar toda la información requerida en MariaDB, verifique que los datos estén allí.

Ejecutemos la siguiente consulta para comprobar primero el contenido de la tabla virtual_domains.

MariaDB [mailserver]> SELECT * FROM mailserver.virtual_domains;
+----+--------------------------+
| id | name |
+----+--------------------------+
| 1 | test.com |
| 2 | ubuntu-16.test.com |
| 3 | ubuntu-16 |
| 4 | localhost.test.com |
+----+--------------------------+
4 rows in set (0.00 sec)

Verifique la tabla ‘virtual_users’ y ‘virtual_aliases’ para verificar que las contraseñas con hash deben estar allí usando las siguientes consultas como se muestra.

MariaDB [mailserver]> SELECT * FROM mailserver.virtual_users;
+----+-----------+---------------------------------------------+-----------------------+
| id | domain_id | password | email |
+----+-----------+--------------------+-----------------------+
| 1 | 1 | $6$b4046061316dbf73$eth.RbLdk2Z1ArUti2yYzoF0T8/xz1wbVrrX1RticBNTeKz4wWKj23zj49UOSW95njitEWv65tlketGVvzRz01 | email1@test.com |
| 2 | 1 | $6$a193a0a79bd30c14$RN1HiqeeuwJ2uvjY43VO0vLLj2GFpJpPtOu3rCZH66qVWIlFUcRDg/7gr9cpVuyYSGejXoF7D69YgI/vQPR17. | email2@test.com |
+----+-----------+--------------------------------------------------+-----------------------+
2 rows in set (0.00 sec)
MariaDB [mailserver]> SELECT * FROM mailserver.virtual_aliases;
+----+-----------+----------------+-----------------------+
| id | domain_id | source | destination |
+----+-----------+----------------+-----------------------+
| 1 | 1 | alias@test.com | email1@test.com |
+----+-----------+----------------+-----------------------+
1 row in set (0.00 sec)

Configurar configuraciones de Postfix

Después de la configuración de la base de datos MySQL, ahora configuraremos Postfix para que el servidor pueda aceptar mensajes entrantes para los dominios. Cree una copia del archivo de configuración predeterminado de Postfix en caso de que necesite volver a la configuración predeterminada.

# cp /etc/postfix/main.cf /etc/postfix/main.cf.org

Luego abra el archivo usando el editor vi o vim para que coincida con la siguiente configuración, pero no olvide actualizar su dominio y nombre de host.

# vi /etc/postfix/main.cf
# 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

#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 = ubuntu-16.test.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
#mydestination = test.com, ubuntu-16.test.com, localhost.test.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

Cierre el archivo después de realizar los cambios guardados y luego cree un nuevo archivo para sus dominios virtuales y asegúrese de actualizar estos cambios de acuerdo con su propia configuración.

#vim /etc/postfix/mysql-virtual-mailbox-domains.cf
user = mailuser
password = mailuser_pass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email="%s"

Cree el archivo a continuación y coloque los siguientes contenidos con su contraseña.

# vim /etc/postfix/mysql-virtual-mailbox-maps.cf
user = mailuser
password = mailuser_pass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email="%s"

Guarde y cierre el archivo y ahora cree un nuevo archivo ‘/etc/postfix/mysql-virtual-alias-maps.cf’ e ingrese los siguientes valores como se muestra.

# vi /etc/postfix/mysql-virtual-alias-maps.cf
user = mailuser
password = mailuser_pass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source="%s"

Luego cree el archivo ‘/etc/postfix/mysql-virtual-email2email.cf’ e ingrese los siguientes valores.

# vi /etc/postfix/mysql-virtual-email2email.cf
user = mailuser
password = mailuser_pass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT email FROM virtual_users WHERE email="%s"

Guarde y cierre el archivo y luego ejecute el siguiente comando para reiniciar el servicio postfix.

# service postfix restart

Ejecute el siguiente comando para asegurarse de que Postfix pueda encontrar el primer dominio y debería devolver ‘1’ para tener éxito.

# postmap -q test.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Ahora pruebe Postfix para verificar que puede encontrar los alias ingresando el siguiente comando reemplazando alias@test.com con el alias real que usó.

# postmap -q email1@test.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Debería volver a recibir 1 como salida. Luego, pruebe Postfix para verificar que puede encontrar los alias ingresando el siguiente comando.

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

Esto devolverá la dirección de correo electrónico a la que reenvía el alias como se muestra en la imagen a continuación.

Prueba de configuración de potfix

A continuación configuraremos el archivo ‘/etc/postfix/master.cf’. Antes de realizar cambios, guárdelo primero copie.

# cp /etc/postfix/master.cf /etc/postfix/master.cf.org

A continuación, abra el archivo de configuración para editarlo y descomente las dos líneas que comienzan con ‘envío’ y ‘smtps’ y el bloque de líneas que comienzan con ‘-o’ después de cada una, que debería ser como el siguiente.

# vim /etc/postfix/master.cf

postfix master.cf

Guarde la configuración y luego ejecute el comando a continuación para reiniciar los servicios de postfix, y habrá realizado sus configuraciones de postfix con éxito.

# service postfix restart

Configuración de la configuración de Dovecot

Dovecot permite a los usuarios iniciar sesión y consultar su correo electrónico mediante POP3 e IMAP. Aquí configuraremos Dovecot para obligar a los usuarios a usar SSL cuando se conecten, de modo que sus contraseñas nunca se envíen al servidor en texto sin formato. Comencemos por copiar todas las configuraciones originales antes de realizar cualquier cambio.

root@ubuntu-16:~# cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.org
root@ubuntu-16:~# cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.org
root@ubuntu-16:~# cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.org
root@ubuntu-16:~# cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.org
root@ubuntu-16:~# cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.org
root@ubuntu-16:~# cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.org
# vim /etc/dovecot/dovecot.conf
# Enable installed protocols
!include_try /usr/share/dovecot/protocols.d/*.protocol

dovecont conf

Después de guardar esto, abra el archivo ‘/etc/dovecot/conf.d/10-mail.conf’ para modificar las siguientes variables dentro del archivo de configuración que controla cómo Dovecot interactúa con el sistema de archivos del servidor para almacenar y recuperar mensajes.

# vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/mail/vhosts/%d/%n
mail_privileged_group = mail

Ejecute el siguiente comando para crear la carpeta para el dominio y luego cree el usuario ‘vmail’ con una identificación de usuario y grupo de ‘5000’. Este usuario será el encargado de leer el correo del servidor.

# mkdir -p /var/mail/vhosts/test.com
# groupadd -g 5000 vmail
# useradd -g vmail -u 5000 vmail -d /var/mail

Luego, cambie el propietario de la carpeta ‘/ var / mail /’ y su contenido para que pertenezcan al usuario de vmail.

configuración de Dovcot

Abra el archivo de autenticación de usuario como se muestra a continuación y desactive la autenticación de texto sin formato descomentando la línea de abajo.

#vim /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login

Dentro del mismo archivo, comente la línea de inicio de sesión del usuario del sistema y habilite la autenticación MySQL descomentando la línea ‘auth-sql.conf.ext’ como se muestra.

#!include auth-system.conf.ext
!include auth-sql.conf.ext

Guarde el archivo de configuración y luego edite el archivo ‘/etc/dovecot/conf.d/auth-sql.conf.ext’ con la información de autenticación pegando las siguientes líneas en el archivo como se muestra a continuación.

# vim /etc/dovecot/conf.d/auth-sql.conf.ext

autenticación sql

Después de guardar, actualice el archivo ‘/etc/dovecot/dovecot-sql.conf.ext’ con la información de conexión MySQL personalizada.

# vim /etc/dovecot/dovecot-sql.conf.ext
# Database driver: mysql, pgsql, sqlite
driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuser_pass
password_query = SELECT email as user, password FROM virtual_users WHERE email="%u";

Guarde el archivo y cambie los permisos, propietario y grupo del directorio / etc / dovecot / a vmail y dovecot.

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

Desactive IMAP y POP3 sin cifrar configurando los puertos de los protocolos en 0, como se muestra a continuación. Asegúrese de que las entradas para puerto y ssl debajo de las entradas IMAPS y pop3s no estén comentadas.

service imap-login {
inet_listener imap {
#port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}

service pop3-login {
inet_listener pop3 {
port = 0
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
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 =
#}
}

Busque la sección de autenticación del servicio y configúrela como se muestra.

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
user = dovecot
}

Elimine el comentario de la línea de usuario y configúrelo en vmail en la sección de autenticación del servicio.

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 = root
user = vmail
}

Eso es todo, ahora guarde el archivo de configuración y ejecute el siguiente comando para reiniciar el servicio Dovecot.

# service dovecot restart

Ahora configure cualquier cuenta de prueba en un cliente de correo electrónico para asegurarse de que todo funcione. Proporcione la dirección de correo electrónico completa, incluido su nombre de dominio y la contraseña que agregó a la tabla MariaDB para su dirección de correo electrónico. Luego intente enviar un correo electrónico a esta cuenta desde una cuenta de correo electrónico externa y luego responda. Después de eso, verifique el archivo de registro de correo en /var/log/mail.log para un mensaje entrante y el segundo bloque para un mensaje saliente.

Configurar Roundcube para la interfaz de correo web

Puede usar un cliente de correo electrónico que admita ‘smtp’ y ‘pop / imap’, pero la parte de correo web es completamente opcional.

Ejecute el siguiente comando para instalar Roundcube junto con sus complementos en su servidor Ubuntu 16.04 y presione la tecla ‘Y’ para iniciar el proceso de instalación.

# apt-get install roundcube roundcube-plugins roundcube-plugins-extra

instalación de roundcube

Durante la instalación, se le pedirá que instale y configure una base de datos antes de poder utilizarla. Esto es opcional y seleccionaremos ‘No’ aquí porque ya hemos configurado la base de datos.

configuración de roundcube-core

Después de la instalación, abra su archivo de configuración usando cualquier editor y coloque los siguientes parámetros como se muestra.

# vim /etc/roundcube/config.inc.php
$rcmail_config['default_host'] = 'localhost';
$rcmail_config['imap_cache'] = memcache;
$rcmail_config['messages_cache'] = db

Guarde y cierre el archivo después de realizar los cambios. Luego, cree un host virtual en su servidor web e inicie su navegador web favorito para comenzar a configurar Roundcube. El primer paso de la configuración gráfica de Roundcube es una verificación del entorno. Haga clic en el botón SIGUIENTE en la parte inferior de la página para continuar.

Conclusión

Felicitaciones, hemos configurado con éxito un servidor de correo usando Postfix, MariaDB, Dovecot y Roundcube en Ubuntu 16.04. Si aún no se han creado registros DNS para el servidor de correo, hágalo ahora. Una vez que los registros DNS se hayan propagado, el correo electrónico se entregará a través del nuevo servidor de correo. Ahora puede agregar nuevos dominios, direcciones de correo electrónico y alias para los usuarios simplemente agregando una nueva línea a la tabla MySQL apropiada y disfrutar de la comunicación a través de su servidor de correo Ubuntu recién construido.

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