Ceci est une ancienne révision du document !


Comment configurer sa distribution de courriels systèmes MTA avec Postfix ?

Paramétrer un serveur de messagerie est un processus complexe mettant en œuvre de nombreux programmes (MTA, MDA, MUA et des filtrages), qui ont chacun besoin d'être correctement configurés. Voir l'explication pédagogique Comment fonctionne le courriel sous Linux ? pour vous aider sur la compréhension de ce qu'est la messagerie.

La meilleure approche est d'installer et configurer chaque composant individuellement, et s'assurer que chacun fonctionne. Ceci va permettre de construire son serveur de messagerie progressivement.

Ici nous allons étudier le serveur de messageries Postfix porté par IBM qui est le serveur par défaut d'Ubuntu. Il est le successeur de Sendmail avec pour but d'en résoudre les problèmes de sécurité, et d'offrir une administration beaucoup plus souple et modulaire que ce dernier.

D'autres serveurs de messagerie MTA existent comme : Exim, ssmtp, msmtp avec le tutoriel, Qmail, XMail, OpenSMTPD, Lotus Notes, Exchange, etc.

Postfix est ce que l'on appelle en anglais un MTA (Mail Transfer Agent). Le MTA, le Centre de Distribution des Courriels, est un serveur de messagerie qui :

  • Expédie, à partir de la boite aux lettres de dépôts des courriels, les messages en tant que client vers un autre centre de distribution des messages MTA. C'est l'expédition des courriels.
  • Reçoit les messages d'un autre centre de distribution de messages MTA, en tant que serveur. C'est la réception des courriels.
  • Trie les courriels reçus pour les distribuer à une boite aux lettres utilisateur ou pour les expédier vers un autre centre de distribution des messages MTA. C'est la distribution des courriels.

Tout ceci se fait au travers du protocole SMTP (Simple Mail Transfer Protocol) pour la distribution des courriels et leurs transports vers les serveurs messagerie de distribution de courriels MTA destinataires.

Les termes Mail Server, Mail Exchanger, Mail Relay et MX Hosts peuvent aussi faire référence à un serveur MTA

Les fichiers de configuration du serveur de messageries se trouvent dans /etc/postfix.

Les fichiers les plus utilisés pour configurer le serveur sont main.cf et master.cf, attention ils appartiennent au compte root.

Un minimum de paramètres doivent être configurés dans main.cf pour que la messagerie fonctionne.

Qui est gestionnaire de la messagerie ?

Mais avant toute configuration de main.cf, pour avoir un suivi du fonctionnement de la distribution des courriels, il est préférable de définir un utilisateur en gestion des incidents de messagerie.

Dans Postfix, pour cela il faut éditer le fichier /etc/aliases (kate /etc/aliases) pour relayer, par mail à l'utilisateur gestionnaire, la supervision du fonctionnement du serveur de messagerie.

Modifiez alors les variables de ce fichier comme ci-dessous :

  • Pour ne relayer que la supervision de la messagerie :
postmasteur: votre_compte_linux # pour relayer par l'utilisateur votre_compte_linux, avec la messagerie, la supervision de la messagerie.
  • Si l'administrateur du serveur est le même que celui de la messagerie :
postmasteur: root # pour relayer par l'utilisateur root, avec la messagerie, la supervision de la messagerie
root: votre_compte_linux # pour relayer la supervision du serveur, avec la messagerie, au gestionnaire du serveur.

Passer la commande postalias pour valider les modifications dans Postfix :

sudo postalias /etc/aliases

Quels incidents rapporter au superviseur de la messagerie et comment ?

Le nombre des messages qui vont vous être envoyés par Postfix peut vite devenir du SPAM. Il est peut-être pertinent de ne pas recevoir tous les types d'informations. C'est la variable notify_classes dans main.cf qui nous permet de filtrer tout cela. Les valeurs possibles sont :

  • bounce : Informe le gestionnaire du courriel non livré.
  • 2bounce : Informe le gestionnaire de la non livraison de l'avis de non livraison d'un courriel.
  • delay: Informe le gestionnaire des courriels retardés.
  • policy: Informe sur les courriers rejetés pour cause de SPAM (restrictions UCE).
  • protocol : Informe le gestionnaire des erreurs de protocole SMTP.
  • ressource : Informe le gestionnaire des erreurs de distributions pour des raisons de non disponibilités de ressources pour la distribution des courriels.
  • software : Informe le gestionnaire des erreurs de distributions pour des raisons logicielles.

Pour un utilisateur novice il faut éditer /etc/postfix/main.cf (kate /etc/postfix/main.cf).

Modifiez/Ajouter la variable notify_class comme ci-dessous :

notify_classes = ressource, software # Valeurs par défaut de Postfix

Comment consulter les incidents ?

Voir l'état du serveur Postfix :

