Installer un serveur de mail sous Linux (1/3) : Postfix

L'objectif de cette note en trois parties (au départ c'était une, mais c'est devenu trop long ! 😉 ) est d'installer un serveur de mail simple nous permettant d'envoyer et recevoir des mails, mais aussi de les consulter via une interface Web.

Pour réaliser ces fonctions, le serveur de mail sera composé des éléments suivants qui composeront chacun une note :

  • un serveur SMTP pour le transport des mails : Postfix
  • un serveur POP3/IMAP pour la récupération et gestion des mails depuis un client : Dovecot
  • un Webmail pour la gestion de ses mails en ligne : l'application RoundCube

Les installations seront réalisées à partir des codes sources, et non des packages de distribution. Elles peuvent donc être appliquées sur n'importe quelle distribution.

Le but n'est pas ici de monter une usine à gaz. Il s'agit simplement de monter un serveur de mails fonctionnel.

Nous reviendrons dans d'autres notes sur des notions plus avancées telles que l'authentification, la prise en charge SSL ou la gestion du multi-domaines.

Logiciels utilisés : Postfix 2.7.2

Système d'exploitation : Debian  5.0, Linux 2.6.34

Note : dans cette note sera donc traitée la partie 1 (Postfix).

Pour la partie 2 (Dovecot) : http://blog.moncoindunet.fr/linux/installer-un-serveur-de-mail-sous-linux-23-dovecot/

1 – Pré-requis

Des outils de compilation : make et g++. Ainsi que gnupg pour la vérification du package. Le paquet libdb-dev est également un pré-requis pour Postfix.

Etant sur Debian, j'utilise apt-get pour les récupérer :

$ apt-get install g++ make gnupg libdb-dev

Je vous invite à vous rendre sur cette page pour récupérer le lien de la dernière version stable de Postfix via le mirroir le plus proche de chez vous : http://www.postfix.org/download.html

Et on récupère le package qui va bien ainsi que la signature PGP :

$ cd ~ 
$ wget ftp://ftp.easynet.be/postfix/official/postfix-2.7.2.tar.gz
$ wget ftp://ftp.easynet.be/postfix/official/postfix-2.7.2.tar.gz.sig

2 – Vérifier le package

L'authentificté du package se vérifie grâce à la signature PGP que nous avons téléchargé.

Il faut tout d'abord téléchargé la clé publique ayant servi à signer le package :

$ wget ftp://postfix.eu.org/pub/postfix/wietse.pgp

Puis, on l'importe dans gnupg :

$ gpg --import wietse.pgp
gpg: clé C12BCD99: clé publique « Wietse Venema <wietse@porcupine.org> » importée
gpg: clé D5327CB9: clé publique « wietse venema <wietse@porcupine.org> » importée
gpg:        Quantité totale traitée: 2
gpg:                       importée: 2  (RSA: 2)
gpg: aucune clé de confiance ultime n'a été trouvée

On peut maintenant vérifier l'authenticité du package avec gnupg :

$ gpg --verify postfix-2.7.2.tar.gz.sig postfix-2.7.2.tar.gz
gpg: Signature faite le sam 29 aoû 2009 02:50:08 CEST avec la clé RSA ID C12BCD99
gpg: Bonne signature de « Wietse Venema <wietse@porcupine.org> »
gpg: ATTENTION: Cette clé n'est pas certifiée avec une signature de confiance !
gpg:            Rien ne dit que la signature appartient à son propriétaire.
Empreinte de clé principale: FF 96 4A 8C 96 88 7C 6E  A4 EF AD BF 48 34 E1 BB

Le "ATTENTION" indique simplement que la clé utilisée n'est pas certifiée par un tiers de confiance. Si vous n'avez pas confiance, vous pouvez toujours contacter la personne par téléphone pour s'assurer avec elle que vous possédez bien sa clé …

3 – Créer les utilisateurs et groupes

Le fonctionnement de Postfix requiert la création de deux groupes et d'un utilisateur. Nous créerons les groupes et utilisateurs classiques :

$ groupadd postfix
$ groupadd postdrop
$ useradd -d /var/empty -s /bin/false -g postfix postfix

4 – Compiler et installer

Maintenant que le package Postfix est téléchargé et vérifié on peut le décompresser dans le répertoire /usr/local/src :

$ tar xvzf postfix-2.7.2.tar.gz -C /usr/local/src
$ cd /usr/local/src/postfix-2.7.2/

Avant la compilation, nous allons modifier le chemin d'installation des fichiers de configuration afin d'être en cohérence avec les chemins que nous indiqueront lors de l'installation. Pour je ne sais quelle raison obscure, c'est le seul chemin que l'on ne peut modifier lors de l'installation …

