Portail / Linux(Sommaire)

Envoi de courriels par le système.

Mise à jour du 14/04/2024.

Aller régulièrement sur le serveur via une console pour l'exploiter peut être fastidieux en raison des indispensables mesures de sécurité mises en place. De plus, la disponibilité de l'équipe d'exploitation ne permet pas toujours cette régularité. La loi dite de "la tartine" montre qu'un incident se produira presque toujours dans une phase d'indisponibilité de cette équipe.

Choix d'une méthode et d'un outil.

L'idée est de prévenir au plus tôt l'équipe d'exploitation qu'un problème a été rencontré. Pour cela, le courriel est un outil bien adapté.

On suppose ici que l'on a accès à un serveur de messagerie SMTP (le votre ou celui d'un founisseur) et que l'on dispose des éléments du serveur ainsi que ceux d'un compte de connexion.

Nous utiliserons comme "client" émetteur de messages, le logiciel exim4 dans un mode un peu particulier appelé smarthost. Comme cet outil est aussi un serber SMTP, nous n'accepterons que les connexions locales de façon à éviter qu'un petit malin utilise le serveur en "zombie" pour émettre des pourriels ou des courriers frauduleux. L'inconvénient est que cet outil est assez mal documenté.

Configuration smarthost d'Exim4.

Pour aller à l'essentiel nous indiquons ici la suite des commandes (nécessite les droits root).

  1. apt install exim4
    Installation du logiciel.
  2. nano /etc/exim4/update-exim4.conf.conf

    Voici le contenu du fichier à éditer :

    dc_eximconfig_configtype='smarthost'
    dc_other_hostnames=''
    dc_local_interfaces='127.0.0.1'
    dc_readhost='parce.fr'
    dc_relay_domains=''
    dc_minimaldns='false'
    dc_relay_nets=''
    dc_smarthost='{alias ou adresse IP du serveur SMTP}::465'
    CFILEMODE='644'
    dc_use_split_config='false'
    dc_hide_mailname='true'
    dc_mailname_in_oh='true'
    dc_localdelivery='mail_spool'

    Ce fichier est normalement construit par la commande dpkg-reconfigure exim4-config. Cette commande interactive est peu intuitive et nous préférons accéder directement au fichier.

    Vous devrez remplacer {alias ou adresse IP du serveur SMTP} par la bonne valeur. Notez qu'avec le port 465 (le double double-point n'est pas une erreur), nous allons ici utiliser SSL/TLS pour le transport.

  3. nano /etc/mailname

    Ce fichier doit contenir le nom du domaine de messagerie comme par exemple jmpdom.ovh.

  4. nano /etc/aliases

    Laisser toutes les redirections vers l'adresse du compte root. la dernière ligne doit être celle de l'adresse courriel externe comme par exemple root: webmaster@jmpdom.ovh (ou autre adresse courriel).

  5. newaliases

    Prise en compte des deux fichiers ci-dessus par le système.

  6. nano /etc/exim4/exim4.conf.template

    Recherchez (^W) la texte "remote_smtp_smarthost:". Sous la propriété driver = smtp ajouter les deux propriétés qui suivent :

    protocol = smtps
    hosts_require_auth = {alias ou adresse IP du serveur SMTP}

    A partir de là, Exim4 utilisera SSL/TLS pour le transport.

    Notez que si vous avez scindé la configuration en plusieurs fichiers, vous devrez ajouter ces deux propriétés au fichier /etc/exim4/conf.d/transport/30_exim4-config_remote_smtp_smarthost.

  7. nano /etc/exim4/passwd.client

    Ajouter la ligne {alias ou adresse IP du serveur SMTP}:{compte de connexion SMTP}:{mot de passe de connexion}

  8. update-exim4.conf
    Prise en compte de la nouvelle configuration par Exim4.
  9. systemctl restart exim4
    Redémarrage du relai de messagerie.
  10. echo "Test de messagerie" | mail -s "Courriel de test." webmaster@jmpdom.ovh

    Vérifiez que vous recevez ce message dans votre boîte aux lettres.

Gestion de la file d'attente des messages.

Voici quelques commandes utiles pour gérer la file d'attente des messages :

# Force l'envoi du message {id-courriel}
/usr/sbin/exim -M {id-courriel}

# Liste des messages de la file d'attente
/usr/sbin/exim -bpa

# Force le traitement de la file d'attente
/usr/sbin/exim -qf

# Force le traitement de la file d'attente y compris les messages "gelés" (frozen)
/usr/sbin/exim -qff

# Affiche la trace pour le message {id-courriel}
/usr/sbin/exim -Mvl {id-courriel}

# Affiche le corps du message {id-courriel}
/usr/sbin/exim -Mvb {id-courriel}

# Affiche l'en-tête du message {id-courriel}
/usr/sbin/exim -Mvh {id-courriel}

# Supprime le message {id-courriel} sans émetre aucun message d'erreur
/usr/sbin/exim -Mrm {id-courriel}

# Abandonner le message {id-courriel} pour le renvoyer à l'expéditeur
/usr/sbin/exim -Mg {id-courriel}

# Nombre de messages dans la file d'attente
/usr/sbin/exim -bpr | grep “<” | wc -l

# Nombre de messages "gelés" dans la file d'attente
/usr/sbin/exim -bpr | grep frozen | wc -l

# Suppression des messages "gelés"
/usr/sbin/exim -bpr | grep frozen | awk {‘print $3’} | xargs exim -Mrm
    

Les journaux sont /var/log/exim4/mainlog et /var/log/exim4/paniclog

Conclusion.

Grâce à la commande echo "corps du message" | mail -s "{objet du courriel}" {adresse courriel}, il est aisé d'émettre des courriels via des scripts ou d'envoyer par courriel l'affichage de scripts : {script} | mail -s "{objet du courriel}" {adresse courriel}.

Rédaction par Jean-Marie Piatte (1983-2021)