systemctl status postfix.service

Voir les logs de Postfix :

journalctl -u postfix -f
Pour quitter journalctl tapez ctrl+c . Pour plus d'infos

et

cat /var/log/mail.log
cat /var/log/mail.err

Voir les messages en file d'attente :

mailq

ou

postqueue -p

ou

qshape # montre une vue du contenu de la file d’attente de Postfix sous forme de tableau

ou

qshape active #pour ceux actif en file d'attente

ou

qshape deferred #pour les mails de la file d’attente retardée

Comment supprimer les messages bloqués dans la file d'attente ?

sudo postsuper -d ALL deferred # pour vider la file retardée
sudo postsuper -d ALL # pour vider toutes les files

Où se trouve la boite aux lettres des courriels des utilisateurs du système Linux ?

Si vous ne voulez pas relever votre courrier à la poste (vos colis chez votre livreur), votre facteur, votre livreur de colis, doit savoir où trouver la boite aux lettres personnelle à l'adresse de livraison de votre domicile. Afin de leur permettre de délivrer les lettres ou les colis qui vous sont adressés en votre absence. C'est pour cela que les boites aux lettres des particuliers sont normalisées.

Dans Postfix, c'est la variable home_mailbox qui définit pour votre serveur de messagerie où se trouve la boite aux lettres des utilisateurs.

Exemple :

home_mailbox = Mailbox/ # Les boites aux lettres des utilisateurs se trouvent dans /home/«utilisateur»/Mailbox/ et sont au format Maildir.
home_mailbox = .local/share/local-mail/inbox/ # Les boites aux lettres des utilisateurs se trouvent dans /home/«utilisateur»/.local/share/local-mail/inbox/ 
home_mailbox = .local/share/akonadi_maildir_ressource_0/inbox/ # La boite aux lettres des utilisateurs kmail
Pour avoir une boite aux lettres au format Mailbox (tout dans un fichier) il faut une syntaxe du genre répertoire/chemin/fichier_boite_aux_lettres . Pour le format Maildir (avec des répertoires) il faudra l'écrire comme un répertoire répertoire/chemin/répertoire_boite_aux_lettres/ .

Quel nom de centre de distribution de messages afficher pour nos courriels utilisateurs sortant ?

Une adresse mail utilisateur@fournisseur_messagerie.fr se compose invariablement de trois éléments :

  1. Le nom du destinataire (le compte utilisateur, un nom, etc.). Ici c'est «utilisateur».
  2. @ comme séparateur (entre le destinataire et le domaine serveur SMTP de messagerie).
  3. Le nom de domaine du serveur SMTP, centre de distribution des messages. Ici c'est «fournisseur_messagerie.fr».

Donc si l'on fait un rapprochement avec le courrier écrit, le nom du destinataire est identique au nom du destinataire d'un courrier postal. Et la machine serveur SMTP, le centre de distribution des messages, c'est votre adresse postale complète du lieu d'habitation ou géographique d'entreprise/d'établissement.

La variable myorigin est alors utilisée par Postfix pour spécifier le nom de votre serveur de courriels comme centre de distribution des messages.

Exemples :

myorigin = $myhostname	# envoie le courriel comme «utilisateur@valeur_de_myhostname»
myorigin = $mydomain	# envoie le courriel comme «utilisateur@valeur_de_mydomain» (a privilégier pour respecter le principe d'adresse de centre de distribution des messages)
myorigin = fm.perso	# envoie le courriel comme «utilisateur@fm.perso»
Sous Ubuntu la définition de la variable myorigin se fait dans le fichier /etc/mailname.
Vous pouvez voir la valeur des variables de Postfix avec la commande postconf nom_de_mavariable_postfix. Exemple : postconf myhostname

La variable myhostname peut être spécifiée dans le cas où celle-ci ne renvoie pas la bonne valeur. Pour voir le nom de machine tapez la commande «hostname».

La variable mydomain peut aussi être spécifiée pour le nom de domaine (dans le cas où Postfix renvoie localdomain avec cette variable par exemple). Pour voir le nom de domaine système tapez la commande «hostname -d».

Exemple :

myhostname = mon_nom_de_serveur		# fixe le nom du serveur à «mon_nom_de_serveur»
mydomain = mon_domaine_machine.perso	# fixe le nom de domaine à «mon_domaine_machine.perso»
myorigin = $mydomain			# envoie le courriel comme «utilisateur@mon_domaine_machine.perso»

Quelles adresses de centre de distributions de courriels SMTP à l'arrivée autoriser ?

Des courriers/colis vous sont proposés à l'arrivée à votre centre de distribution pour réception. Ici il est question d'accepter ou non les messages/colis à la livraison pour distribution en fonction de l'adresse indiqué. Pour la messagerie cela se traduit par quelles adresses de messages SMTP vont être autorisés pour un trie local.