$ make makefiles CCARGS='-DDEF_CONFIG_DIR=\"/usr/local/postfix/etc\"'

On peut maintenant compiler :

$ make

Et on installe :

$ make install

L'installation pose ensuite tout un tas de questions notamment sur l'emplacement des fichiers ainsi que les utilisateurs à configurer.

Nous allons modifier les chemins d'installation pour tout avoir dans /usr/local/postfix plutôt que tout éparpiller sur le système :

Please specify the prefix for installed file names. Specify this ONLY
if you are building ready-to-install packages for distribution to other
machines.
install_root: [/]

Please specify a directory for scratch files while installing Postfix. You
must have write permission in this directory.
tempdir: [/usr/local/src/postfix-2.7.2]

Please specify the final destination directory for installed Postfix
configuration files.
config_directory: [/usr/local/postfix/etc]

Please specify the final destination directory for installed Postfix
administrative commands. This directory should be in the command search
path of adminstrative users.
command_directory: [/usr/sbin] /usr/local/postfix/sbin

Please specify the final destination directory for installed Postfix
daemon programs. This directory should not be in the command search path
of any users.
daemon_directory: [/usr/libexec/postfix] /usr/local/postfix/libexec

Please specify the final destination directory for Postfix-writable
data files such as caches or random numbers. This directory should not
be shared with non-Postfix software.
data_directory: [/var/lib/postfix] 

Please specify the destination directory for the Postfix HTML
files. Specify "no" if you do not want to install these files.
html_directory: [no]

Please specify the owner of the Postfix queue. Specify an account with
numerical user ID and group ID values that are not used by any other
accounts on the system.
mail_owner: [postfix]

Please specify the final destination pathname for the installed Postfix
mailq command. This is the Sendmail-compatible mail queue listing command.
mailq_path: [/usr/bin/mailq] /usr/local/postfix/bin/mailq

Please specify the destination directory for the Postfix on-line manual
pages. You can no longer specify "no" here.
manpage_directory: [/usr/local/man] /usr/share/man
Please specify the final destination pathname for the installed Postfix
newaliases command. This is the Sendmail-compatible command to build
alias databases for the Postfix local delivery agent.
newaliases_path: [/usr/bin/newaliases] /usr/local/postfix/bin/newaliases

Please specify the final destination directory for Postfix queues.
queue_directory: [/var/spool/postfix] 

Please specify the destination directory for the Postfix README
files. Specify "no" if you do not want to install these files.
readme_directory: [no]

Please specify the final destination pathname for the installed Postfix
sendmail command. This is the Sendmail-compatible mail posting interface.
sendmail_path: [/usr/sbin/sendmail] /usr/local/postfix/sbin/sendmail

Please specify the group for mail submission and for queue management
commands. Specify a group name with a numerical group ID that is
not shared with other accounts, not even with the Postfix mail_owner
account. You can no longer specify "no" here.
setgid_group: [postdrop]

Voilà, Postfix est installé !

5 – Modifier le PATH

Afin de pouvoir facilement utiliser les commandes fournies ar Postfix sans avoir à retaper toute l'arborescence, on va modifier la variable PATH des utilisateurs :

$ echo -e "postfix=/usr/local/postfix/bin:/usr/local/postfix/sbin\nPATH=\$PATH:\$postfix" >> /etc/profile
$ . /etc/profile

6 – Configurer

Maintenant que le serveur Postfix est installé on va modifier quelques paramètres dans la configuration pour l'adapter à notre environnement et le sécuriser un peu plus.

Le fichier de configuration principal de Postfix se trouve dans /usr/local/postfix/etc et se nomme main.cf :

$ cd /usr/local/postfix/etc
$ vim main.cf

Il faut maintenant décommenter et paramétrer un certain nombre d'éléments :

  • inet_interfaces = www.xxx.yyy.zzz : adresse IP sur laquelle le serveur Postfix écoutera
  • mydomain = example.com : le nom de votre domaine DNS; est largement utilisé pour les paramètres suivants
  • myorigin = $mydomain : pour envoyer des mails en tant que user@example.com
  • mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain : pour que les mails à destination de localhost* ou example.com soit considérés comme étant locaux et donc transmis au MDA (pour nous, Dovecot que nous verrons plus bas)
  • mynetworks = www.xxx.yyy.zzz/32, 127.0.0.0/8 : réseaux de confiance pouvant relayer des mails via ce serveur. Il s'agit ici de l'adresse locale ainsi que de l'adresse IP sur laquelle Postfix écoutera
  • relay_domains = : pour ne relayer les mails d'aucun domaine

