Le système d'exploitation GNU-Linux/Le serveur de mails Postfix
Sections |
[modifier] Le serveur de mail Postfix
Postfix est un serveur de mail écrit dans l'idée de remplacer Sendmail, serveur de mail historique de moins en moins utilisé car sa configuration est très complexe.
Postfix effectue 99% des fonctions de Sendmail, les 1% restant ne sont que purement applicable dans une minorité de cas. De plus, il allie performance et facilité d'installation et de paramétrage.
Il existe de nombreux autres serveurs de mails, parmi les plus connus : Qmail, Exim, Qpsmtpd, Courier ...
[modifier] Comment ça marche ?
| Schéma du cheminement des mails entre les correspondants (3 cas illustrés en fonction des moyens mis en œuvre). |
|---|
Le schéma précédent nous propose trois cas de figure:
[modifier] Cas numéro 1
- Nous avons deux sociétés: societe.com et client.com
- Paul (paul@societe.com) veut envoyer un mail à Pierre (pierre@client.com)
- Le mail part en direction du serveur SMTP de sa société (smtp.societe.com)
- Celui-ci est accepté par le serveur de mail smtp.societe.com car il vient de son propre réseau
- smtp.societe.com fait une demande au serveur DNS pour connaitre le serveur de mail qui gère les courriers de @client.com : client.com MX ? (Mail eXchanger)
- Le serveur DNS répond: smtp.client.com
- Le serveur de mail smtp.societe.com contacte donc le serveur SMTP smtp.client.com
- Lorsque le client de messagerie de Pierre veut consulter ces mails, il va demander à POP si il y a quelque chose pour lui et télécharge le mail de Paul
- Pierre a donc bien reçu le mail de Paul
- Pierre répond à Paul de la même manière
- Le mail suit le cheminement inverse : smtp.client.com demande au serveur DNS le serveur de messagerie de societe.com. Celui-ci lui répond: smtp.societe.com
- Le mail est acheminé vers le serveur SMTP smtp.societe.com
- Il est stocké jusqu'à la demande de Paul de lire ces mails. Contrairement à Pierre, le client de messagerie de Paul interroge le serveur IMAP imap.societe.com. La différence est que le mail de Pierre est lu directement depuis le serveur IMAP et reste stocké sur ce dernier
[modifier] Cas numéro 2
- Notre ami Paul fait parti d'une association (asso.org) et dispose d'un email sur ce domaine : paul@asso.org
- L'association dispose d'un hébergement chez hebergeur.net qui lui fournit différents services serveur SMTP, POP, IMAP et accès Webmail
- Paul utilise son email sur asso.org (paul@asso.org) pour envoyer un email à son ami Jack qui dispose aussi d'un email sur asso.org : jack@asso.org
- Ce mail est acheminé via son réseau vers son serveur SMTP. Dans son client Outlook, Paul a paramétré plusieurs comptes
- Le serveur de sa société (smtp.societe.com) accepte d'envoyer le mail sur Internet, même si l'email émetteur et le destinataire utilisent des noms de domaine différents, car il vient de son propre réseau
- Ce mail est donc envoyé au serveur SMTP asso.org : smtp.hebergeur.net
- Paul peut donc s'il le souhaite aller consulter ses mails sur asso.org via le serveur POP qui va rapatrier directement les mails paul@asso.org
[modifier] Cas numéro 3
- Jack utilise une connexion à Internet fournie par un fournisseur d'accès à Internet : fai.fr. Pour lire son email sur asso.org (jack@asso.org), Jack utilise son navigateur Web et l'accès Webmail fournit par fai.fr
- Il se connecte donc sur l'adresse webmail.asso.org et peut ainsi visualiser ses mails. Aucun email ne sera rapatrié sur son PC.
- Il peut également répondre à tous ses mails via WEBMAIL.
[modifier] Quelques définitions
- SMTP : Simple Mail Transfer Protocol (port 25), pour l'envoi et l'acheminement du courrier.
- POP : Post Office Protocol (port 110), pour la réception du courrier.
- IMAP : Internet Message Access Protocol (port 143), sert à la réception du courrier. À la différence de POP, les emails restent stockés sur le serveur IMAP.
- MTA : Mail Transfert Agent. Il s'agit des serveurs de mails SMTP.
- MUA : Mail User Agent. Il s'agit des logiciels clients de messagerie, ex: Outlook, Eudora, Thunderbird, Kmail, Evolution ...
[modifier] Installation de Postfix
Installer en premier Postfix, si un autre serveur de mail est déjà présent, il le supprimera :
# apt-get install postfix
Pour l'instant, nous laissons toutes les options par défaut, nous allons le configurer par la suite.
Une fois l'installation terminée, nous allons configurer Postfix.
sudo adduser postfix sasl[1] sudo dpkg-reconfigure postfix
[modifier] Configuration de Postfix
Le fichier de configuration principal de Postfix est /etc/postfix/main.cf
# cat /etc/postfix/main.cf
# Message affiché à la connexion
smtpd_banner = $myhostname ESMTP
# Ne pas utiliser le service biff qui sert à la notification
# des nouveaux mails
biff = no
# On ne rajoute pas le domaine car c'est le boulot du client mail
append_dot_mydomain = no
# Permet d'envoyer un email a l'émetteur si son mail n'est pas
# parti au bout d'un certain temps
#delay_warning_time = 4h
# Paramètres liés au chiffrement TLS
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_use_tls=yes
#smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
#smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
# Le nom de machine FQDN (doit être en accord avec le DNS)
myhostname = pc230.mondomaine.fr
# Emplacement des alias Unix
# Attention, à chaque modification de /etc/aliases, il faut taper
# la commande newaliases pour qu'il régénère le fichier /etc/aliases.db
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# Le domaine d'origine
myorigin = /etc/mailname
# Liste des domaines principaux dont on accepte le courrier
mydestination = pc230.mondomaine.fr, localhost
# Permet d'indiquer un autre serveur SMTP pour l'envoi des emails
# Utilisé si on ne peut pas envoyer directement les emails
relayhost =
# Indique les réseaux dont on accepte d'acheminer les emails
mynetworks = 127.0.0.0/8, 192.168.30.0/24
# Le dépôt des emails dans les boites aux lettres est confié
# à procmail (cas du format mbox)
mailbox_command = procmail -a "$EXTENSION"
# Taille des boites aux lettres. 0 : pas de limite
mailbox_size_limit = 0
# Séparateur utilisé pour les usernames + adresses
recipient_delimiter = +
# Écoute sur toutes les interfaces réseaux
inet_interfaces = all
# On force postfix à utiliser le protocole IPv4
inet_protocols = ipv4
On peut visualiser la totalité des options possibles de Postfix et leurs valeurs par défaut via la commande postconf :
# postconf | more 2bounce_notice_recipient = postmaster access_map_reject_code = 554 address_verify_default_transport = $default_transport address_verify_local_transport = $local_transport address_verify_map = address_verify_negative_cache = yes address_verify_negative_expire_time = 3d ...
On vérifie également que le fichier /etc/mailname contient le nom de domaine de notre réseau :
# cat /etc/mailname mondomaine.fr
Chaque fois que l'on modifie le fichier /etc/postfix/main.cf, il faut relancer Postfix :
# /etc/init.d/postfix restart
Pour chaque mail envoyé ou reçu, Postfix enregistre les informations d'acheminement dans le fichier /var/log/mail.log. Il est donc très utile de surveiller ce fichier durant les tests de fonctionnement.
Pour vérifier que le serveur de mail fonctionne, on envoi un mail à un utilisateur et on regarde le fichier /var/log/mail.log.
# mail alex Subject: essai essai . Cc:
Dans un autre terminal :
# tail -f /var/log/mail.log ... Feb 13 13:10:40 pc230 postfix/pickup[13353]: B782A1FD6F: uid=0 from=<root> Feb 13 13:10:40 pc230 postfix/cleanup[13675]: B782A1FD6F: message-id=<20080213121040.B782A1FD6F@pc230.mondomaine.fr> Feb 13 13:10:40 pc230 postfix/qmgr[13354]: B782A1FD6F: from=<root@pc230.mondomaine.fr>, size=355, nrcpt=1 (queue active) Feb 13 13:10:40 pc230 postfix/local[13677]: B782A1FD6F: to=<alex@pc230.mondomaine.fr>, orig_to=<alex>, relay=local, delay=0.08, delays=0.04/0.02/0/0.02, dsn=2.0.0, status=sent (delivered to command: procmail -a "$EXTENSION") Feb 13 13:10:40 pc230 postfix/qmgr[13354]: B782A1FD6F: removed ...
[modifier] Ajouter une boite aux lettres
Pour ajouter une boite aux lettres, il faut ajouter un compte Unix. Pour des raisons de sécurité, on positionne le shell de l'utilisateur à /bin/false (ainsi il ne pourra pas se logger sur le serveur). Le mot de passe saisi sera celui de sa boite aux lettres. On rajoute l'utilisateur dans le groupe mail afin qu'il puisse écrire le fichier <login>.lock dans le répertoire /var/mail.
# adduser --shell /bin/false --ingroup mail pierre ...
[modifier] Installation d'un serveur POP
Il existe de nombreux serveurs POP : courier-pop, ipopd, qpopper, solid-pop3d, teapop, dovecot-pop3d ...
Nous installons le serveur POP teapop :
# apt-get install teapop
Depuis un autre poste du réseau, il nous suffit ensuite de configurer un client mail (ex: kmail) pour venir relever une boite aux lettres en utilisant le protocole POP.
[modifier] Installation d'un serveur IMAP
IMAP signifie "Internet Message Access Protocol", c'est un nouveau protocole de messagerie pour relever son courrier dont la particularité est de laisser les messages sur le serveur.
Il existe plusieurs serveurs IMAP, pour cet exemple nous allons utiliser courier-imap.
On installe donc le serveur courier-imap :
# apt-get install courier-imap
IMAP nécessite le format de stockage Maildir. Nous allons donc tout d'abord configurer Postfix pour lui indiquer d'utiliser le format Maildir au lieu du traditionnel mbox.
On modifie le fichier /etc/postfix/main.cf. On commente l'option mailbox_command (qui appelle procmail) et on rajoute l'option home_mailbox :
# vi /etc/postfix/main.cf ... # mailbox_command = procmail -a "$EXTENSION" # Pour utiliser le format Maildir home_mailbox = Maildir/
On relance postfix :
# /etc/init.d/postfix restart
Pour chaque utilisateur existant, il faut ensuite créer le répertoire Maildir. On fait ceci à l'aide de la commande maildirmake fourni par courrier-imap :
$ cd # pour retourner dans mon home directory $ maildirmake Maildir $ ls -l Maildir drwx------ 2 alex grpalex 4096 2008-02-13 13:58 cur drwx------ 2 alex grpalex 4096 2008-02-13 13:58 new drwx------ 2 alex grpalex 4096 2008-02-13 14:11 tmp
Pour automatiser la création du répertoire Maildir pour les nouveaux utilisateurs, on exécute la commande maildirmake dans le répertoire /etc/skel. Ainsi tous les nouveaux utilisateurs auront automatiquement le répertoire Maildir dans leur home directory :
# cd /etc/skel # maildirmake Maildir
[modifier] Installation du Webmail Squirrelmail
Si n'est déjà le cas, on installe le serveur Web Apache :
# apt-get install apache2
Pour installer Squirrelmail sous Debian, on tape la commande suivante :
# apt-get install squirrelmail
On peut configurer Squirrelmail en utilisant le programme squirrelmail-configure. Ce fichier permet configurer le fichier /etc/squirrelmail/config.php. A noter que l'on peut modifier directement ce fichier sans passer par squirrelmail-configure.
Squirrelmail est fourni avec la section à rajouter à Apache pour l'activer. On va donc dans le répertoire de configuration de Apache pour lui indiquer d'utiliser ce fichier :
# cd /etc/apache2/conf.d # ln -s /etc/squirrelmail/apache.conf squirrelmail.conf
On relance Apache :
# /etc/init.d/apache2 restart
On peut tester si Squirrelmail fonctionne avec son navigateur en se connectant à l'URL suivante :
http://localhost/squirrelmail/