C'est le paramètre mydestination qui indique les adresses de messages à l'arrivée pour lesquels on peut accepter le courriel comme adresse locale de centre de distribution. Attention pour éviter des boucles dans la distribution des messages, vous devez énumérer tous les noms d'hôtes de la machine en incluant $myhostname et localhost.$mydomain

Exemples :

mydestination = $myhostname localhost locahost.$mydomain # valeurs par défaut de Postfix pour un service local (adresses courriels distribués pour votre messagerie client : nom_utilisateur@nom_machine, nom_utilisateur@localhost, nom_utilisateur@localhost.nom_du_domaine)
mydestination = $myhostname localhost locahost.$mydomain $mydomain # par exemple pour distribuer en plus des messages pour les utilisateurs locaux avec le nom de domaine messagerie : nom_utilisateur@mon_domaine_messagerie
mydestination = $myhostname localhost locahost.$mydomain mon_fm.fr # avec mon fournisseur de messagerie en local.
Exemple d'envoi d'un message en ligne de commande : echo "mon message" | mutt -s "Sujet du courriel" utilisateur

Sur quels réseaux de transport sont distribués les messages ?

Par quels réseaux de transports les courriers/colis sont-ils distribués ? Par la route, par le train, par l'avion, etc. Ici il s'agit de définir quels moyens de transports sont utilisés pour la distribution des messages.

Par défaut Postfix relaie les messages des clients de messagerie SMTP non distribués sur tout les réseaux de transports de la machine. Les réseaux autorisés sont spécifié par les variables mynetworks et mynetworks_style

La variable mynetwork_style peut prendre la valeur :

  • host pour que la circulation des messages ne se face que localement au serveur de mail.
  • subnet pour une circulation sur les interfaces réseaux définit et actives du serveur de mail.
  • class pour distribuer sur une plage réseaux de transports TCP/IP (Genre plage IP de classe A, B ou C).

Exemples :

mynetworks_style = subnet			# Autorise tous les sous-réseaux raccordés.
mynetworks_style = host				# Seul la machine locale est autorisée, c'est sécurisé contre le spam.
mynetworks = 127.0.0.0/8			# Seul la machine locale est autorisée, c'est sécurisé contre le spam.
mynetworks = 127.0.0.0/8 168.100.100.0/32

À quels centres d'arrivées des courriers expédier les messages qui n'ont pas de distribution locale ?

Lorsque on vous délivre des courriers ou des colis à votre centre d'arrivées et de trie postal, certains vous sont destinés pour une distribution locale, et d'autres n'ont aucun destinataire. Vous pouvez décider vers quels autres centres d'arrivées des courriers expédier ces courriers.

Postfix relaie tous les messages qui ne lui sont pas destinés et les distribue vers les destinations autorisées. C'est la variable relay_domains qui définit ces relaies. Exemples :

relay_domains = $mydestination			# Distribution suivant les destinations autorisées. Par défaut dans Postfix.
relay_domains = 				# Ne relaie aucun courrier provenant de réseaux non autorisés. C'est la version sécurisé.
relay_domains = mon_domaine_machine.perso	# Relaie le courrier vers mon_domaine_machine.perso et ses sous-domaine.mon_domaine_machine.perso

Quelle méthode de distribution des courriels sur internet ?

Vous avez des courriers au départ dans votre centre de trie avec des adresses qui ne sont pas pour votre centre de traitement d'arrivées. Ces adresses n'ont pas une distribution locale à l'arrivée possible. Donc pour votre trie vous devez expédier ces courriers vers un (d')autre(s) centre(s) de traitements au départ qui peux les expédier.

C'est la variable relayhost qui est à paramétrer pour tout cela. Exemples :

relayhost = 						# Livraison directe dans internet. Par défaut dans Postfix.
relayhost = mon_domaine_machine.perso			# Livraison via la messagerie de mon domaine (centre de traitements)
relayhost = [messages.mon_domaine_machine.perso]	# Livraison via la passerelle messages.mon_domaine_machine.perso (centre de trie)
relayhost = [smtp.fai.fr]:465 				# Livraison via la passerelle du fournisseur d'accès smtp.fai.fr suivant le port sécurisé 465 (crypté en SSL)

Les [] permettent d'éviter d'avoir les correspondances IP DNS des MX des noms de domaines de messageries. Ce sont les ports de ces adresses IP qui sont filtrés par les pare-feux.

Les MX ce sont les adresses DNS des serveurs de messageries (centres de traitements des courriels).

Comment sécuriser le SMTP

Bloquer le port SMTP standard

