Le système d'exploitation GNU-Linux/Le serveur de mails Postfix
Le serveur de mail Postfix
modifierPostfix 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 et qu'il contient des failles de sécurité.
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...
Quelques définitions
modifier- DNS : Domain Name System (port 53), pour convertir les adresses URL en adresses IP.
- 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 Transfer Agent. Il s'agit des serveurs de mails SMTP.
- MDA : Mail Delivery Agent. Il s'agit du serveur qui dépose les messages dans chaque boîte aux lettres (POP ou IMAP).
- MUA : Mail User Agent. Il s'agit des logiciels clients de messagerie, ex : Mozilla Thunderbird, Microsoft Outlook, KMail, Eudora, ou Evolution.
Comment ça marche ?
modifierSchéma du cheminement des mails entre les correspondants (trois cas illustrés en fonction des moyens mis en œuvre). |
---|
Le schéma précédent nous propose trois cas de figure :
Cas numéro 1
modifier- 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
Cas numéro 2
modifier- Notre ami Paul fait partie 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 ou IMAP qui va rapatrier directement les mails paul@asso.org
Cas numéro 3
modifier- 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 un Webmail.
Installation de Postfix
modifierInstaller 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
Configuration de Postfix
modifier
Pour que cela fonctionne sur Internet, il faut que le nom local du serveur (hostname) soit le même que celui du réseau (défini dans les DNS). Dans cet exemple, il s'appellera mail.mondomaine.fr. De plus, il faut commenter la ligne ci-dessous mydestination
qui bride les envois vers l'extérieur.
Le fichier de configuration principal de Postfix est /etc/postfix/main.cf
. Copier le suivant en remplaçant mondomaine.fr
par le vrai domaine du serveur :
mv /etc/postfix/main.cf /etc/postfix/main.oldcf # Archivage
> /etc/postfix/main.cf # Blanchiment
vim /etc/postfix/main.cf # Accès pour coller la configuration ci-dessous
# 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 à l'émetteur si son mail n'est pas
# parti au bout d'un certain temps
#delay_warning_time = 4h
# 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
# Le nom de machine FQDN (doit être en accord avec le DNS)
mydomain = mondomaine.fr
myhostname = mail.$mydomain
# Liste des domaines principaux dont on accepte le courrier
mydestination = $mydomain, $myhostname, localhost, localhost.$mydomain
# 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
...
En français ça donne : délivre en local les emails vers mydestination
avec mailbox_command
, sinon délivre-les sur Internet mais en refusant ceux qui ne viennent pas de mynetworks
ou relayhost
(s'ils sont vides on accepte rien, s'ils sont commentés on accepte tout, même de relayer des spams).
Une fois main.cf
sauvegardé pour la première fois, on vérifie 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: CTRL+D
Dans un autre terminal :
# tail -f /var/log/mail.log ... Feb 13 13:10:40 mail postfix/pickup[13353]: B782A1FD6F: uid=0 from=<root> Feb 13 13:10:40 mail postfix/cleanup[13675]: B782A1FD6F: message-id=<20080213121040.B782A1FD6F@mail.mondomaine.fr> Feb 13 13:10:40 mail postfix/qmgr[13354]: B782A1FD6F: from=<root@mail.mondomaine.fr>, size=355, nrcpt=1 (queue active) Feb 13 13:10:40 mail postfix/local[13677]: B782A1FD6F: to=<alex@mail.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 mail postfix/qmgr[13354]: B782A1FD6F: removed ...
Ajouter une boite aux lettres
modifierPour ajouter une boite aux lettres, il existe trois solutions :
- Créer un compte Unix.
- Créer une adresse virtuelle.
- Créer un alias.
Les voici en lignes de commandes, mais elles sont aussi réalisables au moyen d'un webmail.
Nouveau compte système
modifierPour 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
Adresse virtuelle
modifierActiver la fonction dans :
vim /etc/postfix/main.cf
avec :
virtual_alias_maps = hash:/etc/postfix/virtual
Ensuite il faut définir les adresses emails dans /etc/postfix/virtual
, sous forme de paires clé-valeur[2] :
postmaster@mail.mondomaine.fr root
Puis créer la base de données à partir du fichier :
postmap /etc/postfix/virtual postfix reload
Alias
modifierPour éditer la liste des adresses emails alias de celles d'une boite :
vim /etc/aliases
Par exemple en y ajoutant les plus fréquents :
MAILER-DAEMON: root
postmaster: root
abuse: root
Ainsi, quelqu'un qui voudra reporter un problème à abuse@mondomaine.fr écrira dans la boite de root, ce qui sera visible par une notification à chaque fois que ce dernier se connectera en SSH.
Puis la commande newaliases
crée alors /etc/aliases.db
à partir de cette liste.
MDA : filtres de courrier électronique
modifierPar défaut les emails des boites créées ci-dessus s'empilent tous dans un fichier de /var/mail/
. Afin de les router vers des boites mails séparées, on utilise un ou plusieurs[3] logiciels Mail Delivery Agent.
- Pour les transferts locaux (vers une boite mail personnelle du serveur), ils utilisent le protocole LMTP.
- Pour les transferts distants (vers un client de messagerie), il faut choisir entre le protocole POP3 (qui déplace les emails vers le client) et IMAP (qui laisse une copie des emails sur le serveur).
Voici plusieurs exemples de MDA :
procmail
modifierPour installer procmail[4][5] :
$ sudo apt-get install procmail
$ vim ~/.forward
"|IFS=' '&&exec /usr/bin/procmail -f-||exit 75 #user"
$ vim ~/.procmailrc
PATH=/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
$ maildirmake ~/Maildir
- En remplaçant user par l'utilisateur du processus.
- Sur Ubuntu il s'installe dans
/usr/bin/procmail
, mais d'autres distributions nécessitent d'adapter ce chemin ci-dessus.
Explications :
- Le fichier utilisateur
.forward
permet d'insérer le filtrageprocmail
dans le parcours des emails à destination de cet utilisateur. - Le fichier
.procmailrc
configure le filtrage pour l'utilisateur concerné. maildirmake
crée l'arborescence nécessaire à l'accueil des emails :new
(nouveau) : boite de réception.cur
(courante) : boite courante.tmp
(temporaire) : mails en transit.
Pour voir s'il fonctionne, envoyer un email à l'utilisateur configuré ci-dessus, puis regarder s'il est arrivé :
ls -alh /home/user/Maildir/new/
En cas de problème :
tail /var/log/mail.log
fetchmail
modifierPour installer fetchmail :
apt-get install fetchmail
Il se configure avec :
vim ~/.fetchmailrc
On peut par exemple lui dire de tout transférer vers procmail en y ajoutant :
mda "/usr/bin/procmail -Y -d %T"
Ou bien lui faire récupérer directement des boites utilisateurs distantes avec :
poll example.com protocol pop3 username "user1" password "password1"
La ligne mailbox_command
du fichier /etc/postfix/main.cf
doit pointer vers procmail, qui reroute ensuite vers fetchmail.
fetchmail peut récupérer les emails de fournisseurs externes, tels que Gmail, Yahoo ou Outlook.com, par cron. C'est un mail retrieval agent (MRA).
Dovecot
modifierEn plus d'un MDA intégré, Dovecot intègre un serveur POP ou IMAP.
Tout comme pour fetchmail, il peut fonctionner en aval de procmail. Toutefois, il est possible de remplacer procmail par Dovecot dans /etc/postfix/main.cf
[6] :
mailbox_command = /usr/local/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"
pour Ubuntu :
mailbox_command = /usr/lib/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"
Ensuite, l'installation de Dovecot dépend du protocole souhaité dans le MUA qui viendra relever le courrier :
Serveur POP
modifierapt-get install dovecot-pop3d
Serveur IMAP
modifierapt-get install dovecot-imapd
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 :
vim /etc/postfix/main.cf
# Commenter la ligne :
#mailbox_command = procmail -a "$EXTENSION"
# Puis pour utiliser le format Maildir, ajouter :
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 fournie par dovecot-imapd ou 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/postmaster. Ainsi tous les nouveaux utilisateurs auront automatiquement le répertoire Maildir dans leur home directory :
# cd /etc/postmaster
# maildirmake Maildir
Webmails
modifier
Par défaut les webmails cherchent les courriels dans le dossier définit dans le serveur POP ou IMAP, et qui peut être différent de là où ils sont distribués.
Par exemple pour la configuration ci-dessus avec Dovecot, /etc/dovecot/conf.d/10-mail.conf
doit contenir mail_location = maildir:/home/%u/Maildir
.
SquirrelMail
modifierSquirrelMail est un webmail très simple à installer, qui fonctionne sans SGBD. Outre les envois et réceptions d'emails, il permet d'archiver en créant ou supprimant des dossiers.
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. À 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 :
# ln -s /etc/squirrelmail/apache.conf /etc/apache2/conf.d/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/
Postfixadmin
modifierPostfixadmin est un webmail qui fonctionne avec MySQL.
apt-get install postfixadmin
Roundcube
modifierRoundcube est un webmail qui fonctionne avec MySQL, PostgreSQL, SQLite ou MSSQL. Il est très ergonomique (glisser-déposer, effacement en masse avec Maj + clic puis Suppr), plus graphique mais plus lent et moins stable que SquirrelMail.
apt-get install roundcube roundcube-mysql
php5enmod mcrypt
/etc/init.d/apache2 restart
Et voilà : http://localhost/roundcube
Configuration pour des envois distants
modifierPour que les emails ne soient pas directement écartés ou classés dans les spams par les serveurs de messagerie des destinataires, il faut impérativement montrer patte-blanche de plusieurs façons :
- Règle de reverse DNS.
- Règle DNS SPF (1 ou 2[7]).
- Règle DNS DMARC.
- Signature DKIM dans chaque email[8] correspondant à l'enregistrement DNS TXT dédié.
- Absence de blacklistage sur l'adresse IP publique du SMTP[9].
- Optimisation du ratio texte / image à 60 / 40 %[10].
Un serveur de messagerie qui accepte d'envoyer des emails pour le compte de n'importe qui se retrouvera rapidement blacklisté par des organismes antispams, dont les listes sont utilisées par de nombreux serveurs MX. Et cela peut coûter de l'argent pour se déblacklister. Pour s'en prémunir, il est donc très fortement recommandé de laisser le paramètre relayhost =
non commenté.
Sécurisation TLS
modifierTout d'abord, il faut générer une clé de cryptage asymétrique, puis indiquer son chemin dans main.cf
:
# 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.
En cas d'erreur, on peut vérifier sa mise en place avec
openssl s_client -debug -starttls smtp -crlf -connect localhost:25
Pour plus d'information sur les certificats .pem, voir Apache/HTTPS.
Références
modifier- ↑ http://doc.ubuntu-fr.org/postfix
- ↑ https://www.digitalocean.com/community/tutorials/how-to-install-and-setup-postfix-on-ubuntu-14-04
- ↑ http://www.troubleshooters.com/lpm/201202/images/dovecot_setup.png
- ↑ « Utilisation simple de procmail »
- ↑ (en) « A Quick, Practical Procmail Guide »
- ↑ http://wiki.dovecot.org/LDA/Postfix
- ↑ http://www.clickz.com/clickz/column/1695095/hotmail-delivery-tips-sender-id-spf
- ↑ https://www.isalo.org/wiki.debian-fr/Amavisd-new_et_DKIM
- ↑ http://whatismyipaddress.com/blacklist-check
- ↑ http://themediaonline.co.za/2011/07/the-five-rules-of-designing-email/