Com configurar el servidor de correu Postfix i Dovecot amb la base de dades (MariaDB) de manera segura - Part 1


En aquesta sèrie de 3 articles parlarem de com configurar un servidor de correu Postfix amb protecció antivirus i antispam en una caixa CentOS 7. Tingueu en compte que aquestes instruccions també funcionen en altres distribucions com RHEL/Fedora i Debian/Ubuntu.

El nostre pla consisteix a emmagatzemar comptes de correu electrònic i àlies en una base de dades MariaDB que, per a la nostra comoditat, es gestionarà a través de phpMyAdmin.

Si decidiu no instal·lar phpMyAdmin o esteu tractant amb un servidor només CLI, també us proporcionarem el codi equivalent per crear les taules de base de dades que s'utilitzaran al llarg d'aquesta sèrie.

Com que mantenir un servidor de correu en funcionament és una de les tasques essencials que s'assignen normalment als administradors i enginyers del sistema, també oferirem alguns consells per executar de manera eficient aquest servei crític en un entorn de producció.

Creeu registres A i MX per al domini al DNS

Abans de continuar, hi ha uns quants requisits previs que s'han de complir:

1. Necessitareu un domini vàlid registrat mitjançant un registrador de dominis. En aquesta sèrie utilitzarem www.linuxnewz.com, que es va registrar a través de GoDaddy.

2. Aquest domini s'ha d'apuntar a la IP externa del vostre VPS o proveïdor d'allotjament en núvol. Si esteu allotjant el vostre servidor de correu automàticament, podeu utilitzar el servei que ofereix FreeDNS (requereix registre).

En qualsevol cas, també heu de configurar els registres A i MX per al vostre domini (podeu obtenir més informació sobre els registres MX en aquestes PMF de Google).

Un cop afegits, podeu cercar-los mitjançant una eina en línia com ara MxToolbox o ViewDNS per assegurar-vos que estiguin configurats correctament.

Important: tingueu en compte que pot passar una estona (1-2 dies) fins que es propaguen els registres DNS i el vostre domini estigui disponible. Mentrestant, pots accedir al teu VPS a través de la seva adreça IP per realitzar les tasques que s'indiquen a continuació.

3. Configura el FQDN (nom de domini totalment qualificat) del teu VPS:

# hostnamectl set-hostname yourhostname

per configurar el nom d'amfitrió del sistema i, a continuació, editeu /etc/hosts de la següent manera (substituïu AAA.BBB.CCC.DDD, el vostre nom d'amfitrió i el vostre domini per la IP pública del vostre servidor, el vostre nom d'amfitrió i el vostre domini registrat):

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

on el vostrehostname és el nom d'amfitrió del sistema que es va establir anteriorment mitjançant l'ordre hostnamectl.

Instal·lació dels paquets de programari necessaris

4. Per instal·lar els paquets de programari necessaris com Apache, Postfix, Dovecot, MariaDB, PhpMyAdmin, SpamAssassin, ClamAV, etc., cal que habiliteu el repositori EPEL:

# yum install epel-release

5. Un cop hàgiu seguit els passos anteriors, instal·leu els paquets necessaris:

# 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
# 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. Inicieu i activeu els servidors web i de bases de dades:

# systemctl enable httpd mariadb
# systemctl start httpd mariadb
# systemctl enable apache2 mariadb
# systemctl start apache2 mariadb

Quan la instal·lació s'hagi completat i el servei anterior estigui habilitat i en funcionament, començarem configurant la base de dades i les taules per emmagatzemar informació sobre els comptes de correu de Postfix.

Creació de la base de dades de comptes de correu Postfix

Per simplificar, utilitzarem phpMyAdmin, una eina destinada a gestionar l'administració de bases de dades MySQL/MariaDB mitjançant una interfície web, per crear i gestionar la base de dades de correu electrònic.

Tanmateix, per iniciar la sessió i utilitzar aquesta eina, hem de seguir aquests passos:

7. Habiliteu el compte de MariaDB (pots fer-ho executant la utilitat mysql_secure_installation des de la línia d'ordres, assignant una contrasenya per a l'usuari root i establint la configuració predeterminada proposada per l'eina EXCEPTE No permetre l'inici de sessió root de forma remota). ?“:

o bé crear un nou usuari de base de dades:

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

Assegureu Apache amb un certificat

8. Com que utilitzarem una aplicació web per gestionar la base de dades del servidor de correu electrònic, hem de prendre les precaucions necessàries per protegir les connexions al servidor. En cas contrari, les nostres credencials de phpMyAdmin viatjaran en text sense format pel cable.

Per configurar la seguretat de la capa de transport (TLS) al vostre servidor, seguiu els passos descrits a la part 8 de la sèrie RHCE: Implementació d'HTTPS mitjançant TLS mitjançant el Servei de seguretat de xarxa (NSS) per a Apache abans de continuar.

