# Le système d'exploitation GNU-Linux/Le serveur de mails Postfix

* Qu'est-ce qu'un système d'exploitation ?
* Unix et Linux
* Partitionnement du disque
* Installation
** Installer Debian via le réseau
* Utilisateur Unix, l'interface console
** Le login
** Variables d'environnement
** Commandes de base
** L'aide en ligne man
** L'éditeur de texte vi
** Les shells
** La complétion
** Les jokers
** Les répertoires importants
** Redirection des entrées/sorties
** Invoquer un programme en tâche de fond
** Propriétaires et droits d'accès
** Processus
** Locale
* Administration du système
** Configuration du réseau
** Les utilisateurs et groupes
** Le processus d'initialisation
** Les systèmes de fichiers
** Le système virtuel /proc
** Les périphériques /dev
** L'ordonnanceur de travaux cron
** Le backup : tar et gzip
** ghost avec partimage
** sauvegarde de fichiers avec rsync
** Les fichiers journaux syslog
** Installation de nouveaux logiciels
** Le noyau Linux et les modules
** Autres commandes utiles
** Installation RAID1 logiciel + LVM + XFS
** Scripts de surveillance
** Réseaux sans fil
* Administration des services réseaux
** L'outil d'administration Webmin
** telnet
** cURL
** wget
** Le serveur de noms BIND
** Le serveur de configuration réseau DHCP
** Le serveur de shell distant SSH
** Le partage de fichiers Samba
** Le partage de fichiers NFS
** Le serveur d'impression CUPS
** Le serveur de fichiers FTP
** Le serveur Web Apache
** Le serveur Web Nginx
** La base de données MySQL
** La base de données Memcached
** La base de données Redis
** Le serveur de mails Postfix
** Les annuaires LDAP
** La supervision Nagios
* Sécurisation d'un serveur Linux
** Installation d'un service en mode chroot
** Protection avec iptables
* Erreurs connues
* Médiagraphie
* Auteurs
* Qu'est-ce qu'un système d'exploitation ?
* Unix et Linux
* Partitionnement du disque
* Installation
** Installer Debian via le réseau
* Utilisateur Unix, l'interface console
** Le login
** Variables d'environnement
** Commandes de base
** L'aide en ligne man
** L'éditeur de texte vi
** Les shells
** La complétion
** Les jokers
** Les répertoires importants
** Redirection des entrées/sorties
** Invoquer un programme en tâche de fond
** Propriétaires et droits d'accès
** Processus
** Locale
* Administration du système
** Configuration du réseau
** Les utilisateurs et groupes
** Le processus d'initialisation
** Les systèmes de fichiers
** Le système virtuel /proc
** Les périphériques /dev
** L'ordonnanceur de travaux cron
** Le backup : tar et gzip
** ghost avec partimage
** sauvegarde de fichiers avec rsync
** Les fichiers journaux syslog
** Installation de nouveaux logiciels
** Le noyau Linux et les modules
** Autres commandes utiles
** Installation RAID1 logiciel + LVM + XFS
** Scripts de surveillance
** Réseaux sans fil
* Administration des services réseaux
** L'outil d'administration Webmin
** telnet
** cURL
** wget
** Le serveur de noms BIND
** Le serveur de configuration réseau DHCP
** Le serveur de shell distant SSH
** Le partage de fichiers Samba
** Le partage de fichiers NFS
** Le serveur d'impression CUPS
** Le serveur de fichiers FTP
** Le serveur Web Apache
** Le serveur Web Nginx
** La base de données MySQL
** La base de données Memcached
** La base de données Redis
** Le serveur de mails Postfix
** Les annuaires LDAP
** La supervision Nagios
* Sécurisation d'un serveur Linux
** Installation d'un service en mode chroot
** Protection avec iptables
* Erreurs connues
* Médiagraphie
* Auteurs
[ Modifier le sommaire ]

## 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 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

* 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 ?

* Sché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

* 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

* 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

* 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

Installer en premier Postfix, si un autre serveur de mail est déjà présent, il le supprimera :
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.

### Configuration de Postfix

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 :
On peut visualiser la totalité des options possibles de Postfix et leurs valeurs par défaut via la commande postconf :
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 :
Chaque fois que l'on modifie le fichier /etc/postfix/main.cf, il faut relancer Postfix :
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.
Dans un autre terminal :

## Ajouter une boite aux lettres

Pour 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

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.

### Adresse virtuelle

Activer la fonction dans :
avec :
Ensuite il faut définir les adresses emails dans /etc/postfix/virtual, sous forme de paires clé-valeur :
Puis créer la base de données à partir du fichier :

### Alias

Pour éditer la liste des adresses emails alias de celles d'une boite :
Par exemple en y ajoutant les plus fréquents :
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

Par 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 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

Pour installer procmail :
* 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 filtrage procmail 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é :
En cas de problème :

### fetchmail

Pour installer fetchmail :
Il se configure avec :
On peut par exemple lui dire de tout transférer vers procmail en y ajoutant :
Ou bien lui faire récupérer directement des boites utilisateurs distantes avec :
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

En 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 :
pour Ubuntu :
Ensuite, l'installation de Dovecot dépend du protocole souhaité dans le MUA qui viendra relever le courrier :

#### Serveur 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 :
On relance postfix :
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 :
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 :

## Webmails

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

SquirrelMail 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 :
Pour installer SquirrelMail sous Debian, on tape la commande suivante :
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 :
On relance Apache :
On peut tester si SquirrelMail fonctionne avec son navigateur en se connectant à l'URL suivante :

### Postfixadmin

Postfixadmin est un webmail qui fonctionne avec MySQL.

### Roundcube

Roundcube 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.
Et voilà : http://localhost/roundcube

## Configuration pour des envois distants

Pour 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).
* Règle DNS DMARC.
* Signature DKIM dans chaque email correspondant à l'enregistrement DNS TXT dédié.
* Absence de blacklistage sur l'adresse IP publique du SMTP.
* Optimisation du ratio texte / image à 60 / 40 %.
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

Tout d'abord, il faut générer une clé de cryptage asymétrique, puis indiquer son chemin dans main.cf :
En cas d'erreur, on peut vérifier sa mise en place avec
Pour plus d'information sur les certificats .pem, voir Apache/HTTPS.

## Références

* ↑ 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/

## Voir aussi

* Ubuntu/Mailman
* Système de noms de domaine/Extensions#La sécurisation de la messagerie électronique