Búsqueda de sitios web

Cómo configurar el servidor de correo Postfix y Dovecot con base de datos (MariaDB) de forma segura - Parte 1


En esta serie de tres artículos analizaremos cómo configurar un servidor de correo Postfix con protección antivirus y antispam en un sistema CentOS 7. Tenga en cuenta que estas instrucciones también funcionan en otras distribuciones como RHEL/Fedora y Debian/Ubuntu.

Nuestro plan consiste en almacenar cuentas de correo electrónico y alias en una base de datos MariaDB que para nuestra comodidad será administrada a través de phpMyAdmin.

Si elige no instalar phpMyAdmin, o está tratando con un servidor solo CLI, también le proporcionaremos el código equivalente para crear las tablas de la base de datos que se utilizarán en esta serie.

Dado que mantener un servidor de correo en funcionamiento es una de las tareas esenciales que generalmente se asignan a los administradores e ingenieros de sistemas, también brindaremos algunos consejos para ejecutar de manera eficiente este servicio crítico en un entorno de producción.

Cree registros A y MX para dominio en DNS

Antes de continuar, hay algunos requisitos previos que se deben cumplir:

1. Necesitará un dominio válido registrado a través de un registrador de dominios. En esta serie usaremos www.linuxnewz.com, que se registró a través de GoDaddy.

2. Dicho dominio debe apuntar a la IP externa de su VPS o proveedor de alojamiento en la nube. Si aloja su servidor de correo usted mismo, puede utilizar el servicio ofrecido por FreeDNS (requiere registro).

En cualquier caso, también debe configurar los registros A y MX para su dominio (puede obtener más información sobre los registros MX en estas preguntas frecuentes de Google).

Una vez agregados, puede buscarlos usando una herramienta en línea como MxToolbox o ViewDNS para asegurarse de que estén configurados correctamente.

Importante: tenga en cuenta que puede pasar un tiempo (1-2 días) hasta que los registros DNS se propaguen y su dominio esté disponible. Mientras tanto, podrás acceder a tu VPS a través de su dirección IP para realizar las tareas que te indicamos a continuación.

3. Configure el FQDN (Nombre de dominio completo) de su VPS:

hostnamectl set-hostname yourhostname

para configurar el nombre de host del sistema, luego edite /etc/hosts de la siguiente manera (reemplace AAA.BBB.CCC.DDD, su nombre de host y tudominio con la IP pública de tu servidor, tu nombre de host y tu dominio registrado):

AAA.BBB.CCC.DDD yourhostname.yourdomain.com       yourhostname

donde yourhostname es el nombre de host del sistema que se configuró previamente usando el comando hostnamectl.

Instalación de los paquetes de software necesarios

4. Para instalar los paquetes de software necesarios como Apache, Postfix, Dovecot, MariaDB, PhpMyAdmin, SpamAssassin, ClamAV, etc., debe habilitar el repositorio EPEL:

yum install epel-release

5. Una vez que haya seguido los pasos anteriores, instale los paquetes necesarios:

En sistemas basados en CentOS:

yum update && yum install httpd httpd-devel postfix dovecot dovecot-mysql spamassassin clamav clamav-scanner clamav-scanner-systemd clamav-data clamav-update mariadb mariadb-server php phpMyAdmin

En Debian y derivados:

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 php5 phpMyAdmin

6. Inicie y habilite los servidores web y de base de datos:

En sistemas basados en CentOS:

systemctl enable httpd mariadb
systemctl start httpd mariadb

En Debian y derivados:

systemctl enable apache2 mariadb
systemctl start apache2 mariadb

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

Creación de base de datos de cuentas de correo Postfix

Para simplificar, usaremos phpMyAdmin, una herramienta destinada a manejar la administración de bases de datos MySQL/MariaDB a través de una interfaz web, para crear y administrar la base de datos de correo electrónico.

Sin embargo, para poder iniciar sesión y utilizar esta herramienta, debemos seguir estos pasos:

7. Habilite la cuenta MariaDB (puede hacerlo ejecutando la utilidad mysql_secure_installation desde la línea de comando, asignando una contraseña para el usuario root y establecer la configuración predeterminada propuesta por la herramienta EXCEPTO “¿No permitir el inicio de sesión root de forma remota?“:

o de lo contrario crear un nuevo usuario de base de datos:

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

Apache seguro con un certificado

8. Dado que usaremos una aplicación web para administrar la base de datos del servidor de correo electrónico, debemos tomar las precauciones necesarias para proteger las conexiones al servidor. De lo contrario, nuestras credenciales phpMyAdmin viajarán en texto plano por la red.

Para configurar Seguridad de la capa de transporte (TLS) en su servidor, siga los pasos descritos en la Parte 8 de la serie RHCE: Implementación de HTTPS a través de TLS utilizando Network Security Service (NSS) para Apache antes de continuar.

Nota: si no tiene acceso a la consola del servidor, deberá encontrar otra forma de generar la entropía necesaria durante la creación de la clave. En ese caso, quizás quieras considerar instalar rng-tools y ejecutar rngd -r /dev/urandom.

Configurar y proteger PhpMyAdmin

9. En /etc/httpd/conf.d/phpMyAdmin.conf (CentOS) o /etc/phpmyadmin/apache. conf (Debian y derivados), localice todas las apariciones de las siguientes líneas y asegúrese de que apunten a la IP pública de su servidor:

Require ip AAA.BBB.CCC.DDD
Allow from AAA.BBB.CCC.DDD

Además, deshabilite los alias predeterminados y cree uno nuevo para acceder a su página de inicio de sesión de phpMyAdmin. Esto ayudará a proteger el sitio contra bots y atacantes externos que tienen como objetivo www.yourdomain.com/phpmyadmin o www.yourdomain.com/phpMyAdmin.

#Alias /phpMyAdmin /usr/share/phpMyAdmin
#Alias /phpmyadmin /usr/share/phpMyAdmin
Alias /managedb /usr/share/phpMyAdmin

Además, agregue la siguiente línea dentro de :

Require all granted

Crear Apache VirtualHost para el dominio

10. Asegúrese de que su dominio esté agregado a los sitios habilitados. Cree /etc/httpd/sites-available/linuxnewz.com.conf (CentOS) o /etc/apache2/sites-available/linuxnewz.com (Debian) con el siguiente contenido (asegúrese de que DocumentRoot, sites-available y sites-enabled > existen directorios):

<VirtualHost *:80>
    ServerName www.linuxnewz.com
    ServerAlias linuxnewz.com
    DocumentRoot /var/www/linuxnewz.com/public_html
    ErrorLog /var/www/linuxnewz.com/error.log
    CustomLog /var/www/linuxnewz.com/requests.log combined
    Options Indexes FollowSymLinks
</VirtualHost>

y el enlace simbólico:

En CentOS:
ln -s /etc/httpd/sites-available/linuxnewz.com.conf /etc/httpd/sites-enabled/linuxnewz.com.conf
En Debian:
a2ensite linuxnewz.com

y tu estas listo.

Configurar la base de datos de correo electrónico Postfix

11. Ahora puede abrir su interfaz phpMyAdmin en https://www.yourdomain.com/managedb (tenga en cuenta que managedb< es el alias que configuramos anteriormente para el directorio de datos de phpMyAdmin).

Si eso no funciona (lo que puede deberse a un retraso en la propagación o falta de configuración de los registros DNS) por el momento puedes intentar usar la dirección IP pública de tu servidor en lugar de www.tudominio.com :

En cualquier caso, después de iniciar sesión en phpMyAdmin verá la siguiente interfaz. Haga clic en Nuevo en la sección izquierda:

Ingrese un nombre para la base de datos (EmailServer_db en este caso, no es necesario seleccionar una intercalación) y haga clic en Crear:

12. En la siguiente pantalla, elija un nombre para la primera tabla (donde almacenaremos los dominios que administrará este servidor de correo.

Tenga en cuenta que incluso cuando en esta serie solo administraremos un dominio, puede agregar más más adelante) y la cantidad de campos que desee en él, luego haga clic en Ir. Se le pedirá que nombre y configure esos dos campos, donde podrá proceder de forma segura como se indica en las siguientes imágenes:

Cuando elige PRIMARY en Índice para DomainId, acepte los valores predeterminados y haga clic en Ir:

Alternativamente, puede hacer clic en Vista previa de SQL para ver el código debajo del capó:

CREATE TABLE `EmailServer_db`.`Domains_tbl` ( `DomainId` INT NOT NULL AUTO_INCREMENT , `DomainName` VARCHAR(50) NOT NULL , PRIMARY KEY (`DomainId`)) ENGINE = InnoDB;

Cuando esté listo, haga clic en Guardar para confirmar los cambios. Luego podrá hacer clic en Nuevo en EmailServer_db para continuar creando tablas:

13. Ahora sigue estos pasos para crear el resto de las tablas. Haga clic en la pestaña SQL e ingrese el código indicado para cada objeto de la base de datos.

Tenga en cuenta que en este caso optamos por crear la tabla mediante una consulta SQL debido a las relaciones que se deben establecer entre las diferentes tablas:

Usuarios_tbl

CREATE TABLE `Users_tbl` ( 
    `UserId` INT NOT NULL AUTO_INCREMENT,  
    `DomainId` INT NOT NULL,  
    `password` VARCHAR(100) NOT NULL,  
    `Email` VARCHAR(100) NOT NULL,  
    PRIMARY KEY (`UserId`),  
    UNIQUE KEY `Email` (`Email`),  
    FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE 
) ENGINE = InnoDB; 

Debería recibir un mensaje de confirmación (si no, phpMyAdmin le solicitará errores de sintaxis):

Alias_tbl

CREATE TABLE `Alias_tbl` (
    `AliasId` INT NOT NULL AUTO_INCREMENT, 
    `DomainId` INT NOT NULL, 
    `Source` varchar(100) NOT NULL, 
    `Destination` varchar(100) NOT NULL, 
    PRIMARY KEY (`AliasId`), 
    FOREIGN KEY (DomainId) REFERENCES Domains_tbl(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;

(Haga clic en Ir en la parte inferior para continuar con la creación de la tabla).

Hasta este punto, debería tener la siguiente estructura de base de datos:

Lo que significa que está listo para comenzar a agregar algunos registros en la siguiente sección.

Creación de un dominio, usuarios y alias de Postfix

14. Ahora insertaremos los siguientes registros en las tres tablas. Las contraseñas de [email  y [email  se cifrarán y la declaración INSERT INTO Users_tbl.

Además, tenga en cuenta que los correos electrónicos enviados a [email  serán redirigidos a [email :

INSERT INTO Domains_tbl (DomainName) VALUES ('linuxnewz.com');  
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForFirstEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email ');  
INSERT INTO Users_tbl (DomainId, password, Email) VALUES (1, ENCRYPT('PasswordForSecondEmailAccount', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), '[email ');  
INSERT INTO Alias_tbl (DomainId, Source, Destination) VALUES (1, '[email ', '[email ');

Habiendo agregado nuestro dominio, dos cuentas de usuario y un alias de correo electrónico, estamos listos para continuar configurando nuestro servidor de correo electrónico en el próximo artículo de esta serie, donde configuraremos Dovecot y Postfix . .

Resumen

En este artículo, enumeramos los paquetes necesarios para instalar un servidor de correo electrónico Postfix en un VPS CentOS 7 y explicamos cómo administrar la base de datos subyacente usando phpMyAdmin.

En los próximos dos artículos revisaremos la configuración de los dos programas que se encargarán de la distribución del correo electrónico de nuestro dominio (Parte 2) y le mostraremos cómo agregar protección contra spam y virus (Parte 3) para su servidor.

Hasta entonces, no dude en contactarnos mediante el siguiente formulario si tiene alguna pregunta o comentario.