Pour lutter contre le SPAM engendré par les machines zombies (machines infectées par des virus servant de relais aux spammeurs), la plupart des FAI ont décidé de bloquer le port 25 en sortie (dans le sens "Abonné → Internet"), utilisé par défaut par le protocole SMTP. Dans ce cas, le port 25 n'est ouvert que pour le serveur SMTP de votre FAI ( du type smtp.monprovider.com). Ceci empêche la mise en place d'un serveur SMTP chez soi (en tous cas pour l'envoi vers Internet sans passer par le relais SMTP du provider). Ceci empêche également l'envoi depuis votre ligne ADSL vers votre serveur hébergé sur Internet (de type Dedibox, OVH, etc.)

Si vous êtes abonné Free avec une Freebox, vous pouvez débloquer l'envoi par le port 25 dans l'interface de gestion : Fonctionnalités optionnelles de la Freebox → Autres fonctions → Blocage SMTP sortant.

Chez Neuf, ce filtrage est aussi actif. Pour changer les paramètres, allez dans l'interface de gestion de votre Neuf Box, Puis dans Réseau → Filtrage, décochez la case Autoriser l'envoi de courriels uniquement par l'intermédiaire des serveurs mail du groupe SFR.

D'une manière générale, regardez les options de votre Box pour désactiver ce filtrage. Chez certains fournisseurs d'accès à internet, la fonctionnalité n'est pas « débridable ». Une solution autre que de passer par le smtp de votre fournisseur d'accès, est de ne pas passer par le port 25 pour contourner le filtrage mais ceci vous oblige donc a passer par un relais sous votre contrôle…

Pour modifier le port d'Émission de votre serveur, dans /etc/postfix/main.cf, modifier RELAYHOST comme ceci: relayhost = [serveursmtp]:port ( EX : relayhost = [smtp.orange-business.com]:587)

Il est également possible d'utiliser le port 587 en lieu et place du port 25, pour cela, éditer le fichier /etc/postfix/master.cf et ajoutez

587     inet    n       -       y       -       -       smtpd
      -o smtpd_proxy_ehlo=no
      -o content_filter=dksign:[127.0.0.1]:12028

juste en dessous de votre ligne smtp

smtp      inet  n       -       -       -       -       smtpd
      -o smtpd_proxy_ehlo=no
      -o content_filter=dksign:[127.0.0.1]:12028

Authentifier les connections au serveur SMTP

Postfix doit être utilisé avec SASL, cela va assurer l'authentification SMTP (pour éviter que des spammeurs utilisent votre serveur pour envoyer du spam), ainsi qu'un chiffrement via SSL/TLS.

Installez les paquets du serveur de messagerie postfix et le client de messagerie MUA Mutt mutt (les clients MUA de mailutils et de bsd-mailx ne supportent que le format mbox pour la gestion locale).

Choisir «pas de configuration» pour postfix ou si vous avez fait Définir le gestionnaire de messagerie vous pouvez choisir le type d'installation du serveur pour continuer.

Pour la partie sécurité du serveur installez les paquets libsasl2-modules libsasl2-modules-sql libgsasl7 libauthen-sasl-cyrus-perl sasl2-bin libpam-mysql.

Vous devez définir qui va avoir la supervision de la messagerie. Donc si l'utilisateur root est le superviseur de la messagerie, ou si c'est un utilisateur du système (serveur ou desktop Linux). Le fichier /etc/aliases (kate /etc/aliases) est à paramétrer comme suit.

Avec l'utilisateur directement gestionnaire de messagerie :

postmaster:    utilisateur

Avec l'utilisateur gestionnaire de la machine Linux (relais postmater à l'utilisateur root) :

postmaster:    root
root:    utilisateur

Valider dans Postfix la configuration :

sudo postalias /etc/aliases
Par défaut, lors de la configuration du serveur de messagerie, celui-ci sera positionné avec l'utilisateur root

Pour une correspondance entre vos utilisateurs et avec vos applications locales.

Configurer le serveur de messagerie à l'installation

Vous pouvez maintenant configurer le serveur de messagerie Postfix.

Si votre application est déjà installée, tapez :

sudo dpkg-reconfigure postfix

Entrez les détails suivants Touche tabulation pour basculer sur OK, et touche Entrée pour valider le message d'information.

Choisissez le type de configuration automatique Postfix de serveur de messagerie que vous voulez faire. Ici c'est Local Uniquement

Ici on va fixer le non de domaine de messagerie (par exemple @local.fr). Donc saisissez le nom du domaine de messagerie que vous voulez pour vos courriels locaux des utilisateurs de la machine.

La variable du fichier Ubuntu /etc/mailname et le paramètre Postfix myorigin sont donc paramétrés ici.

Ici on fixe le gestionnaire de messagerie.

Si vous n'avez pas précisé en amont de cette configuration le gestionnaire de messagerie, le configurateur du serveur de messagerie remplacera le nom d'utilisateur que vous avez saisie par root dans le fichier /etc/aliases (postmaster: root)

