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
Leave a Reply