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.
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.
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;
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');
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.
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
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
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.
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
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
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.
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.