Ici on fixe les domaines de messagerie à accepter comme courriels au départ.

C'est la variable mydestination du fichier /etc/postfix/main.cf qui est modifiée.

Définit sur quel réseau distribuer les courriels.

C'est la variable mynetworks du fichier /etc/postfix/main.cf qui est modifiée.

Fixe un taille limite pour les boites aux lettres des comptes utilisateur du système.

C'est la variable mailbox_size_limit du fichier /etc/postfix/main.cf qui est modifiée.

Définit une extension pour des sous domaines de messagerie.

C'est la variable recipient_delimiter du fichier /etc/postfix/main.cf qui est modifiée.

Définit les protocoles du réseaux de transport qui doivent être utiliser.

C'est la variable inet_protocols du fichier /etc/postfix/main.cf qui est modifiée.

Configurations complémentaires

Emplacement des boîtes aux lettres des utilisateurs du système

Nous remarquons que le «configurateur» de Postfix ne demande pas de préciser où les boîtes aux lettres des utilisateurs sont situées.

Si on passe la commande :

postconf home_mailbox

Nous avons :

home_mailbox =

Nous voyons alors que les boîtes aux lettres des utilisateurs se situent dans /var/mail/utilisateur ce qui est une configuration boîte postale.

Il nous faudra donc éditer le fichier /etc/postfix/main.cf (kate /etc/postfix/main.cf) et ajouter la variable home_mailbox pour vos utilisateurs.

Par exemple :

home_mailbox = .local/share/courriels/arrivées/ # au format maildir

afin que le courriel soit directement distribué dans la boîte aux lettres locale de l'utilisateur.

Pour valider la configuration de postfix, tapez :

systemctl restart postfix
Configurer le client mail MUA système

Testez la lecture de la boîte aux lettres :

mutt

Si vous avez un message du genre :

/home/utidisateur/Mail n'existe pas. Le créer ? ([oui]/non):

C'est que votre client mail est mal configuré.

Tapez :

n

puis

q

pour quitter Mutt.

Éditez le fichier .muttrc dans votre dossier /home/utilisateur (kate ~/.muttrc) Et ajoutez ou modifiez ces lignes :

# Configuration de base
set realname="{Prénom NOM}"
set header_cache=~/.mutt/cache/headers
set certificate_file=~/.mutt/certificates
set message_cachedir=~/.mutt/cache/bodies
set beep
set use_from = yes

# Boite de réception
set spoolfile=~/.local/share/courriels/arrivées/
# Boite aux lettres de Mutt
set folder=~/.local/share/courriels

# Autres dossiers
set postponed=+brouillons
set record=+envoyés

# Encodage à utiliser
set charset=utf-8
set send_charset=utf-8
# Format de la date à afficher avant les citations lors d'une réponse
set date_format="%A %d %B %Y à %I:%M:%S%p"
set index_format="%4C %Z %{%b %d} %-15.15F (%4l) %s"
set fast_reply
set include=yes

# Configuration SMTP
set sendmail="/usr/sbin/sendmail"

Configurer une distribution SMTP locale sécurisée

Bloquer le port 25 SMTP standard

Déjà testons que le port 25 est ouvert. Pour cela tapez la commande :

telnet localhost 25

Ce qui affiche

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 HP-ProBook-6450b ESMTP Postfix (Ubuntu)

Tapez :

HELO HP-ProBook-6450b

retourne

250 HP-ProBook-6450b

Puis saisissez l'identifiant d'un compte local :

MAIL FROM: utilisateur

retourne

250 2.1.0 Ok

Saisissez le destinataire :

RCPT TO: utilisateur@localhost

retourne

250 2.1.5 Ok

Saisissez :

DATA

retourne

354 End data with <CR><LF>.<CR><LF>

Et enfin vous pouvez saisir votre courriel :

From: utilisateur
To: franc
Subject: Test de message sur port 25
Ceci est un test d'envoie sur port 25
Merci de votre coopération
.

retourne

250 2.0.0 Ok: queued as 9E77AA02321

Pour quitter tapez :

QUIT

retourne

221 2.0.0 Bye
Connection closed by foreign host.
Blocage du port

Modifier le fichier master.cf (kate /etc/postfix/master.cf)

Changer

smtp      inet  n       -       y       -       -       smtpd

en

587     inet    n       -       y       -       -       smtpd
      -o content_filter=dksign:[127.0.0.1]:12028

Redémarrage de Postfix pour valider les changements :

systemctl restart postfix

Test du verrouillage du port 25 :

telnet localhost 25

retourne

Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

Test de l'accès sur le port 587 :

telnet localhost 587

retourne

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 HP-ProBook-6450b ESMTP Postfix (Ubuntu)

Tapez pour quitter :

QUIT

retourne

221 2.0.0 Bye
Connection closed by foreign host.

Vous pouvez ajouter la directive

