Recherche de site Web

Comment configurer le serveur de messagerie Postfix et Dovecot avec la base de données (MariaDB) en toute sécurité - Partie 1


Dans cette série de 3 articles, nous expliquerons comment configurer un serveur de messagerie Postfix avec une protection antivirus et anti-spam dans une boîte CentOS 7. Veuillez noter que ces instructions fonctionnent également sur d'autres distributions telles que RHEL/Fedora et Debian/Ubuntu.

Notre plan consiste à stocker les comptes de messagerie et les alias dans une base de données MariaDB qui, pour notre commodité, sera gérée via phpMyAdmin.

Si vous choisissez de ne pas installer phpMyAdmin ou si vous utilisez un serveur CLI uniquement, nous fournirons également le code équivalent pour créer les tables de base de données qui seront utilisées tout au long de cette série.

Étant donné que maintenir un serveur de messagerie opérationnel est l’une des tâches essentielles généralement assignées aux administrateurs système et aux ingénieurs, nous fournirons également quelques conseils pour exécuter efficacement ce service critique dans un environnement de production.

Créer des enregistrements A et MX pour le domaine dans DNS

Avant de continuer, quelques prérequis doivent être remplis :

1. Vous aurez besoin d'un domaine valide enregistré auprès d'un registraire de domaine. Dans cette série, nous utiliserons www.linuxnewz.com, qui a été enregistré via GoDaddy.

2. Ce domaine doit pointer vers l'adresse IP externe de votre VPS ou fournisseur d'hébergement cloud. Si vous auto-hébergez votre serveur de messagerie, vous pouvez utiliser le service proposé par FreeDNS (inscription requise).

Dans tous les cas, vous devez également configurer les enregistrements A et MX pour votre domaine (vous pouvez en savoir plus sur les enregistrements MX dans cette FAQ de Google).

Une fois ajoutés, vous pouvez les rechercher à l'aide d'un outil en ligne tel que MxToolbox ou ViewDNS pour vous assurer qu'ils sont correctement configurés.

Important : Veuillez noter que cela peut prendre un certain temps (1 à 2 jours) jusqu'à ce que les enregistrements DNS se propagent et que votre domaine soit disponible. En attendant, vous pouvez accéder à votre VPS via son adresse IP pour effectuer les tâches indiquées ci-dessous.

3. Configurez le FQDN (Fully Qualified Domain Name) de votre VPS :

hostnamectl set-hostname yourhostname

pour définir le nom d'hôte du système, puis modifiez /etc/hosts comme suit (remplacez AAA.BBB.CCC.DDD, votre nom d'hôte et votredomaine avec l'IP publique de votre serveur, votre nom d'hôte et votre domaine enregistré) :

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

votrenom d'hôte est le nom d'hôte du système qui a été défini précédemment à l'aide de la commande hostnamectl.

Installation des packages logiciels requis

4. Pour installer les packages logiciels requis tels qu'Apache, Postfix, Dovecot, MariaDB, PhpMyAdmin, SpamAssassin, ClamAV, etc., vous devez activer le référentiel EPEL :

yum install epel-release

5. Une fois que vous avez suivi les étapes ci-dessus, installez les packages nécessaires :

Dans les systèmes basés sur 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

Dans Debian et dérivés :

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. Démarrez et activez les serveurs Web et de base de données :

Dans les systèmes basés sur CentOS :

systemctl enable httpd mariadb
systemctl start httpd mariadb

Dans Debian et dérivés :

systemctl enable apache2 mariadb
systemctl start apache2 mariadb

Une fois l'installation terminée et le service ci-dessus activé et exécuté, nous commencerons par configurer la base de données et les tables pour stocker les informations sur les comptes de messagerie Postfix.

Création d'une base de données de comptes de messagerie Postfix

Pour plus de simplicité, nous utiliserons phpMyAdmin, un outil destiné à gérer l'administration des bases de données MySQL/MariaDB via une interface web, pour créer et gérer la base de données de courrier électronique.

Cependant, pour nous connecter et utiliser cet outil, nous devons suivre ces étapes :

