Ceci est une ancienne révision du document !


Installer Postfix avec le serveur de messagerie du réseau local ou sur internet

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

Pour plus d'informations sur la messagerie lire Comment fonctionne le courriel sous Linux ?, et sur les principes du serveur Postfix lire Comment configurer sa distribution de courriels systèmes MTA avec Postfix ?

Installez les paquets du serveur de messagerie postfix. Choisir «pas de configuration» si l'installation demande de paramétrer le serveur de messagerie.

Pour la partie sécurité du serveur installez les paquets libsasl2-modules libauthen-sasl-cyrus-perl.

Installer le client Mutt de messagerie MUA mutt (les clients MUA de mailutils et de bsd-mailx ne supportent que le format mbox pour la gestion locale, vous pouvez aussi utiliser Neomutt avec plus de fonctionnalités en remplacement de Mutt Neomutt).

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 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 de votre réseau local ou d'internet (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

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 pour quitter Mutt

q

Configuration du client de courriels

Éditer le fichier .muttrc dans votre dossier /home/utilisateur (kate ~/.muttrc) Et ajouter ou modifier 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"

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

La commande de la file d'attente :

postconf queue_directory

renvoie

queue_directory = /var/spool/postfix

La commande de boîtes postales :

postconf mail_spool_directory

renvoie

mail_spool_directory = /var/mail

Si on passe la commande de boîtes aux lettres utilisateurs :

postconf home_mailbox

Nous avons :

home_mailbox =

Nous voyons alors que les boîtes aux lettres des utilisateurs sont des boîtes postales et se situent dans /var/mail/utilisateur.

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 :

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

ou passer la commande dans un terminal :

sudo postconf -e home_mailbox=.local/share/courriels/arrivées/

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

Pour valider la configuration dans Postfix, tapez :

systemctl restart postfix

Test de la connexion sur le port 25

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 Ma-Machine ESMTP Postfix (Ubuntu)

Tapez :

HELO Ma-Machine

retourne

250 Ma-Machine

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: utilisateur
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.

Vous avez expédié un courriels local :-)

Blocage du port 25

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

#smtp      inet  n       -       y       -       -       smtpd

Redémarrage de Postfix pour valider les changements :

systemctl restart postfix

Test du verrouillage du port 25

Pour cela taper :

telnet localhost 25

retourne

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

Par défaut le configurateur configure TLS comme ci-dessus :

# TLS paramètres du serveur smtpd de Postfix
smtpd_tls_security_level=may
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

# TLS paramètres du client smtp de Postfix
smtp_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Configuration d'un trafic TLS pur

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
# Utilise le générateur de nombres aléatoires de Linux
tls_random_source = dev:/dev/urandom
# Active le protocole de cryptage TLS
smtpd_use_tls = yes
# N'autorise que les connections TLS
smtpd_tls_auth_only = yes
# Niveau de sécurité dans la négociation du protocole
smtpd_tls_security_level = may
# Les clefs du cryptage
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/certs/ssl-cert-snakeoil.key

# TLS pour le client
# Active le protocole de cryptage TLS
smtp_use_tls = yes
# Niveau de sécurité dans la négociation du protocole
smtp_tls_security_level = may
# Les clefs du cryptage
smtp_tls_CApath = /etc/ssl/certs
# Répertoire de cache pour la communication
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Autoriser les connections TLS

Pour cela il faut modifier le fichier master.cf (kate /etc/postfix/master.cf)

Modifier le fichier comme ci-dessous :

submission inet n       -       y       -       -       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

Redémarrer Postfix :

systemctl restart postfix

Vérifier le blocage des connexions non TLS

Tester la connexion telnet :

telnet localhost 587

retourne

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 Ma-Machine ESMTP (Courriels)

Taper :

ehlo Ma-Machine

retourne

250-Ma-Machine
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING

Taper :

MAIL FROM: utilisateur

retourne

530 5.7.0 Must issue a STARTTLS command first

Taper :

quit

retourne

221 2.0.0 Bye
Connection closed by foreign host.

Vérifier les connexions TLS

Pour vous connecter en TLS :

openssl s_client -starttls smtp -connect localhost:587

retourne

CONNECTED(00000003)
…
    Start Time: 1598437512
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK

Tapez :

ehlo Ma-Machine

retourne

250-Ma-Machine
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING

Tapez :

MAIL FROM: utilisateur

retourne

250 2.1.0 Ok

Tapez :

QUIT

retourne

221 2.0.0 Bye
Connection closed by foreign host.

Vos échanges de courriels sont maintenant cryptés lors du transport en SMTP.

Pour valider la configuration dans Postfix, tapez :

systemctl restart postfix

Exemple avec 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 des identifiants du serveur

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

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

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

sudo postmap /etc/postfix/sasl_passwd

Exemple avec Gmail

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

Configuration de Postfix

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@mon_nom_machine             username@gmail.com
utilisateur@localhost                   username@gmail.com
utilisateur@mondomainemessagerie.fr     username@gmail.com 
root@mondomainemessagerie.fr            username@gmail.com
sudoer@mondomainemessagerie.fr          username@gmail.com

Validez pour Postfix les substitutions :

sudo postmap /etc/postfix/generic

Ajoutez dans main.cf (kate /etc/postfix/main.cf) :

smtp_generic_maps = hash:/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
  • installer_postfix_avec_le_serveur_de_messagerie_sur_internet.1598528449.txt.gz
  • Dernière modification: Le 27/08/2020, 13:40
  • par sefran