Postfix

Postfix est le Service de Transfert de Courriel (MTA) par défaut d'Ubuntu. Il est conçu pour être sûr autant que facile et rapide à configurer. Il est compatible avec le MTA sendmail. Cette section détaille l'installation et la configuration de postfix. Elle explique aussi comment en faire un serveur SMTP utilisant une connexion sécurisée (afin d'assurer la sécurité des courriels envoyés).

Ce guide n'explique cependant pas comment mettre en place des Domaines Virtuels Postfix. Pour obtenir des informations sur les Domaines Virtuels et d'autres configurations avancées, voir Références.

Installation

Pour installer postfix, exécutez la commande suivante :

sudo apt install postfix

Appuyez simplement sur la touche « entrée » lorsque le processus d'installation pose des questions, la configuration se fera plus en détail dans la prochaine étape.

Configuration de base

Pour configurer postfix, exécutez la commande suivante :

sudo dpkg-reconfigure postfix

L'interface utilisateur va s'afficher. Sur chaque écran, sélectionnez les valeurs suivantes :

  • Site Web

  • courriel.exemple.fr

  • steve

  • courriel.exemple.fr, localhost.localdomain, localhost

  • Non

  • 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24

  • 0

  • +

  • tous

Replace mail.example.com with the domain for which you'll accept email, 192.168.0.0/24 with the actual network and class range of your mail server, and steve with the appropriate username.

C'est maintenant le bon moment pour choisir le format de boite courriel que vous souhaitez utiliser. Par défaut, Postfix utilisera le format mbox. Plutôt que d'éditer directement le fichier de configuration, vous pouvez utiliser la commande postconf pour configurer tous les paramètres de postfix. Les paramètres de configuration seront conservés dans le fichier /etc/postfix/main.cf. Plus tard, si vous souhaitez reconfigurer un paramètre en particulier, vous pourrez soit réutiliser cette commande, soit éditer manuellement ce fichier.

Pour utiliser le format de boîte aux lettres Maildir :

sudo postconf -e 'home_mailbox = Maildir/'

Cela placera les nouveaux courriels dans /home/nom_utilisateur/Maildir, vous aurez donc besoin de configurer votre agent de distribution du courrier (MDA) de façon à utiliser le même chemin.

Authentification SMTP

SMTP-AUTH permet à un client de s'identifier par un méchanisme d'authentification (SASL). Transport Layer Security (TLS) devrait être utilisée afin de chiffrer le processus d'authentification. Une fois authentifié, le serveur SMTP autorisera le client à relayer les courriels.

  1. configurez Postfix pour SMTP-AUTH en utilisant SASL (Dovecot SASL):

    sudo postconf -e 'smtpd_sasl_type = dovecot'
    sudo postconf -e 'smtpd_sasl_path = private/auth'
    sudo postconf -e 'smtpd_sasl_local_domain ='
    sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
    sudo postconf -e 'broken_sasl_auth_clients = yes'
    sudo postconf -e 'smtpd_sasl_auth_enable = yes'
    sudo postconf -e 'smtpd_recipient_restrictions = \
    permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
    

    Le chemin smtpd_sasl_path est un chemin relatif au répertoire de la file d'attente (queue) de Postfix.

  2. Ensuite, générez ou obtenez un certificat numérique pour TLS. Voir Certificats pour plus de détails. Cet exemple utilise également une autorité de certification (CA). Pour plus d'informations sur la génération d'un certificat, voir Autorité de certification.

    MUAs connecting to your mail server via TLS will need to recognize the certificate used for TLS. This can either be done using a certificate from a commercial CA or with a self-signed certificate that users manually install/accept. For MTA to MTA TLS certficates are never validated without advance agreement from the affected organizations. For MTA to MTA TLS, unless local policy requires it, there is no reason not to use a self-signed certificate. Refer to Création d'un certificat auto-signé (Self-Signed Certificate ou SSC) for more details.

  3. Une fois que vous avez un certificat, configurez Postfix pour fournir l'encryptage à l'aide du protocole TLS des e-mails entrants et sortants :

    sudo postconf -e 'smtp_tls_security_level = may'
    sudo postconf -e 'smtpd_tls_security_level = may'
    sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
    sudo postconf -e 'smtpd_tls_key_file = /etc/ssl/private/server.key'
    sudo postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/server.crt'
    sudo postconf -e 'smtpd_tls_loglevel = 1'
    sudo postconf -e 'smtpd_tls_received_header = yes'
    sudo postconf -e 'myhostname = mail.example.com'
    
  4. Si vous utilisez votre propre autorité de certification, saisissez ce qui suit pour signer le certificat :

    sudo postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem'
    

    De nouveau, pour plus de détails sur les certificats, consultez Certificats.

Après avoir exécuté toutes les commandes, Postfix est configuré pour SMTP-AUTH et un certificat autosigné a été créé pour le cryptage TLS.

Maintenant, le fichier /etc/postfix/main.cf devrait ressembler à ceci :

# See /usr/share/postfix/main.cf.dist for a commented, more complete
# version

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

myhostname = server1.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = server1.example.com, localhost.example.com, localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,permit_mynetworks,reject _unauth_destination
smtpd_tls_auth_only = no
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/ssl/private/smtpd.key
smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt
smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

La configuration initiale de Postfix est terminée. Tapez la commande suivante pour redémarrer le démon Postfix :

sudo systemctl restart postfix.service

Postfix prend en charge le protocole SMTP-AUTH tel que défini dans la RFC2554. Il est basé sur SASL. Toutefois, il est encore nécessaire de mettre en place l'authentification SASL avant de pouvoir utiliser SMTP-AUTH.

Configuration de SASL

Postfix supports two SASL implementations Cyrus SASL and Dovecot SASL. To enable Dovecot SASL the dovecot-core package will need to be installed. From a terminal prompt enter the following:

sudo apt install dovecot-core

Ensuite, vous devrez modifier /etc/dovecot/conf.d/10-master.conf. Changez ce qui suit :

service auth {
  # auth_socket_path points to this userdb socket by default. It's typically
  # used by dovecot-lda, doveadm, possibly imap process, etc. Its default
  # permissions make it readable only by root, but you may need to relax these
  # permissions. Users that have access to this socket are able to get a list
  # of all usernames and get results of everyone's userdb lookups.
  unix_listener auth-userdb {
    #mode = 0600
    #user = 
    #group = 
  }

  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }

Afin de permettre aux clients Outlook d'utiliser le protocole SMTP-AUTH, dans la section authentication mechanisms de /etc/dovecot/conf.d/10-auth.conf, changez cette ligne :

auth_mechanisms = plain

En ceci :

auth_mechanisms = plain login

Une fois que vous avez configuré Dovecot, faites le redémarrer avec :

sudo systemctl restart dovecot.service

Mail-Stack Delivery

Une autre option de configuration de Postfix pour SMTP-AUTH est l'utilisation du paquet mail-stack-delivery (nommé auparavant dovecot-postfix). Ce paquet installera Dovecot et configurera Postfix afin d'utiliser Dovecot pour l'authentification SASL et en tant qu'agent distributeur de courriel. Le paquet configure également Dovecot pour les protocoles IMAP, IMAPS, POP3, et POP3S.

You may or may not want to run IMAP, IMAPS, POP3, or POP3S on your mail server. For example, if you are configuring your server to be a mail gateway, spam/virus filter, etc. If this is the case it may be easier to use the above commands to configure Postfix for SMTP-AUTH.

Pour installer le paquet, saisissez dans un terminal :

sudo apt install mail-stack-delivery

Votre serveur de courriel devrait être opérationnel, mais vous voudrez sans doute configurer certaines options. Par exemple, le paquet utilise le certificat et la clé du paquet ssl-cert, mais dans un environnement de production, vous devriez utiliser un certificat et une clef créée pour l'hôte. Consultez Certificats pour de plus amples informations.

Changez les options suivantes dans /etc/postfix/main.cf une fois que vous avez personnalisé un certificat et une clé pour l'hôte :

smtpd_tls_cert_file = /etc/ssl/certs/ssl-mail.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-mail.key

Redémarrez ensuite Postfix :

sudo systemctl restart postfix.service

Tests

La configuration de SMTP-AUTH est terminée. Il est maintenant temps de tester la configuration.

Pour vérifier que SMTP-AUTH et TLS fonctionnent correctement, exécutez la commande suivante :

telnet mail.example.com 25

Après avoir établi la connexion au serveur Postfix, tapez :

ehlo mail.example.com

Si vous voyez, entre autres, les lignes suivantes, alors tout fonctionne parfaitement. Tapez quit pour sortir.

250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME

Dépannage

Cette section introduit les méthodes de base pour déterminer les causes d'un éventuel problème.

Échappement du chroot

Le paquet postfix d'Ubuntu s'installera par défaut dans un environnement chroot par mesure de sécurité. Ceci peut accroître la complexité de la résolution de problèmes.

Pour désactiver l'opération chroot essayez de trouver la ligne suivante dans le fichier de configuration /etc/postfix/master.cf :

smtp inet n - - - - smtpd

et la modifier ainsi :

smtp inet n - n - - smtpd

Vous devrez ensuite redémarrer Postfix pour utiliser la nouvelle configuration. A parti d'un terminal, saisissez :

sudo systemctl restart postfix.service

Smtps

Si vous avez besoin de smtps, modifiez /etc/postfix/master.cf et décommentez la ligne suivante :

smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
	  

Fichiers journaux

Postfix inscrit tous les messages de journalisation dans /var/log/mail.log. Cependant, les erreurs et les alertes peuvent quelquefois disparaître dans les messages normaux, ils sont donc également inscrits dans /var/log/mail.err et /var/log/mail.warn respectivement.

Pour voir en temps réel les messages inscrits dans les journaux, vous pouvez utiliser la commande tail -f :

tail -f /var/log/mail.err

La quantité de renseignements enregistrés dans les journaux peut être augmenté. Voici quelques options de configuration afin d'augmenter le niveau de journalisation pour certains des domaines visés ci-dessus.

  • Afin d'accroître l'activité de log de TLS, configurez l'option smtpd_tls_loglevel sur une valeur entre 1 et 4.

    sudo postconf -e 'smtpd_tls_loglevel = 4'
    
  • Si vous avez des problèmes d'envoi ou de réception de courriers électroniques en provenance d'un domaine spécifique vous pouvez ajouter ce domaine à la directive debug_peer_list.

    sudo postconf -e 'debug_peer_list = problem.domain'
    
  • Vous pouvez accroître la verbosité de n'importe quel démon Postfix en modifiant /etc/postfix/master.cf et en ajoutant -v après l'entrée. Par exemple, modifiez l'entrée smtp :

    smtp unix - - - - - smtp -v
    

It is important to note that after making one of the logging changes above the Postfix process will need to be reloaded in order to recognize the new configuration: sudo systemctl reload postfix.service

  • Pour augmenter la quantité d'informations journalisées lors du dépannage de problèmes avec SASL, vous pouvez définir les options suivantes dans /etc/dovecot/conf.d/10-logging.conf

    auth_debug=yes
    auth_debug_passwords=yes
    

Just like Postfix if you change a Dovecot configuration the process will need to be reloaded: sudo systemctl reload dovecot.service.

Certaines options ci-dessous peuvent dramatiquement augmenter la quantité d'informations inscrites dans les fichiers journaux. Pensez à ramener le niveau de journalisation à la normale une fois que vous aurez détecté et corrigé le problème. Ensuite redémarrez le démon afin que la nouvelle configuration soit prise en compte.

Références

Administrer un serveur Postfix peut être une tâche très complexe. À un certain moment, vous devrez peut-être vous tourner vers la communauté Ubuntu pour être aidé par des utilisateurs plus expérimentés.

Un endroit génial pour demander de l'assistance pour Postfix et s'impliquer dans la communauté Ubuntu Server, est le canal IRC (anglophone) #ubuntu-server sur freenode. Vous pouvez aussi poster un message sur les forums Ubuntu francophones.

Pour des informations plus complètes sur Postfix, les développeurs Ubuntu recommandent vivement :The Book of Postfix.

Enfin, le site web Postfix possède également une grande documentation sur toutes les différentes options de configuration disponibles.

De plus, la page du wiki Ubuntu sur Postfix (en anglais) contient plus d'informations.