Le service du courrier électronique repose en réalité sur plusieurs services :
Nous allons détailler une suggestion de configuration complète fonctionnelle, en utilisant :
De plus, la configuration proposée utilisera les comptes Unix de votre système comme comptes de messagerie.
Adresse électronique
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 :
tournesol@42.12.42.12, ça marche, mais ça le fait moyen…) ;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
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é.
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 :
example.com sur son port SMTP, pour commencer une transaction SMTP :$ telnet example.com smtp
220 tintin.example.com ESMTP Postfix
HELO milou.example.net
250 tintin.example.com
MAIL FROM: <tournesol@example.net> 250 2.1.0 Ok RCPT TO: <tintin@example.com> 250 2.1.5 Ok
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 :
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 :
Relais ouvert
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
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é.
Il existe deux protocoles standards de service de boîtes aux lettres :
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 :
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.
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
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.
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
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 :
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
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.
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.
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.