Nota: si no teniu accés a la consola del servidor, haureu de trobar una altra manera de generar l'entropia necessària durant la creació de la clau. En aquest cas, potser voldreu considerar instal·lar rng-tools i executar rngd -r /dev/urandom.

Configura i protegeix PhpMyAdmin

9. A /etc/httpd/conf.d/phpMyAdmin.conf (CentOS) o /etc/phpmyadmin/apache.conf (Debian i derivats), localitzeu totes les ocurrències de les línies següents i assegureu-vos que apunten a la IP pública del teu servidor:

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

A més, desactiveu els àlies predeterminats i creeu-ne un de nou per accedir a la vostra pàgina d'inici de sessió de phpMyAdmin. Això ajudarà a protegir el lloc contra robots i atacants externs que apunten a www.yourdomain.com/phpmyadmin o www.yourdomain.com/phpMyAdmin.

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

A més, afegiu la línia següent dins de :

Require all granted

Creeu Apache VirtualHost per al domini

10. Assegureu-vos que el vostre domini s'afegeixi als llocs habilitats. Creeu /etc/httpd/sites-available/linuxnewz.com.conf (CentOS) o /etc/apache2/sites-available/linuxnewz.com (Debian) amb el contingut següent (assegureu-vos que DocumentRoot, sites-available i llocs -existeixen directoris activats):

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

i l'enllaç simbòlic:

# ln -s /etc/httpd/sites-available/linuxnewz.com.conf /etc/httpd/sites-enabled/linuxnewz.com.conf
# a2ensite linuxnewz.com

i ja has acabat.

Configura la base de dades de correu electrònic de Postfix

11. Ara podeu obrir la vostra interfície de phpMyAdmin a https://www.yourdomain.com/managedb (tingueu en compte que managedb és l'àlies que hem configurat anteriorment per al directori de dades de phpMyAdmin).

Si això no funciona (cosa que pot ser causada per un retard en la propagació o la manca de configuració dels registres DNS), de moment, podeu provar d'utilitzar l'adreça IP pública del vostre servidor en lloc de www.yourdomain.com:

En qualsevol cas, després d'iniciar sessió a phpMyAdmin, veureu la següent interfície. Feu clic a Nou a la secció de l'esquerra:

Introduïu un nom per a la base de dades (EmailServer_db en aquest cas, no cal seleccionar una intercalació) i feu clic a Crea:

12. A la pantalla següent, trieu un nom per a la primera taula (on emmagatzemarem els dominis que gestionarà aquest servidor de correu.

Tingueu en compte que fins i tot quan en aquesta sèrie només gestionarem un domini, podeu afegir-ne més més endavant) i el nombre de camps que vulgueu, i després feu clic a Vés. Se us demanarà que nomeneu i configureu aquests dos camps, on podeu procedir amb seguretat tal com s'indica a les imatges següents:

Quan trieu PRIMARY a Índex per a DomainId, accepteu els valors predeterminats i feu clic a Vés:

Alternativament, podeu fer clic a Vista prèvia de SQL per veure el codi sota el capó:

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

Quan estigueu preparat, feu clic a Desa per confirmar els canvis. A continuació, podreu fer clic a Nou a EmailServer_db per continuar creant taules:

13. Ara seguiu aquests passos per crear la resta de taules. Feu clic a la pestanya SQL i introduïu el codi indicat per a cada objecte de base de dades.

Tingueu en compte que en aquest cas hem optat per crear la taula mitjançant una consulta SQL a causa de les relacions que s'han d'establir entre diferents taules:

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; 

Hauríeu de rebre un missatge de confirmació (si no, phpMyAdmin us demanarà errors de sintaxi):

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;

(Feu clic a Vés a la part inferior per continuar amb la creació de la taula).

Fins a aquest punt, hauríeu de tenir la següent estructura de base de dades:

Això vol dir que esteu preparat per començar a afegir alguns registres a la secció següent.

Creació d'un domini Postfix, usuaris i àlies

14. Ara inserirem els registres següents a les tres taules. Les contrasenyes de [email  s'encriptaran i la instrucció INSERT INTO Users_tbl.

A més, tingueu en compte que els correus electrònics enviats 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 ');

Després d'haver afegit el nostre domini, dos comptes d'usuari i un àlies de correu electrònic, estem preparats per continuar configurant el nostre servidor de correu electrònic en el proper article d'aquesta sèrie, on configurarem Dovecot i Postfix.

Resum

En aquest article hem enumerat els paquets necessaris per instal·lar un servidor de correu electrònic Postfix en un VPS CentOS 7 i hem explicat com gestionar la base de dades subjacent mitjançant phpMyAdmin.

En els dos següents articles revisarem la configuració dels dos programes que s'encarregaran de la distribució de correu electrònic del nostre domini (Part 2) i us mostrarem com afegir protecció contra el correu brossa i els virus (Part 3) per al vostre servidor.

Fins aleshores, no dubteu a posar-vos en contacte amb nosaltres mitjançant el formulari següent si teniu cap pregunta o comentari.