C'est bon, on peut maintenant enregistrer et quitter le fichier !

7 – Gestion des alias

Avec Postfix on peut déclarer un certain nombre d'alias. Un alias est une redirection d'un utilisateur (qui peut ne pas exister) vers un autre. Par exemple, les mails adressés à l'utilisateur postmaster sont renvoyés à l'utilisateur root. Il est ainsi préférable de rediriger les mails envoyés à root vers une vraie personne, qui sinon ont peu de chance d'être lus dans les temps.

Postfix fourni par défaut le fichier aliases, qui se trouve dans /usr/local/postfix/etc. Les alias se configurent de la façon suivante :

<alias>: <utilisateur destinataire>

Dans ce fichier est configuré tout un tas d'alias "classiques", mais il vous faut remplir l'alias concernant l'utilisateur root :

$ cd /usr/local/postfix/etc/
$ vim aliases

On décommente la ligne et on remplace "you" par une vraie adresse :

root:           me@example.com

Mais cela ne suffit pas ! En effet, les alias sont en fait stockés dans une base de données. Toute modification du fichier aliases doit être prise en compte avec la commande newaliases :

$ newaliases

8 – Premier démarrage

On peut maintenant procéder au premier démarrage du serveur Postfix :

$ ./sbin/postfix start
postfix/postfix-script: starting the Postfix mail system

On peut vérifier que le serveur Postfix a bien démarré et n'a pas remontée d'erreur en regardant le fichier de log /var/log/mail.log :

Sep 18 11:59:55 pouet postfix/postfix-script[15252]: starting the Postfix mail system
Sep 18 11:59:55 pouet postfix/master[15253]: daemon started -- version 2.7.2, configuration /usr/local/postfix/etc

Tout est bon ! On va pouvoir tester 🙂

9 – Tester

Le test est très simple, il suffit d'envoyer un mail à l'utilisateur root par exemple, et de vérifier que celui-ci l'a bien reçu :

$ echo "Test PostFix" | sendmail root
$ cat /var/spool/mail/root
From root@example.com  Sun May  2 21:35:47 2010
Return-Path: <root@example.com>
X-Original-To: root
Delivered-To: root@example.com
Received: by pouet (Postfix, from userid 0)
        id 7AE0C2E033; Sun,  2 May 2010 21:35:47 +0200 (CEST)
Message-Id: <20100502193547.7AE0C2E033@pouet>
Date: Sun,  2 May 2010 21:35:47 +0200 (CEST)
From: root@example.com (root)
To: undisclosed-recipients:;

C'est bon ! Le mail a bien été reçu : le serveur Postfix est en mesure de transmettre des mails 😀

Une consultation des logs (/var/log/mail.log) permettrait aussi d'indiquerque le mail a bien été envoyé et reçu, et ce sans erreur.

C'est tout pour cette première partie ! La deuxième suivra très rapidement.


Erreurs rencontrées

1 – Erreur lors du make

$ make
make -f Makefile.in MAKELEVEL= Makefiles
(echo "# Do not edit -- this file documents how Postfix was built for your machine."; /bin/sh makedefs) >makedefs.tmp
No <db.h> include file found.
Install the appropriate db*-devel package first.
See the RELEASE_NOTES file for more information.
make: *** [Makefiles] Erreur 1
make: *** [Makefiles] Erreur 2

Solution : installer le package libdb-dev (sous Debian) puis recompiler

$ apt-get install libdb-dev
$ make

5 pensĂ©es sur “Installer un serveur de mail sous Linux (1/3) : Postfix”

  1. Bonjour,

    Je suis Ă  lettre votre tutoriel pour installer Postfix, aucun problĂšme lors de l’installation, mais avant la partie « modifier le path », je vĂ©rifie si Postfix est bien installĂ©
    un rpm -q postfix me renvoit que le paquetage n’est pas installĂ©. Avez vous une idĂ©e de la raison?

    Merci d’avance

    1. Bonjour,

      La commande rpm vous donnera les packages RPM qui sont installés.
      Or, ici Postfix n’est pas installĂ© via RPM mais via compilation des sources.

      Donc oui, c’est normal que Postfix n’apparait pas dans le « rpm -q » 🙂

  2. Salut,

    En exĂ©cutant ton tutoriel Ă  la lettre, on a eu un petit souci. Tous les messages restaient « en queue », parce que la « alias_database » n’Ă©tait pas trouvĂ©e.

    Tout a fonctionnĂ© correctement lorsqu’on a tapĂ© la commande « /usr/local/postfix/bin/newaliases » Ă  la place de simplement « newaliases »

    Un grand merci à ton tutoriel qui nous a bien aidé

Laisser un commentaire