Courrier électronique

Notions

Le service du courrier électronique repose en réalité sur plusieurs services :

  • la prise en charge et la transmission du courrier sortant par un serveur de courrier (mail exchanger ou MX) ;
  • la réception du courrier entrant, toujours par le serveur de courrier ;
  • la livraison du courrier dans des boîtes aux lettres, par un agent de livraison (mail delivery agent, ou MDA) ;
  • la mise à disposition du courrier livré, par un serveur de boîtes aux lettres.

Nous allons détailler une suggestion de configuration complète fonctionnelle, en utilisant :

  • Postfix comme serveur de courrier ;
  • Postfix et Procmail comme agent de livraison ;
  • Dovecot comme serveur de boîtes aux lettres.

De plus, la configuration proposée utilisera les comptes Unix de votre système comme comptes de messagerie.

Adresse électronique

On apprend en général qu'une adresse électronique a pour forme utilisateur@fournisseur. C'est en fait une vision déformée de la réalité, qui est plutôt : utilisateur@ordinateur.

Ainsi, quand vous envoyez un message à tournesol@example.net, votre message sera envoyé à l'ordinateur example.net, pour être livré à l'utilisateur tournesol. Ainsi, n'importe qui sur Internet peut recevoir du courrier sur son propre ordinateur, pour peu :

  • qu'il ait un nom de domaine (sinon, il faut utiliser l'adresse IP de l'ordinateur : tournesol@42.12.42.12, ça marche, mais ça le fait moyen…) ;
  • qu'il ait un serveur de courrier qui tourne et accepte le courrier.

Nom de domaine de messagerie

Avant de commencer, il faut disposer d'un nom de domaine. Pour pouvoir y recevoir du courrier, vous devez définir un enregistrement de type MX, pointant vers votre serveur de messagerie :

example.com.        MX   tintin.example.com.
tintin.example.com. A    192.0.2.12
tintin.example.com. AAAA 2001:db8:4212:4212:4212:4212:4212:4212

Serveur de courrier : Postfix

Logo Postfix

Commencez par installer Postfix, selon votre distribution, par exemple :

# aptitude install postfix

Configuration

