Servicios / agosto 5, 2019

Cómo configurar un servidor de correo seguro con Postfix, Dovecot y MariaDB [Parte 1]

En los siguientes 4 artículos veremos como configurar un servidor de correo seguro con Postfix y Dovecot. Además almacenaremos los dominios, los usuarios y los alias en una base de datos con MariaDB.

Durante el proceso también instalaremos RoundCube para poder enviar e-mails desde el cliente web. Tanto RoundCube como el servidor de correo completo estará configurado bajo SSL.

Todo el proceso lo realizaremos bajo Debian 10, pero la configuración es muy similar en otras distribuciones como Ubuntu o CentOS.

Configuración DNS y hostname

Lo primero que haremos será configurar nuestro dominio para que funcione bajo un servidor de correo. Para ello necesitamos configurar registros tipo A, MX y SPF.

Una configuración similar a esta:

Resultado de dnsdumpster.com

Luego configuramos el FQDN en nuestro servidor:

hostnamectl set-hostname dominio.com

Luego modificaremos el fichero /etc/hosts y añadiremos la IP de nuestro servidor y luego el dominio principal:

[IP_Servidor] dominio.com mail.dominio.com mail

Instalación y configuración de Apache

Deberemos de instalar y configurar correctamente un servidor web para poder alojar diferentes aplicaciones web que vamos a tener que instalar (phpmyadmin y roundcube), para ello instalamos Apache y otros paquetes necesarios:

apt install apache2 certbot python-certbot-apache mariadb-client mariadb-server php7.3 php7.3-mysql php7.3-mbstring

Habilitamos los servicios en el arranque:

systemctl enable apache2 mariadb
systemctl start apache2 mariadb

Luego creamos un fichero de configuración de Apache para phpMyAdmin y Roundcube que pondremos en dos VirtualHost diferentes, por lo que tendremos que crear dos ficheros en /etc/apache2/sites-available con el siguiente contenido:

<VirtualHost *:80>
        ServerName dominio.com
        ServerAlias www.dominio.com
        DocumentRoot /var/www/html/vhosts/dominio.com/www

        ErrorLog /var/www/html/vhosts/dominio.com/logs/error.log
        LogLevel warn
        CustomLog /var/www/html/vhosts/dominio.com/logs/access.log combined
        Options Indexes FollowSymLinks
</VirtualHost>

En mi caso, crearé un subdominio para phpMyAdmin (db.dominio.com) y otro para RoundCube (webmail.dominio.com).

Creamos los directorios necesarios y ponemos los permisos correctos:

mkdir -p /var/www/html/vhosts/db.dominio.com/{www,logs}
mkdir -p /var/www/html/vhosts/webmail.dominio.com/{www,logs}
chown www-data.www-data -R /var/www/html/vhosts/db.dominio.com
chown www-data.www-data -R /var/www/html/vhosts/webmail.dominio.com

Habilitamos el dominio y reiniciamos Apache:

a2ensite phpmyadmin.conf roundcube.conf
systemctl restart apache2

Luego con Certbot agregamos el certificado para db.dominio.com y webmail.dominio.com

certbot

Instalación de phpMyAdmin

Como que en Debian 10 han eliminado el paquete phpMyAdmin de repositorios, tendremos que descargarlo e instalarlo manualmente.

Para realizar esta instalación deberemos de seguir las instrucciones de este otro tutorial donde explica como configurar phpMyAdmin en un VirtualHost.

Creación de la base de datos para las cuentas de correo de Postfix

Para simplificar, usaremos phpMyAdmin, una herramienta destinada a gestionar y administración de bases de datos MySQL/MariaDB a través de una interfaz web.

Sin embargo, para iniciar sesión y utilizar esta herramienta, debemos de crear un usuario y habilitar el inicio de sesión remotamente.

Para ello debemos de ejecutar lo siguiente y dejaremos la configuración por defecto excepto la opción «Disallow root login remotely«:

Iniciamos sesión con root en MySQL y creamos el usuario y le damos permisos:

mysql -u root -p