smtpd_banner = $myhostname ESMTP (Messagerie)

dans le fichier main.cf si vous voulez plus de sécurité. cela retournera lors de la connexion telnet sur le port 587 :

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 HP-ProBook-6450b ESMTP (Messagerie)
Mettre en place l'authentification TLS SASL

Validation du transport TLS Pour valider le transport TLS il faut modifier le fichier main.cf (kate /etc/postfix/main.cf) comme suit :

# TLS pour le serveur smtpd de Postfix
tls_random_source = dev:/dev/urandom
smtpd_use_tls = yes
smtpd_tls_auth_only = no
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/certs/ssl-cert-snakeoil.key
#smtpd_tls_CAfile = /etc/ssl/certs/…
smtpd_relay_restrictions = permit_sasl_authenticated permit_mynetworks defer_unauth_destination

# TLS pour le client
smtp_use_tls = yes
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Postfix doit être membre du groupe sasl

getent group sasl

doit retourner

sasl:x:45:postfix

Pour ajouter l'utilisateur postfix au groupe sasl, tapez dans un terminal :

sudo adduser postfix sasl

Voir quelles sont les types d'authentifications acceptées par Postfix Pour le serveur smtpd de Postfix :

postconf -a

retourne

cyrus
dovecot

Pour le client smtp de Posfix :

postconf -A

retourne

cyrus

Configurons le serveur smtpd de postfix pour accepter l'authentification TLS par SASL Afin de permettre l'authentification SASL par Postfix, il va être nécessaire de modifier la configuration générale. Nous allons ajouter les options suivantes à main.cf afin de n'autoriser l'accès au SMTP qu'aux utilisateurs identifiés (par un login qui est leur adresse e-mail, et le mot de passe de ce compte e-mail).

Éditer le fichier main.cf (kate /etc/postfix/main.cf) et modifiez/ajoutez les lignes suivantes :

# Paramétrages SASL du serveur smtpd de Postfix
smtpd_sasl_local_domain = $myhostname # Domaine d'authentification SASL, n'autoriser l'accès au SMTP qu'aux utilisateurs identifiés.
smtpd_sasl_auth_enable = yes # Active l'authentification SASL pour le serveur smtpd de Postfix
smtpd_sasl_security_options = noanonymous # Interdit les méthodes qui autorisent l'authentification anonyme.
broken_sasl_auth_clients = no # Active l’interopérabilité avec les clients SMTP qui implémentent une version obsolète de la commande AUTH (RFC 2554). MicroSoft Outlook Express version 4 et Exchange version 5.0 sont des exemples de tels clients.
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination # Restrictions d'accès que le serveur smtpd de Postfix applique dans le contexte d'une commande RCPT TO. La première restriction qui correspond gagne.
# Donc autorise les connections authentifiées SASL, si ce n'est pas le cas les réseaux de mynetworks, et enfin rejette les connections non authentifiés

Sécuriser le transport SMTP Pour cela il faut modifier le fichier master.cf (kate /etc/postfix/master.cf) comme ci-dessous :

submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_auth_only=yes
  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Pour valider la configuration de postfix, tapez :

systemctl restart postfix
Configurer le client mail MUA système pour l'authentification SASL

Le client Mutt devrait fonctionner de façon transparente en local.

Pour vérifier l’authentification au serveur SMTP en TLS SASL. Créer un Hash (code crypté de connexion) pour votre identifiant local et de son mot de passe.

python3 -c 'import sys; from base64 import b64encode; print(b64encode(bytes(f"mon_compte_local@localhost:mdp_de_utilisateur", encoding="ascii")).decode("ascii"))'

ou en perl:

perl -MMIME::Base64 -le 'print encode_base64("mon_compte_local\@localhost:mdp_de_utilisateur");'

Ce qui donne en sortie :

dXRpbGlzYXRldXJAbG9jYWxob3N0Om1kcF9kZV91dGlsaXNhdGV1cg==

Pour vérifier qu'il n'y a pas d'erreurs :

python3 -c 'import sys; from base64 import b64decode; print(b64decode("dXRpbGlzYXRldXJAbG9jYWxob3N0Om1kcF9kZV91dGlsaXNhdGV1cg==").decode("ascii"))'

ou en perl

perl -MMIME::Base64 -le 'print decode_base64("dXRpbGlzYXRldXJAbG9jYWxob3N0Om1kcF9kZV91dGlsaXNhdGV1cg==");'

Pour vous connecter avec cet identifiant crypté :

openssl s_client -starttls smtp -connect localhost:587

Puis saisissez :

ehlo domain
250-localpart.domain.part
250-PIPELINING
250-SIZE 31457280
250-VRFY
250-ETRN
250-AUTH DIGEST-MD5 NTLM CRAM-MD5 PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING

