Installer Postfix pour l'envoie des courriels vers un serveur de messagerie du réseau local ou d'internet
Pour expédier directement sur un serveur de messagerie internet ou du LAN vos courriels. C'est la configuration «système satellite», ou ce que l'on appelle dans le cas que nous allons voir ici, un client Postfix sans rôle avec un relai internet.
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 ?
Installation du serveur de messagerie 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.
Définir le gestionnaire de messagerie
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
Configuration de Postfix avec un serveur du réseau local ou sur Internet
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
Emplacement des boîtes aux lettres des utilisateurs du système
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
Bloquer le port 25 SMTP standard
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
Mettre en place de la connexion TLS pour votre trafic SMTP
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.
Mettre en place l'authentification SASL
Pour vous connecter sur votre serveur distant relaie avec SASL il vous faut disposer d'un compte et d'un mot de passe.
Exemple de mot de passe SASL Gmail
Pour un identifiant SASL avec Gmail
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 de l'identifiant du serveur de messagerie
Éditez le fichier /etc/postfix/sasl/sasl_passwd (kate /etc/postfix/sasl/sasl_passwd
) :
[smtp.fm.fr]:587 mon_compte_messagerie:mdp_messagerie
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 du client SASL 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.fm.fr]:587 # Active l'authentification SASL smtp_sasl_auth_enable = yes # Désactive l'authentification anonyme smtp_sasl_security_options = noanonymous # Location de l'indentifiant SASL smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
Exemple avec Gmail
Modifier en plus de la configuration ci-dessus :
# 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 # Modifications pour SASL # Pour corriger des erreurs d'authentification SASL avec GMAIL smtp_sasl_mechanism_filter = plain # Modifications pour TLS # Niveau de sécurité dans la négociation du protocole smtp_tls_security_level = encrypt # Location du certificat CA smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
Pour valider la configuration dans Postfix, tapez :
systemctl restart postfix
Vérifier l’authentification au serveur SMTP
Créer un Hash (code crypté de connexion) pour votre identifiant et votre mot de passe messagerie.
python3 -c 'import sys; from base64 import b64encode; print(b64encode(bytes(f"\000mon_compte_courriel\000mdp_applicatif", encoding="ascii")).decode("ascii"))'
ou en perl:
perl -MMIME::Base64 -le 'print encode_base64("\000mon_compte_courriel\000mdp_applicatif");'
Soit pour notre exemple :
python3 -c 'import sys; from base64 import b64encode; print(b64encode(bytes(f"\000utilisateur@gmail.com\000ygvpyhldoiqujhth", encoding="ascii")).decode("ascii"))'
Ce qui donne en sortie :
AHV0aWxpc2F0ZXVyQGdtYWlsLmNvbQB5Z3ZweWhsZG9pcXVqaHRo
Pour vérifier qu'il n'y a pas d'erreurs :
python3 -c 'import sys; from base64 import b64decode; print(b64decode("AHV0aWxpc2F0ZXVyQGdtYWlsLmNvbQB5Z3ZweWhsZG9pcXVqaHRo").decode("ascii"))'
ou en perl :
perl -MMIME::Base64 -le 'print decode_base64("AHV0aWxpc2F0ZXVyQGdtYWlsLmNvbQB5Z3ZweWhsZG9pcXVqaHRo");'
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 AHV0aWxpc2F0ZXVyQGdtYWlsLmNvbQB5Z3ZweWhsZG9pcXVqaHRo
Vérifiez alors que vous avez la ligne :
235 2.7.0 Accepted
Correction sur l'expéditeur
À 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.
Par exemple dans Gmail :
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.
Substitution des comptes locaux avec les adresses du fournisseur de messagerie
Éditez le fichier generic (kate /etc/postfix/generic
) et modifiez le comme suivant :
utilisateur@mon_nom_machine username@mon_fm.fr utilisateur@mondomainemessagerie.fr username@mon_fm.fr root@mondomainemessagerie.fr admin@mon_fm.fr sudoer@mondomainemessagerie.fr admin@mon_fm.fr
Exemple avec Gmail
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
Vous pouvez maintenant envoyer vos messages vers votre serveur distant. Mais pour les lire il vous faudra installer un MDA local, ou vous connecter sur le MDA de votre serveur de messagerie distant pour les rapatrier dans votre client local de messagerie MUA (Mutt).