MariaDB > CREATE USER 'dba'@'localhost' IDENTIFIED BY 'YourPasswordHere';
MariaDB > GRANT ALL PRIVILEGES ON * . * TO 'dba'@'localhost';
MariaDB > FLUSH PRIVILEGES;

Configuración de la base de datos

Ahora deberemos de acceder a phpMyAdmin usando el subdominio que hemos creado anteriormente http://db.dominio.com y deberemos de acceder con el usuario dba:

Después de iniciar sesión en phpMyAdmin, tendremos que crear la base de datos:

Haremos clic en Nueva y luego crearemos la base de datos bajo el nombre EmailServer_db. En el desplegable, pondremos la opción Collation (cotejamiento).

Tras seleccionar la Base de Datos que hemos creado iremos a la pestaña SQL y añadiremos lo siguiente para crear las tablas necesarias:

CREATE TABLE `Alias_tbl` (
  `AliasId` int(11) NOT NULL,
  `DomainId` int(11) NOT NULL,
  `Source` varchar(100) NOT NULL,
  `Destination` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `Domains_tbl` (
  `DomainId` int(11) NOT NULL,
  `DomainName` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `Users_tbl` (
  `UserId` int(11) NOT NULL,
  `DomainId` int(11) NOT NULL,
  `password` longtext NOT NULL,
  `Email` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `Alias_tbl`
  ADD PRIMARY KEY (`AliasId`),
  ADD KEY `DomainId` (`DomainId`);

ALTER TABLE `Domains_tbl`
  ADD PRIMARY KEY (`DomainId`);

ALTER TABLE `Users_tbl`
  ADD PRIMARY KEY (`UserId`),
  ADD UNIQUE KEY `Email` (`Email`),
  ADD KEY `DomainId` (`DomainId`);

ALTER TABLE `Alias_tbl`
  MODIFY `AliasId` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;

ALTER TABLE `Domains_tbl`
  MODIFY `DomainId` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

ALTER TABLE `Users_tbl`
  MODIFY `UserId` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

ALTER TABLE `Alias_tbl`
  ADD CONSTRAINT `Alias_tbl_ibfk_1` FOREIGN KEY (`DomainId`) REFERENCES `Domains_tbl` (`DomainId`) ON DELETE CASCADE;

ALTER TABLE `Users_tbl`
  ADD CONSTRAINT `Users_tbl_ibfk_1` FOREIGN KEY (`DomainId`) REFERENCES `Domains_tbl` (`DomainId`) ON DELETE CASCADE;

Al final, tenemos que tener algo parecido a esto:

Creando dominios, usuarios y alias en la Base de Datos de Postfix

Ahora que ya tenemos la base de datos creada con todas las tablas necesarias, deberemos de agregar los datos.

Para ello tendremos que ejecutar las siguientes consultas SQL. Para añadir un dominio:

INSERT INTO Domains_tbl (DomainName) VALUES ('dominio.com');

Para añadir cuentas de correo:

INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForFirstEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'admin@dominio.com');  
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForSecondEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'postmaster@dominio.com');  

Para añadir alias en las cuentas de correo:

INSERT INTO Alias_tbl (DomainId, Source, Destination) VALUES (1, 'superadmin@dominio.com', 'admin@dominio.com');

2 comentarios “Cómo configurar un servidor de correo seguro con Postfix, Dovecot y MariaDB [Parte 1]”

avatar
500
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
T3rr0rz0n3Luis Recent comment authors
  Suscribirte  
más nuevos más viejos más votados
Notificarme
Luis
Invitado
Luis

Bueno, por más que intente seguir la guía no pude continuar, en definitiva es solo para expertos del tema.
Quería intentar un servidor de correos seguro en un VPS para mi correo personal. Compre un dominio con godaddy y esta en awardspace para los correos, me gustaría tenerlo en un VPS. Trate de entender sobre A, MX y SPF, entendí poco. Llegue a la parte de crear dos ficheros , ingrese a la guía de VirtualHost me perdí igual db.dominio.com.conf o crear phpmyadmin.conf aplicar a2ensite

Utilizamos cookies propias y de terceros para mejorar nuestros servicios. Si continúa navegando, consideramos que acepta su uso. Doble clic sobre aquí para cerrar.