Maintenant c'est le code de Hash de l'identifiant mot de passe applicatif Google qu'il faut saisir :

AUTH LOGIN dXRpbGlzYXRldXJAbG9jYWxob3N0Om1kcF9kZV91dGlsaXNhdGV1cg==

Vérifiez alors que vous avez une ligne avec un résultat crypté :

334 UGFzc3dvcmQ6

Si l'identifiant crypté n'est pas bon vous aurez :

535 5.7.8 Error: authentication failed: another step is needed in authentication

Si le protocole de connexion n'est pas bon vous aurez:

535 5.7.8 Error: authentication failed: bad protocol / cancel

Centraliser les messages sur des boites aux lettres postales pour éviter les failles de sécurités des utilisateurs locaux peux respectueux des consignes de sécurités

Pour un poste de travail multi-utilisateurs chez soit, ce genre de configuration de boîtes aux lettres par utilisateurs peut-être intéressante pour la messagerie système et entre utilisateurs locaux.

Dans un environnement professionnel où le serveur de messagerie est sur un réseau local, il est préférable d'avoir des boites aux lettres postales (/var/mail/utilisateur). Cela permet d'avoir plusieurs niveaux de contrôles de sécurités. Le premier aux niveau du serveur de messagerie MTA (filtrages SPAM et antivirus). Le deuxième au niveau du MDA (Mail Delivery Agent aussi avec des outils anti-SPAMs et anti-virus) qu'il faudra installer. Un troisième niveau peut-être mis en place au niveau du client de messagerie MUA sur le poste de travail avec un serveur local sur le modèle ci-dessus complété par relaie vers le serveur de messagerie du réseau. Pour cela il faut supprimer la directive

home_mailbox= ...

du fichier de configuration main.cf de Postfix. Et modifier le client MUA Mutt avec

set spoolfile=/var/mail/$USER

dans le fichier .muttrc du répertoire home de l'utilisateur.

Pour communiquer directement avec un serveur de messagerie internet. C'est la configuration «système satellite».

Pour configurer postfix, tapez :

sudo dpkg-reconfigure postfix

Saisissez Système satellite

Remplacez perso.fr par votre nom de domaine de machine

Indiquez ici le nom du serveur de relaie smtp (ici cas avec Gmail)

Le compte de messagerie internet de l'administrateur de la machine que vous avez défini (ne pas oublier d'avoir fait la configuration du gestionnaire avant) doit être saisie ici.

Laissez ce champ vide

Cas Gmail

Pour configurer Gmail en relaie SMTP

Création du mot de passe applicatif

Cliquez sur

Cliquez sur

Cliquez sur

Cliquez sur Sélectionnez un application pour afficher le menu

Saisissez le nom Postfix de votre serveur de messagerie pour Google

Cliquez sur

Notez le mot de passe générez

Vous avez créé votre mot de passe sécurité Google pour votre application Postfix.

Configuration Postfix

Éditez le fichier /etc/postfix/sasl/sasl_passwd (kate /etc/postfix/sasl/sasl_passwd) :

[smtp.gmail.com]:587    mon_compte_gmail:mdp_applicatif_google

Exemple :

[smtp.gmail.com]:587    utilisateur@gmail.com:ygvpyhldoiqujhth

Passez la commande pour valider le mot de passe avec Postfix :

sudo postmap /etc/postfix/sasl_passwd

Modifiez /etc/postfix/main.cf (kate /etc/postfix/main.cf):

# Les interfaces réseau par lesquelles le système de messagerie reçoit les messages.
inet_interfaces = loopback-only
# La machine par défaut où livrer le courrier au départ lorsqu'il n'y a aucune destination locale d'arrivée (mydestination).
relayhost = [smtp.gmail.com]:587
# Gmail
# Active l'authentification SASL
smtp_sasl_auth_enable = yes
# Désactive l'authentification anonyme
smtp_sasl_security_options = noanonymous
# Pour corriger des erreurs d'authentification SASL avec GMAIL
smtp_sasl_mechanism_filter = plain
# Location de l'indentifiant SASL
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
# Active le crytage STARTTLS
smtp_tls_security_level = encrypt
# Location du certificat CA
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

À ce stade, si on redémarre le service Postfix, l'envoie de messages fonctionnent. Mais nous allons obtenir un message d'erreur sur l'expéditeur dans notre client de messagerie MUA à la réception du message.

Il faut pour éviter cela substituer le nom d'expéditeur avec le nom de l'adresse de messagerie du serveur de messagerie pour lequel on envoie le courriel.

Éditez le fichier generic (kate /etc/postfix/generic) et modifiez le comme suivant :

utilisateur@mondomaine.fr     username@gmail.com
utilisateur@hostname.localnet username@gmail.com
root@mondomaine.fr            username@gmail.com
root@hostname.localnet        username@gmail.com
sudoer@hostname.localnet      username@gmail.com

