Les machines peuvent avoir besoin d’envoyer des mails :
Pour ce faire, on va configurer et configurer Postfix sur les machines, et lui demander d’utiliser le serveur mail de Picasoft comme relai SMTP.
De la sorte, la machine pourra envoyer ses mails vers n’importe quelle adresse mail.
Ce tutoriel peut être adapté pour n’importe quel serveur mail ; ici on suppose le service de soumission de mails Picasoft est accessible en STARTTLS
sur mail.picasoft.net:587
.
A Savoir:
Opportunistic TLS (Transport Layer Security) refers to extensions in plain text communication protocols, which offer a way to upgrade a plain text connection to an encrypted (TLS or SSL) connection instead of using a separate port for encrypted communication. Several protocols use a command named “STARTTLS” for this purpose. Source
On commence par installer les paquets libsasl2-modules
et postfix
:
apt install libsasl2-modules postfix
Note:
Si on vous demande une configuration par défaut, choisissez “pas de configuration”.
Il nous faut trois choses :
STARTTLS
comme relairoot@<hostname>
)On va commencer par configurer Postfix.
On pourrait se contenter d’envoyer directement les mails depuis la machine locale, sauf que comme notre serveur mail local n’est pas connu, ni configuré, sans SPF, DKIM, etc…, et bien on risque de se faire méchamment rejeter.
Note:
Au contraire, le serveur mail de Picasoft (qui tourne sur monitoring
) est béton ! C’est pourquoi on s’authentifie sur lui pour envoyer le mail à travers (d’où le terme de relai) plutôt que directement depuis le Postfix local.
On crée le fichier /etc/postfix/main.cf
, avec les informations suivantes :
Note:
Remplacer bob
par le nom de la machine concernée (pica01
, pica02
, etc).
alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases # Hostname of the machine myhostname = bob.picasoft.net myorigin = bob.picasoft.net # Domains "owned" by the machine (ie itself) mydestination = bob.picasoft.net, bob, localhost.localdomain, localhost # Only authorize local mail sending (won't relay external emails) mynetworks_style = host # Rewrite senders sender_canonical_maps = regexp:/etc/postfix/sender_canonical # Rewrite FROM header smtp_header_checks = regexp:/etc/postfix/header_check # Relay via Picasoft mail server relayhost = mail.picasoft.net:587 # TLS parameters smtp_use_tls = yes smtp_sasl_auth_enable = yes smtp_sasl_security_options = smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt mailbox_size_limit = 0 recipient_delimiter = + # Only listen to localhost, ignore external requests inet_interfaces = 127.0.0.1 default_transport = relay inet_protocols = all
Remarquer les lignes :
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd sender_canonical_maps = regexp:/etc/postfix/sender_canonical smtp_header_checks = regexp:/etc/postfix/header_check
C’est ce qu’on va configurer ensuite.
Lien:
Pour des précisions sur les tables Postfix (hash
, regexp
, etc), voir la documentation officielle.
On indique les informations d’authentification au serveur mail de Picasoft dans le fichier /etc/postfix/sasl_passwd
. On lui donne ce contenu :
mail.picasoft.net <utilisateur>:<password>
On a préalablement créé un utilisateur LDAP utilisateur
qui a les droits pour envoyer des mails.
Attention:
Même si c’est un peu plus long, il est recommandé de créer un utilisateur par machine virtuelle. Ainsi, on saura juste avec l’expéditeur de quelle machine a été expédié le mail.
Note:
Voir cette page pour la partie de création du compte LDAP.
On créé ensuite une table correspondant au fichier d’authentification :
sudo postmap /etc/postfix/sasl_passwd
On protège les fichiers :
sudo chown postfix:postfix /etc/postfix/sasl_passwd* sudo chmod 600 /etc/postfix/sasl_passwd*
On édite le fichier /etc/postfix/sender_canonical
et on ajoute la ligne suivante :
/.+/ <utilisateur>@picasoft.net
Ainsi, tous les envois locaux, depuis n’importe quel utilisateur, seront ré-écrits avec l’utilisateur <utilisateur>@picasoft.net
.
Attention:
Il est important que l’utilisateur utilisé pour se connecter au relai soit le même que l’adresse mail d’envoi : une vérification est faite au niveau du serveur mail de Picasoft pour s’assurer que les deux concordent.
On créé ensuite une table correspondant au fichier de ré-écriture :
sudo postmap /etc/postfix/sender_canonical
Note:
On peut tester que tout fonctionne avec la commande suivante :
sudo postmap -q random_login regexp:/etc/postfix/sender_canonical
Si la commande renvoie <utilisateur>@picasoft.net
, alors la ré-écriture fonctionne !
sudo chown postfix:postfix /etc/postfix/sender_canonical* sudo chmod 640 /etc/postfix/sender_canonical*
Enfin, on crée le fichier /etc/postfix/header_check
, qu’on remplit avec :
/^From\:.*$/ REPLACE From: <utilisateur>@picasoft.net
L’idée est de remplacer le header FROM
, s’il existe, par la bonne adresse ré-écrite, sans le nom d’utilisateur du compte local qui a envoyé le mail devant. C’est pour des raisons de lisibilité dans la boîte de réception.
Puis, pareil que précédemment :
sudo postmap /etc/postfix/header_check sudo chown postfix:postfix /etc/postfix/header_check* sudo chmod 640 /etc/postfix/header_check*
On active et on démarre Postfix :
sudo systemctl enable postfix sudo systemctl start postfix
On vérifie que tout s’est bien passé :
systemctl status postfix
À ce stade, tous les mails envoyés depuis la machine (via sendmail
par exemple) qui sont à destination d’un domaine non local sont relayés via le serveur de mail de Picasoft.
Le programme mail
permet d’envoyer des mails. Par exemple :
mail -s "Test relai Postfix" <ton adresse etu>
Supposons que j’envoie depuis le compte local qduchemi
vers l’adresse quentin.duchemin@etu.utc.fr
.
Normalement, voici ce qui devrait se passer :
qduchemi
en <machine>@picasoft.net
FROM
en <machine>@picasoft.net
etu.utc.fr
est différent de <machine>.picasoft.net
, Postfix comprend qu’il doit relayer via le serveur mail mail.picasoft.net
bob
, dans sasl_auth
FROM
) et le compte utilisé pour l’authentification. Ce sont les mêmes, il valide.utc.fr
).Dans mon cas, pour mes tests, j’ai envoyé un mail de toutes les machines en même temps :
Tout fonctionne !