Installation d’un serveur mail SMTP Postfix avec PostgreSQL sous CentOS

Nous allons installer un serveur SMTP en utilisant Postfix, ce qui permettra l’envoi de mail depuis ce serveur. Ce petit guide pour permettra de pouvoir envoyer et recevoir des emails sur votre propre serveur. Par la suite, il sera très intéressant d’installer un serveur IMAP (article à venir) pour pouvoir consulter les mails reçus.
Nous allons stocker les domaines, comptes utilisateurs et aliases dans une base de données gérée par PostgreSQL, pour pouvoir créer de nouveaux compte extrêmement facilement.

Installation de Postfix

Avant tout, nous allons installer postfix depuis les paquets de CentOS mais en utilisant le dépôt CentOS Plus qui nous permet d’avoir un postfix compilé avec le support de MySQL et PostgreSQL, ce qui nous intéresse ici.

Éditez donc le fichier /etc/yum.repos.d/CentOS-Base.repo. Pour activer le dépôt CentOS Plus, changez la ligne suivante dans la partie précédentée par [centosplus]:

Ajoutez dans [base] et [updates] la ligne suivante:

Cette ligne permet de forcer yum à utiliser le dépôt CentOS Plus pour les paquets postfix.

Ensuite, il nous reste simplement à installer Postfix grâce à yum:

Par mesure de précaution, on désactive sendmail, s’il est activé.

On choisi de démarrer postfix en même temps que le système:

On créé ensuite le répertoire qui contiendra les mails:


Configuration de postgresql

Nous allons créer un utilisateur postfix ainsi qu’une base de données à son nom sur le serveur pour pouvoir stocker les comptes utilisateurs, les domaines et les alias:

Ensuite, dans la base de données postfix, créez les tables suivantes:

Ensuite, accordez les droits à ces tables à postfix:

Configuration de Postfix

Nous allons éditer la configuration dans le fichier /etc/postfix/main.cf. Voici mon fichier de configuration par défaut, qui marche parfaitement bien:

Remplacez _UID_ et _GID_ respectivement par l’ID et l’ID du groupe de l’utilisateur Unix postfix (utilisez la commande id postfix pour le savoir).
Important: si l’ID de l’utilisateur postfix est inférieur à la valeur de virtual_minimum_uid, remplacez cette dernière par un nombre inférieur ou égal à l’ID de postfix.

Maintenant, nous allons créer les fichiers qui permettent de se connecter à la base de données PostgreSQL pour y récupèrer les domaines, comptes et utilisateurs:

Dans ce dossier, nous allons créer plusieurs fichiers:
/etc/postfix/pgsql.d/virtual_mailbox_domains

/etc/postfix/pgsql.d/virtual_alias_maps

/etc/postfix/pgsql.d/virtual_mailbox_maps

Test de la configuration

Pour tester la configuration, nous allons créer des enregistrements dans la base qui créent un compte utilisateur pour l’adresse email contact@example.com.

Cette dernière ligne défini donc le compte contact@example.com qui a un mot de passe fictif (qui normalement est crypté) et dont les mails sont stockés dans le répertoire /home/mail/data/example.com/contact.

Ensuite, nous allons tester la configuration grâce à l’utilitaire postmap qui permet d’interroger un fichier de configuration virtuelle comme le fait Postfix:

Si la commande vous retourne bien le maildir (à savoir example.com/contact), ça fonctionne!

Il ne vous reste plus qu’à démarrer Postfix:

Vous pouvez tester l’envoi d’un mail grâce à la commande mail:

Tapez votre message puis un point sur une ligne, suivant d’une nouvelle ligne. Votre message sera envoyé à destinataire@example.com avec comme sujet “Hello”.

Maintenant, configurez le champ MX de vos domaines pour qu’il pointe vers ce serveur.
À l’heure actuelle, vous pouvez envoyer (depuis le serveur uniquement) et recevoir des mails. Vous trouverez dans les articles suivants comment mettre en place postfixadmin, une interface de configuration Web, mettre en place un SMTP distant utilisant SASL, mettre en place un serveur IMAP avec DoveCot et installer le WebMail RoundCube.

facebooktwittergoogle_plusredditpinterestlinkedinmail

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">