Validez pour Postfix les substitutions :

postmap /etc/postfix/generic

Redémarrer Postfix :

systemctl restart postfix

Débogage en cas de problèmes

Vérifier l'accès TLS

Pour vérifier que la connexion TLS de Gmail fonctionne tapez :

openssl s_client -starttls smtp -connect smtp.gmail.com:587

Qui doit donner en sortie:

CONNECTED(00000003)
depth=2 OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
verify return:1
depth=1 C = US, O = Google Trust Services, CN = GTS CA 1O1
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = smtp.gmail.com
verify return:1
---
Certificate chain
 0 s:C = US, ST = California, L = Mountain View, O = Google LLC, CN = smtp.gmail.com
   i:C = US, O = Google Trust Services, CN = GTS CA 1O1
 1 s:C = US, O = Google Trust Services, CN = GTS CA 1O1
   i:OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
---
Server certificate
-----BEGIN CERTIFICATE-----
…
-----END CERTIFICATE-----
subject=C = US, ST = California, L = Mountain View, O = Google LLC, CN = smtp.gmail.com
 
issuer=C = US, O = Google Trust Services, CN = GTS CA 1O1
 
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: ECDSA
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 2893 bytes and written 429 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 256 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
250 SMTPUTF8

Tapez quit pour finir la session :

quit

Ce qui donne comme résultat :

---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: …
    Session-ID-ctx: 
    Resumption PSK: …
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 172800 (seconds)
    TLS session ticket:
    …
 
    Start Time: 1597667889
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: …
    Session-ID-ctx: 
    Resumption PSK: …
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 172800 (seconds)
    TLS session ticket:
    …
    Start Time: 1597667889
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
221 2.0.0 closing connection 68sm31076964wra.39 - gsmtp
read:errno=0
Vérifier l'autentification au serveur SMTP de Gmail

Creer un Hash (code crypté de connexion) pour votre identifiant Gmail et votre mot de passe applicatif.

python3 -c 'import sys; from base64 import b64encode; print(b64encode(bytes(f"mon_compte_gmail:mdp_applicatif_google", encoding="ascii")).decode("ascii"))'

Soit pour notre exemple :

python3 -c 'import sys; from base64 import b64encode; print(b64encode(bytes(f"utilisateur@gmail.com:ygvpyhldoiqujhth", encoding="ascii")).decode("ascii"))'

ou en perl:

perl -MMIME::Base64 -le 'print encode_base64("utilisateur\@gmail.com:ygvpyhldoiqujhth");'

Ce qui donne en sortie :

dXPpbGlzYXRldXJAZ21haWwuY29tOnlndnB5aGxkb2lxdWpodGg=

Pour vérifier qu'il n'y a pas d'erreurs :

python3 -c 'import sys; from base64 import b64decode; print(b64decode("dXPpbGlzYXRldXJAZ21haWwuY29tOnlndnB5aGxkb2lxdWpodGg=").decode("ascii"))'

ou en perl

perl -MMIME::Base64 -le 'print decode_base64("dXPpbGlzYXRldXJAZ21haWwuY29tOnlndnB5aGxkb2lxdWpodGg=");'

Pour vous connecter avec cet identifiant crypté :

openssl s_client -starttls smtp -connect smtp.gmail.com:587

Puis saisissez :

ehlo domain
250-localpart.domain.part
250-PIPELINING
250-SIZE 31457280
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Maintenant c'est le code de Hash de l'identifiant mot de passe applicatif Google qu'il faut saisir :

AUTH PLAIN dXPpbGlzYXRldXJAZ21haWwuY29tOnlndnB5aGxkb2lxdWpodGg=

Vérifiez alors que vous avez la ligne :

235 2.7.0 Authentication successful

Pour fusionner les deux fonctionnements précédents

postfix doit être membre du groupe sasl. Pour ajouter l'utilisateur postfix au groupe sasl, tapez dans un terminal :

sudo adduser postfix sasl

Pour configurer postfix, tapez :

sudo dpkg-reconfigure postfix

Lorsqu'on vous les demande, entrez les détails suivants

Configurations complémentaires

Il faut éditer le fichier /etc/postfix/main.cf (kate /etc/postfix/main.cf) et ajouter la variable home_mailbox pour vos boites aux lettres utilisateurs.

Par exemple :

home_mailbox = .local/share/courriels/arrivées/ # au format maildir

afin que le courriel soit directement distribué dans la boite aux lettres locale de l'utilisateur.

Vous pouvez aussi configurer à l'identique de ci-dessus le relais Gmail.

Pour vous connecter à distance par internet sur votre messagerie locale

  • comment_configurer_sa_distribution_de_courriels_systemes_mta.1598276527.txt.gz
  • Dernière modification: Le 24/08/2020, 15:42
  • par sefran