Postfix se configure dans le fichier /etc/postfix/main.cf (vous pouvez télécharger mon fichier d'exemple comme base). La configuration utilise des variables, auxquelles on affecte des valeurs. Les explications complètes de ces variables se trouve dans le manuel postconf(5). Voici les plus importantes :

#######################
# Paramètres généraux #
#######################

# Nom de domaine de messagerie principal.
mydomain = example.com
# Nom d'hôte. 
myhostname = tintin.example.com
# Nom de domaine utilisé pour les adresses incomplètes.
myorigin = $mydomain

# Activer l'écoute IPv6.
inet_protocols = all

# Les clients SMTP sûrs, qui auront plus de privilèges
# (concrètement, le droit d'utiliser ce serveur comme relais).
mynetworks = 127.0.0.0/8 [::1]/128

################
# Serveur SMTP #
################

# Les noms de domaine pour lesquels on accepte le courrier.
mydestination = example.com, tintin.example.com, localhost, localhost.localdomain
# Si votre FAI ne vous permet pas de poster le courrier directement,
# utiliser son serveur SMTP comme relais en décommentant cette ligne.
#relayhost = smtp.fai.com

#######################
# Distribution locale #
#######################

# Commande pour distribuer le courrier.
mailbox_command = procmail -a "$EXTENSION"
# Taille limite des BàL
mailbox_size_limit = 51200000
# Caractère séparant le nom de destinataire d'un paramètre additionnel
# (adresses « plussées », du type <untel+nawak@example.com> → <untel@example.com>)
recipient_delimiter = +

Avec cette configuration, adaptée à votre domaine, ainsi que les valeurs par défaut des nombreux autres paramètres réglables, vous avez déjà un serveur de courrier fonctionnel et assez sécurisé.

Restrictions SMTP

Pour affiner cette configuration, vous pouvez régler finement les restrictions SMTP. Pour bien comprendre de quoi il s'agit, voici comment on soumet un message à un serveur :

  1. on se connecte au serveur example.com sur son port SMTP, pour commencer une transaction SMTP :
$ telnet example.com smtp
  1. le serveur répond en se présentant :
220 tintin.example.com ESMTP Postfix
  1. on se présente à notre tour :
HELO milou.example.net
  1. le serveur répond qu'il est prêt à recevoir un message :
250 tintin.example.com
  1. on annonce l'expéditeur, puis les destinataires du message :
MAIL FROM: <tournesol@example.net>
250 2.1.0 Ok
RCPT TO: <tintin@example.com>
250 2.1.5 Ok
  1. on envoie le message puis on ferme la connexion :
DATA
354 End data with <CR><LF>.<CR><LF>
Le contenu du message, y compris les en-têtes.
.
250 2.0.0 Ok: queued as 22D2A8871
QUIT
221 2.0.0 Bye

On peut donc distinguer quatre étapes où le client soumet des informations :

  • l'ouverture de la connexion ;
  • le HELO, où il se présente comme client SMTP ;
  • le MAIL FROM, où il présente l'expéditeur du message ;
  • le RCPT TO, où il présente le ou les destinataires du message.

Postfix applique à chacune de ces étapes des restrictions : ce sont des règles qui permettent de décider s'il faut accepter ou refuser un message. Par exemple, le serveur example.com devrait :

  • refuser le courrier mal formé ;
  • accepter tout le courrier bien formé envoyé par les utilisateurs de son ordinateur ;
  • accepter tout le courrier bien formé envoyé à destination d'un utilisateur de son domaine ;
  • refuser tout le courrier reçu de l'extérieur à destination de l'extérieur, pour éviter d'être un relais ouvert de pourriel.

Relais ouvert

Un relais ouvert, ou open relay, est un serveur de messagerie que accepte le courrier en provenance de n'importe qui, et à destination de n'importe quel expéditeur. De tels relais sont souvent utilisés par les spammeurs pour transmettre leur pourriel.

Il faut donc absolument éviter que son propre serveur se comporte en relais ouvert. Sans cela, il serait rapidement utilisé pour transmettre du pourriel, et risquerait de finir sur des listes de blocage, puis de voir tout son courrier sortant refusé par les autres serveurs de l'Internet. La configuration par défaut de Postfix ne se comporte pas comme relais ouvert, mais vous devez faire attention en la modifiant.

Voici un exemple de configuration plus fine que les réglages par défaut :

# Règles pour accepter ou refuser une connexion :
# - on attend une seconde (pour piéger les zombies) ;
# - on interdit la parallélisation là où il n'est pas sensé y en avoir.
smtpd_client_restrictions =
    permit_mynetworks, permit_sasl_authenticated,
    sleep 1, reject_unauth_pipelining
# Règles pour accepter ou refuser un message, dès lors qu'on connaît le nom
# de l'hôte de l'expéditeur (par sa commande HELO ou EHLO) :
# - on refuse les noms d'hôte invalides.
smtpd_helo_restrictions = reject_invalid_helo_hostname
# Règles pour accepter ou refuser un message, dès lors qu'on connaît l'adresse
# de l'expéditeur :
# - s'il vient d'un expéditeur inexistant de notre domaine, on le rejette ;
# - si le domaine de l'expéditeur n'a pas d'IP ou de MX, on le refuse ;
# - s'il vient d'un client sûr ou d'un client authentifié, on l'accepte ;
# - si l'adresse de l'expéditeur n'est pas sous forme canonique, on le refuse.
smtpd_sender_restrictions =
    reject_unlisted_sender, reject_unknown_sender_domain,
    permit_mynetworks, permit_sasl_authenticated,
    reject_non_fqdn_sender
# Règles pour accepter ou refuser un message, dès lors qu'on connaît le
# destinataire (par la commande RCPT TO) :
# - s'il est destiné à un expéditeur forgé chez nous, on le rejette ;
# - s'il est destiné à un domaine forgé, on le rejette ;
# - s'il vient d'un hôte sûr ou d'un client authentifié, on l'accepte ;
# - si l'adresse de destination n'est pas sous forme canonique, on le refuse ;
# - finalement, s'il n'est pas destiné à un domaine que l'on gère ou pour
#   lequel on relaie, on le refuse.
smtpd_recipient_restrictions =
    reject_unlisted_recipient, reject_unknown_recipient_domain,
    permit_mynetworks, permit_sasl_authenticated,
    reject_non_fqdn_recipient,
    reject_unauth_destination

Tester sa configuration

Après avoir modifié le fichier de configurations /etc/postfix/main.cf, rechargez Postfix :

/etc/init.d/postfix reload

Vous pouvez ensuite essayer votre configuration en soumettant un message, directement en SMTP. Essayez de le faire depuis le serveur lui-même, puis depuis l'extérieur, avec des adresses d'expédition et de réceptions à l'intérieur et hors de votre domaine. Voici ce que vous devez dire pour une transaction SMTP (les réponses du serveur s'intercaleront entre vos phrases) :