7. Activez le compte MariaDB (vous pouvez le faire en exécutant l'utilitaire mysql_secure_installation à partir de la ligne de commande, en attribuant un mot de passe à l'utilisateur root et définir les paramètres par défaut proposés par l'outil SAUF « Interdire la connexion root à distance ? » :

ou sinon créez un nouvel utilisateur de base de données :

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

Sécurisez Apache avec un certificat

8. Puisque nous utiliserons une application Web pour gérer la base de données du serveur de messagerie, nous devons prendre les précautions nécessaires pour protéger les connexions au serveur. Sinon, nos informations d'identification phpMyAdmin circuleront en texte brut sur le réseau.

Pour configurer Transport Layer Security (TLS) sur votre serveur, suivez les étapes décrites dans la Partie 8 de la série RHCE : Implémentation de HTTPS via TLS. en utilisant Network Security Service (NSS) pour Apache avant de continuer.

Remarque : si vous n'avez pas accès à la console du serveur, vous devrez trouver un autre moyen de générer l'entropie nécessaire lors de la création de la clé. Dans ce cas, vous pouvez envisager d'installer rng-tools et d'exécuter rngd -r /dev/urandom.

Configurer et sécuriser PhpMyAdmin

9. Dans /etc/httpd/conf.d/phpMyAdmin.conf (CentOS) ou /etc/phpmyadmin/apache. conf (Debian et dérivés), localisez toutes les occurrences des lignes suivantes et assurez-vous qu'elles pointent vers l'IP publique de votre serveur :

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

De plus, désactivez les alias par défaut et créez-en un nouveau pour accéder à votre page de connexion phpMyAdmin. Cela contribuera à sécuriser le site contre les robots et les attaquants externes qui ciblent www.yourdomain.com/phpmyadmin ou www.yourdomain.com/phpMyAdmin.

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

Ajoutez également la ligne suivante dans  :

Require all granted

Créer Apache VirtualHost pour le domaine

10. Assurez-vous que votre domaine est ajouté aux sites activés. Créez /etc/httpd/sites-available/linuxnewz.com.conf (CentOS) ou /etc/apache2/sites-available/linuxnewz.com (Debian) avec le contenu suivant (assurez-vous que DocumentRoot, sites disponibles et sites activés des répertoires existent) :

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

et le lien symbolique :

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

et tu as fini.

Configurer la base de données de messagerie Postfix

11. Vous pouvez maintenant ouvrir votre interface phpMyAdmin sur https://www.yourdomain.com/managedb (notez que managedb< est l'alias que nous avons configuré précédemment pour le répertoire de données phpMyAdmin).

Si cela ne fonctionne pas (ce qui peut être dû à un retard dans la propagation ou à un manque de configuration des enregistrements DNS) pour le moment, vous pouvez essayer d'utiliser l'adresse IP publique de votre serveur au lieu de www.votredomaine.com  :

Dans tous les cas, après vous être connecté à phpMyAdmin, vous verrez l'interface suivante. Cliquez sur Nouveau dans la section de gauche :

Saisissez un nom pour la base de données (EmailServer_db dans ce cas, pas besoin de sélectionner un classement) et cliquez sur Créer :

12. Sur l'écran suivant, choisissez un nom pour la première table (où nous stockerons les domaines que ce serveur de messagerie gérera.

Veuillez noter que même si dans cette série nous ne gérerons qu'un seul domaine, vous pourrez en ajouter d'autres plus tard) et le nombre de champs que vous souhaitez, puis cliquez sur Go. Vous serez invité à nommer et configurer ces deux champs, où vous pourrez procéder en toute sécurité comme indiqué dans les images suivantes :

Lorsque vous choisissez PRIMARY sous Index pour DomainId, acceptez les valeurs par défaut et cliquez sur Go :

Vous pouvez également cliquer sur Aperçu SQL pour voir le code sous le capot :

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

Lorsque vous êtes prêt, cliquez sur Enregistrer pour confirmer les modifications. Vous pourrez ensuite cliquer sur Nouveau sous EmailServer_db pour continuer à créer des tables :

13. Suivez maintenant ces étapes pour créer le reste des tableaux. Cliquez sur l'onglet SQL et saisissez le code indiqué pour chaque objet de la base de données.

Notez que dans ce cas nous avons choisi de créer la table à l'aide d'une requête SQL en raison des relations qui doivent être établies entre les différentes tables :

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

Vous devriez recevoir un message de confirmation (sinon, phpMyAdmin vous demandera des erreurs de syntaxe) :

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;

(Cliquez sur Go en bas pour procéder à la création du tableau).

Jusqu'à présent, vous devriez avoir la structure de base de données suivante :

Ce qui signifie que vous êtes prêt à commencer à ajouter des enregistrements dans la section suivante.

Création d'un domaine Postfix, d'utilisateurs et d'alias

14. Nous allons maintenant insérer les enregistrements suivants dans les trois tables. Les mots de passe pour [email  et [email  seront cryptés ainsi que l'instruction INSERT INTO Users_tbl.

Veuillez également noter que les e-mails envoyés à [email  seront redirigés vers [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 ');

Après avoir ajouté notre domaine, deux comptes utilisateur et un alias de messagerie, nous sommes prêts à continuer la configuration de notre serveur de messagerie dans le prochain article de cette série, où nous configurerons Dovecot et Postfix.

Résumé

Dans cet article, nous avons répertorié les packages requis pour installer un serveur de messagerie Postfix dans un VPS CentOS 7 et expliqué comment gérer la base de données sous-jacente à l'aide de phpMyAdmin.

Dans les deux prochains articles, nous passerons en revue la configuration des deux programmes qui s'occuperont de la distribution des e-mails pour notre domaine (Partie 2) et vous montrerons comment ajouter une protection contre le spam et les virus (Partie 3) pour votre serveur.

D’ici là, n’hésitez pas à nous contacter via le formulaire ci-dessous si vous avez des questions ou des commentaires.