Outils pour utilisateurs

Outils du site


serveurs:postfix

Postfix

Logo Postfix

Postfix est un serveur de courrier, ou MTA libre, conçu pour être efficace, sécurisé et agréable à administrer.

Installation

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 :

/etc/postfix/main.cf
#######################
# 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 qui accepte le courrier en provenance de n'importe qui, et à destination de n'importe quelle adresse. 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 :

/etc/main.cf
# 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 smtp
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é.

Relais de courrier avec identification

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

Pour effectuer l'identification des utilisateurs, par nom d'utilisateur de mot de passe, Postfix doit utiliser un serveur SASL externe. Deux logiciels peuvent fournir ce service : Dovecot ou Cyrus SASL. Nous vous conseillons d'utiliser Dovecot, surtout si vous l'utilisez également pour le service de boîtes aux lettres.

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, ajoutez (ou décommentez) ceci dans la section auth default du fichier de configuration /etc/dovecot/dovecot.conf pour Dovecot 1.2 ou dans la section service auth du fichier /etc/dovecot/conf.d/10-master.conf pour Dovecot 2 :

/etc/dovecot.conf
auth default {
  …
  socket listen {
    client {
      path  = /var/spool/postfix/private/auth
      group = postfix
      mode  = 0660
    }
  }}
/etc/dovecot/conf.d/10-master.conf
service auth {
  …
  unix_listener auth-userdb {}
 
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    group = postfix
  }
}

Il s'agit pour Dovecot de créer un socket Unix, sur lequel il écoutera les demandes d'identification 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 :

/etc/main.cf
# 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 :

/etc/postfix/master.cf
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 courrier

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.

serveurs/postfix.txt · Dernière modification: Wed Oct 2 15:57:00 2013 par elessar