$ telnet example.com
HELO nom.de.la.machine.cliente
MAIL FROM: <untel@example.net>
RCPT TO: <untel@example.com>
RCPT TO: <untel@example.org>         # si vous voulez envoyer à plusieurs destinataires
DATA
From: Untel <untel@example.net>
To: Untel autre <untel@example.com>  # on met <untel@example.org> en copie cachée !
Subject: Test

Essai.
.
QUIT

Le courrier est alors livré dans les boîtes aux lettres des utilisateurs correspondants : /var/mail/utilisateur. Depuis un shell, vous pouvez consulter votre courrier de façon basique avec un logiciel comme mail, ou avec Mutt si vous l'avez installé.

Serveur de boîtes aux lettres : Dovecot

Logo Dovecot

POP3 ou IMAP ?

Il existe deux protocoles standards de service de boîtes aux lettres :

  • POP3 (post office protocol ou protocole de bureau de poste, version 3), qui permet de relever son courrier dans une boîte aux lettres unique, en en retirant les messages au fur et à mesure ;
  • IMAP (Internet message access protocol, ou protocole d'accès aux messages sur Internet, version 4), qui permet de consulter son courrier dans des boîtes aux lettres multiples, qui restent sur le serveur.

Alors, lequel utiliser ? Il est possible de servir les deux, et de laisser vos utilisateurs choisir selon leur préférence : POP3 s'ils préfèrent récupérer leur courrier sur leur propre machine pour le traiter, et IMAP s'ils préfèrent pouvoir le trier en le laissant sur le serveur pour y accéder depuis plusieurs machines. Sachez toutefois :

  • que l'utilisation d'IMAP n'empêche pas de consulter ses messages sans être forcément connecté au serveur : des clients de messagerie comme Thunderbird permettent de sauvegarder les messages en cache, précisément dans ce but ;
  • que l'utilisation d'IMAP n'exclut pas la récupération intégrale des messages sur une machine cliente : des outils de réplication comme isync ou OfflineIMAP permettent de copier toute la structure des boîtes aux lettres IMAP sur son ordinateur ;
  • que le service IMAP est beaucoup plus consommateur de puissance de calcul et d'accès aux données que POP3, surtout si vous conservez beaucoup de courrier sur le serveur et que vous allez souvent consulter de vieux messages.

Installation

Commencez par installer Dovecot. Dans certaines distributions, comme Debian, les services POP3 et IMAP sont fournis dans des paquets séparés :

# aptitude install dovecot-pop3d dovecot-imapd

La configuration par défaut de Dovecot est déjà fonctionnelle, mais peut être affinée. Dovecot se configure dans le fichier /etc/dovecot/dovecot.conf, qui est très bien documenté par ses commentaires. Voici quelques modifications utiles à apporter :

# Écouter en IPv6 et en IPv4 (par défaut, Dovecot n'écoute qu'en IPv4).
listen = [::]

# Interdire l'identification avec mot de passe sur les connexions
# non sécurisées.
disable_plaintext_auth = yes

# Emplacement de la boîte aux lettre du courrier entrant et des boîtes aux lettres secondaires.
mail_location = mbox:~/Mail:INBOX=/var/mail/%u

Après cela, vous pouvez recharger Dovecot :

# /etc/init.d/dovecot reload

Puis essayer de vous y connecter avec votre logiciel de messagerie préféré, en définissant un compte POP3 ou IMAP utilisant votre serveur, votre identifiant et votre mot de passe Unix.

Relais de messagerie avec identification : Postfix + Dovecot

Vous pouvez maintenant recevoir du courrier et le consulter. Vous pouvez également faire de votre serveur un relais de messagerie, qui vous permettra, à condition de vous identifier, d'envoyer du courrier depuis n'importe où sur Internet.

Relais de courrier

Classiquement, quand on envoie un message, c'est le serveur de courrier de l'ordinateur d'où le message est envoyé qui se charge :
  • de résoudre les noms de domaines des destinataires ;
  • de transmettre, en SMTP, le message aux serveurs de messagerie de ces domaines.

Aujourd'hui, peu d'ordinateurs de bureau disposent de leur propre serveur de messagerie. C'est pourquoi les logiciels de messagerie usuels transmettent en fait tout le courrier à envoyé à un relais de courrier, toujours en SMTP. C'est ce relais qui s'occupe alors de résoudre les domaines destinataires et de transmettre les messages.

Les fournisseurs d'accès à Internet proposent pour cela à leurs abonnés un serveur relais. Ce serveur accepte tout le courrier provenant… d'une connexion de chez eux. Ici, il s'agit de mettre en place votre propre relais, qui acceptera tout le courrier, depuis n'importe quelle connexion, à condition de s'identifier avant, avec votre identifiant et votre mot de passe.

Configuration de Dovecot

Postfix seul ne fournit pas de service d'identification, mais doit utiliser un serveur SASL externe. Ça tombe bien, Dovecot peut faire office de serveur SASL ! Pour activer ce service, dans le fichier de configuration /etc/dovecot/dovecot.conf, ajoutez (ou décommentez) ceci dans la section auth default { } :

auth default {
  …
  socket listen {
    client {
      path  = /var/spool/postfix/private/auth
      group = postfix
      mode  = 0660
    }
  }
  …
}

Il s'agit pour Dovecot de créer un socket Unix, sur lequel il écoutera les demandes d'identifications provenant de Postfix. Comme le service SMTP de Postfix est chrooté (emprisonné) dans le répertoire /var/spool/postfix/, il faut placer ce socket sous ce répertoire. Maintenant, relancez Dovecot :

# /etc/init.d/dovecot restart

Configuration de Postfix

Si vous avez suivi mon exemple de configuration des restrictions, Postfix est déjà prêt à accepter le courrier provenant d'utilisateurs identifiés. En revanche, il ne propose pas d'identification ! Il faut simplement le régler pour utiliser le service d'identification de Postfix :

# Activer l'identification SASL
smtpd_sasl_auth_enable = yes
# Utiliser le service d'identification de Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
# Noter dans les en-tête des messages l'identifiant de l'utilisateur.
smtpd_sasl_authenticated_header = yes

Postfix écoute actuellement sur le port SMTP, et proposera une identification uniquement après que le client sera passé en connexion sécurisée (en TLS, avec la commande STARTTLS). Le port SMTP étant souvent bloqué par des fournisseurs d'accès, si vous comptez utiliser votre serveur comme relais depuis des connexions étrangères (dans le sens : pas chez vous), vous devriez également activer deux autres services :

  • SMTPS : c'est un service SMTP par-dessus une connexion SSL, sur un port spécifique ;
  • submission : c'est un service SMTP dédié au relais, qui doit imposer une identification, sur un port spécifique.

Pour cela, éditez le fichier de configuration /etc/postfix/master.cf, qui définit les options spécifiques des différents services de Postfix. SMTPS et submission sont des services de type smtpd, qui vont utiliser le fichier de configuration /etc/postfix/main.cf, sauf pour certains paramètres que nous surchargeons aver les options -o :

smtp      inet  n       -       -       -       -       smtpd
submission inet n       -       -       -       -       smtpd
  -o smtpd_enforce_tls=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes

Finalement, relancez Postfix :

# /etc/init.d/postfix restart

Tester le relais de messagerie

Vous pouvez maintenant essayer d'envoyer du courrier depuis un autre ordinateur client, en configurant votre logiciel de messagerie pour qu'il utilise votre serveur comme relais. Définissez pour cela un compte SMTP, en utilisant votre serveur, sur le port submission (587), avec votre identifiant et votre mot de passe Unix.

Sécurisation

Pour utiliser les services de boîte au lettre et de relais avec identification, vous devez fournir votre identifiant et votre mot de passe. Pour éviter de transmettre ce mot de passe en clair sur Internet, il est donc important d'utiliser un système de sécurisation comme SSL ou TLS. Sous Debian, l'installation de Postfix et de Dovecot a déjà mis en place une sécurisation acceptable, mais il est intéressant de préparer un système adapté à votre domaine.

Allez plus loin

Pour pouvoir accéder à votre courrier électronique depuis n'importe quelle ordinateur disposant d'un accès au Web, vous pouvez installer un webmail.

Vous pouvez améliorer votre service de courrier en définissant des politiques d'envoi de courrier, qui permettront aux serveurs destinataires de vérifier que le courrier prétendument en provenance de votre domaine a bien été envoyé par vous. Il s'agit des services SPF et DKIM. Vous pouvez également mettre en place un système d'antispam côté serveur.

 
services/courrier_électronique.txt · Dernière modification: Sun Jan 17 23:28:18 2010 par elessar
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Debian Driven by DokuWiki