Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
pratique:informatique:mail:mail_relai [20/09/2024 07:31] – supprimée - modification externe (Unknown date) 127.0.0.1pratique:informatique:mail:mail_relai [13/10/2025 18:52] (Version actuelle) – [Paramétrage des DNS] Zatalyz
Ligne 1: Ligne 1:
 +====== Déléguer l'envoi des mails depuis un serveur (Msmtp)  ======
 +===== Msmtp =====
 +
 +Paramétrer un serveur mail complet, c'est compliqué et un peu overkill sur chaque machine qu'on gère. Par contre, j'aimerais recevoir les mails systèmes de mes serveurs sur mon adresse mail. 
 +
 +J'ai réussi à m'envoyer un mail directement en utilisant la solution suivante. On peut utiliser autre chose que bsd-mailx mais il fonctionne et a peu de dépendances.
 +
 +  sudo apt install msmtp msmtp-mta bsd-mailx
 +
 +Ensuite on configure un fichier appelé msmtprc (''/etc/msmtprc'' pour tout le système, suivi d'un "chmod o-r", sinon un ''~/.msmtprc'' sur lequel on fait un ''chmod 600'').
 +
 +  nano /etc/msmtprc
 +
 +Ici je met deux config "pour mémoire", Gandi (que je ne vais plus utiliser) et Nordcantal (qui est mon propre domaine). À adapter à vos propres serveur sortants smtp. 
 +<code bash /etc/msmtprc>
 +# Compte Gandi
 +account        gandi
 +host           mail.gandi.net
 +tls            on
 +tls_certcheck  off
 +tls_starttls   off
 +auth           on
 +port           465
 +from           user@nomdomaine.com
 +user           user@nomdomaine.com
 +password       (mettezlevotre)
 +logfile        /var/log/.msmtp.log
 +aliases        /etc/aliases
 +
 +# Compte Nordcantal
 +account        lievre
 +host           poste.nordcantal.fr
 +tls            on
 +tls_certcheck  on
 +tls_starttls   on
 +auth           on
 +port           587
 +from           user@nomdomaine.com
 +user           user@nomdomaine.com
 +password       (mettezlevotre)
 +syslog         LOG_MAIL
 +aliases        /etc/aliases
 +# Définir le compte par défaut
 +account default : lievre
 +
 +</code>
 +
 +<WRAP center round tip 60%>
 +Il est possible que Apparmor fasse des siennes et empêche d'écrire dans le fichier de log (cf [[https://askubuntu.com/questions/878288/msmtp-cannot-write-to-var-log-msmtp-msmtp-log|ici]]).
 +
 +Solution simple et efficace : enlever la ligne ''logfile        /var/log/.msmtp.log'' et mettre ''syslog LOG_MAIL'' dans ''/etc/msmtprc''.
 +
 +Les logs seront gérés par syslog, et nous aurons dans /var/log un "mail.log" qui bénéficiera de la logique de logrotate.
 +
 +</WRAP>
 +
 +Tester l'envoi d'un mail :
 +  echo 'Subject:Yo' | msmtp user@nomdomaine.com
 +
 +<WRAP center round important 60%>
 +Vérifier que ça logue même envoyé depuis un user de base.
 +</WRAP>
 +
 +Éditer les aliases afin que root renvoie au mail :
 +  sudo nano /etc/aliases
 +
 +Ajouter à la fin de ce fichier ''root: user@nomdomaine.com''((''user@nomdomaine.com'' est l'adresse mail réelle où vous allez recevoir les mails envoyés par le serveur.)) et ajouter aussi à chaque fin de redirection un ''@''((msmtp ne comprends pas s'il n'y a pas de @ à la fin et ça ne devrait pas prêter à conséquence ?)), ce qui devrait donner :
 +<code>
 +# /etc/aliases
 +mailer-daemon: postmaster@
 +postmaster: root@
 +nobody: root@
 +hostmaster: root@
 +usenet: root@
 +news: root@
 +webmaster: root@
 +www: root@
 +ftp: root@
 +abuse: root@
 +noc: root@
 +security: root@
 +default: user@nomdomaine.com
 +root: user@nomdomaine.com
 +</code>
 +
 +<WRAP center round info 60%>
 +''default'' est nécessaire pour recevoir les messages adressés aux utilisateurs linux. Vous pouvez aussi les déclarer un par un, avec des adresses mails différentes :
 +
 +<code>user1: user1@nomdomaine.com
 +user2: user2@chezmoi.com</code>
 +
 +Laissez tout de même une variable ''default'' pour ne rien louper. 
 +</WRAP>
 +
 +
 +Éditer aussi ''/etc/mail.rc'' pour indiquer d'utiliser msmtp comme MTA. 
 +  sudo nano /etc/mail.rc
 +
 +Ajoutez à la fin :
 +  set mta=/usr/bin/msmtp
 +
 +Pour tester si tout marche en envoi à root :
 +  echo "Test" | mail -s "Test " root
 +
 +==== Vérifier la sécurité ====
 +Pour éviter que le mot de passe du mail soit visible par toute personne connectée au serveur, on peut améliorer un peu les choses.
 +
 +<WRAP center round help 60%>
 +Il y a des méthodes diverses pour stocker le mot de passe mais la plupart me semblent compliquées à concilier avec un usage serveur : on ne peux pas entrer le mot de passe manuellement quand un courrier veut être envoyé. Si vous voyez comment faire mieux, je prends. 
 +</WRAP>
 +
 +On peut stocker le mot de passe dans un fichier séparé en ayant cette ligne à la place de ''password''
 +  passwordeval   "cat /etc/secret/msmtp"
 +
 +(ou tout autre chemin). Cependant je ne suis pas sûre de voir l'intérêt d'un autre fichier, si son accès dépend des mêmes contraintes que ''/etc/msmtprc''
 +
 +On va créer un group qui aura le droit d'envoyer les mails (mais pas de modifier la configuration, réservée à root), y mettre des utilisateurs systèmes, et renforcer les droits sur le fichier de msmtp : la lecture sera interdite à tout le monde sauf le nouveau groupe, et la modification réservée à root.
 +
 +<code>
 +sudo groupadd smtpusers
 +sudo usermod -aG smtpusers backup
 +sudo usermod -aG smtpusers mail
 +sudo usermod -aG smtpusers www-data
 +sudo chown root:smtpusers /etc/msmtprc
 +sudo chmod 640 /etc/msmtprc
 +</code>
 +
 +=> J'ai par défaut ajouté les users systèmes "backup, mail, www-data" au groupe, car ils ont parfois besoin d'envoyer des mails. On peut aussi ajouter son/ses utilisateurs personnels, mais ça n'a pas grand intérêt sur un serveur. Suivant ce qu'on installe comme logiciel, il faut veiller à ce qu'ils puissent envoyer des mails si besoin en faisant partie de ce groupe.
 +
 +
 +
 +==== Avec Scaleway ====
 +Scaleway propose des emails transctionnels pour pas cher. Un peu technique pour paramétrer ça chez eux (faudra que je note aussi), et côté msmtp ça donne ça :
 +<code /etc/msmtprc>
 +# Compte Scaleway
 +account        scaleway
 +host           smtp.tem.scw.cloud
 +tls_certcheck  off
 +tls_starttls   off
 +tls            on
 +tls_trust_file /etc/ssl/certs/ca-certificates.crt
 +logfile        ~/.msmtp.log
 +port           465
 +auth           on
 +from           [le nom à afficher]@[domaine.perso.net]
 +user           [le nom d'utilisateur]
 +password       [clé API secrète]
 +aliases        /etc/aliases
 +
 +</code>
 +
 +Ensuite Scaleway a quelques exigences sur le formatage des mails. Pour tester : 
 +<code mail.txt>From: [le nom à afficher]@[domaine.perso.net]
 +To: [votre@mail]
 +subject: Test encore
 +
 +Le corps du texte commence à cette ligne (laisser une ligne blanche)
 +
 +</code>
 +
 +Et enfin pour tester : 
 +  cat mail.txt | msmtp -a scaleway [votre@mail]
 +
 +==== Permettre à php d'envoyer ====
 +Je ne comprends pas trop pourquoi "parfois ça va, parfois non"
 +
 +On commence par donner le droit à www-data de se servir de msmtp :
 +  sudo chgrp www-data /etc/msmtprc
 +
 +On vérifie aussi que dans php.ini, la ligne suivante existe. À refaire à chaque changement de version de php...
 +
 +<code json /etc/php/X.Y/apache2/php.ini>
 +[mail function]
 +sendmail_path = "/usr/bin/msmtp -t"
 +</code>
 +
 +Et on recharge apache/ce qui utilise php :
 +
 +  service apache2 restart
 +==== Problème de port ? ====
 +Vérifiez que les règles "output" sur le [[pratique:informatique:parefeu:nftables#sur_hyperviseur_expose_sur_internet|pare-feu]] permettent à msmtp d'envoyer un mail ! Les ports 465 et 587 sont concernés, uniquement en **output**.
 +
 +
 +==== Sources ====
 +  * https://doc.ubuntu-fr.org/msmtp
 +  * https://doc.ubuntu-fr.org/tutoriel/comment_envoyer_un_mail_par_smtp_en_ligne_de_commande
 +  * https://marlam.de/msmtp/msmtp.html
 +
 +===== Paramétrage des DNS =====
 +Pour améliorer la délivrabilité des mails, il faut configurer les DNS afin que tout soit propre. Au programme, SPF, DKIM, DMARC.
 +
 +Et ça se passe sur la [[pratique:informatique:mail:mail_dns|page suivante]]. 
 +
 +{{tag>Mail Relai MSMTP}}
 +
 +[[https://creativecommons.org/publicdomain/zero/1.0/deed.fr|{{ https://liev.re/imagesweb/licences/cc-zero.png?100 | Ce texte est placé sous licence CC0}}]]
 +