OpenBSD : Configurer smtpd.conf pour l'authentification (v6.4 >=)

Article publié, le et modifié le
7 minute(s) de lecture

Cet article contient 1328 mots.
Source brute de l'article : MD

Description

Ou, comment configurer sa machine locale pour envoyer un mail depuis votre console, depuis OpenBSD, actuellement dans sa version 6.4, en se connectant à un service nécessitant une identification ?

Présentation

OpenSMTPD est une libre implémentation du protocole SMTP côté serveur, tel que défini dans la RFC 5321, avec quelques extensions standards additionnels. Il permet à des machines ordinaire d'échanger des mails avec d’autres systèmes parlant le protocole SMTP.

Informations :

Testé avec efficacité auprès des services de Gandi, de l’association L’autre.net. :D

Installation

OpenBSD dans sa mouture 6.4 embarque nativement la nouvelle version d’OpenSMTPD - la 6.4.0… il n’y a donc rien de plus à installer, cela fait partie du système de base.

Donc, un coup de # rcctl start smtpd et c’est partie le service SMTP fonctionnera normalement sur votre machine !

Une petite précision sur les fichiers :

  • le fichier de configuration est : /etc/mail/smtpd.conf - lire le manpage smtpd.conf(5) .
  • le fichier log est /var/log/maillog et permet de surveiller toute l’activité liée à SMTP, vous y retrouverez aussi les erreurs d’envois.

Configuration

Pour envoyer un mail par SMTP à un service de mails nécessitant une identification, tel que celui de Gandi, il est nécessaire de créer dans un premier temps, un fichier secrets avec les droits adéquats sur votre système, ensuite il nous reste à configurer le fichier smtpd.conf.

Le manpage smtpd.conf(5) nous donne un exemple de ce qu’il faut faire - regardez le premier exemple, si besoin, mais je le restitue ici - :

Fichier /etc/mail/secrets

Il nous faut créer ce fichier /etc/mail/secrets : # touch /etc/mail/secrets

Donnons lui les droits adéquats pour le “sécuriser”, selon la section “Exemples” du manpage :

Code : sh

# chmod 640 /etc/mail/secrets
# chown root:_smtpd /etc/mail/secrets

Ensuite, il est nécessaire de le remplir de telle manière : identifiant username:password <= n'écrivez pas TEXTUELLEMENT cette information, remplacez-là par les informations ci-dessous :

  • identifiant est l’identifiant que vous choisissez soigneusement, et qui vous servira plus tard dans la configuration du fichier smtpd.conf ;
  • username est votre identifiant de connexion mail au service mail de votre fournisseur - généralement votre adresse mail - ;
  • password étant le mot de passe lié à votre identification mail.
Attention

Fichier /etc/mail/smtpd.conf

Maintenant modifions le fichier /etc/mail/smtpd.conf

Fichier : /etc/mail/smtpd.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#       $OpenBSD: smtpd.conf,v 1.11 2018/06/04 21:10:58 jmc Exp $

# This is the smtpd server system-wide configuration file.
# See smtpd.conf(5) for more information.

table aliases file:/etc/mail/aliases
table secrets file:/etc/mail/secrets

queue compression

# To accept external mail, replace with: listen on all
#
listen on lo0

action "local_mail" mbox alias <aliases>
action "unbound" relay host smtp+tls://identifiant@serveur auth <secrets> mail-from "@your-domain.tld"

# Uncomment the following to accept external mail for domain "example.org"
#
# match from any for domain "example.org" action "local"
match for local action "local_mail"
match for any action "unbound"
Info

Explications

Par rapport à la version originale, nous avons donc rajouté :

  • la ligne table secrets qui appelle le fichier /etc/mail/secrets - ou son équivalent, si vous l’avez personnalisé
  • la ligne action unbound qui nous permet de définir l’action nécessaire vers l’hôte relais par lequel nous enverrons les mails…
    • REMARQUEZ l'écriture identifiant@serveur :
      • c’est justement là qu’il faut remplacer la chaîne identifiant par celle que vous avez créée dans votre fichier secrets.
      • quant à la chaîne serveur, dans le cas de Gandi, il faut la remplacer par l’adresse de l’hôte mail de Gandi, à savoir : mail.gandi.net.
    • la chaîne smtp+tls est la protocole que nous utilisons pour nous connecter au service de l’hôte mail relais… si vous avez besoin d’utiliser un autre protocole, je vous renvoie à la liste de ceux gérés par OpenSMTPD…
    • la chaîne auth permet de spécifier la table secrets fournissant les données d’identification mail nécessaires.
    • la chaîne mail-from nous permet de spécifier le nom de domaine - ce qui permet d'éviter l’erreur Sender address rejected: Domain not found ; il faut bien sûr que ce domaine vous appartienne…
    • la ligne match … action "unbound" est l’action qui sera déclenchée lors de l’envoi de mails à l’extérieur !

Vérification et redémarrage

Attention

Partons du principe que tout est bon, il suffit de redémarrer le service :

Code : sh

# rcctl restart smtpd
smtpd(ok)
smtpd(ok)

Le journal quant à lui indiquera le bon redémarrage par une ligne d’information semblable à la suivante :
Nov 3 20:43:54 ptb-aw13zou smtpd[35308]: info: OpenSMTPD 6.4.0 starting

Gestion des erreurs

Retrouvez ci-dessous les erreurs communes liées à une mauvaise configuration :

Error: authentication failed

Vérifiez, re-vérifiez votre couple d’identification username, password écrits dans votre fichier secret !

Error: Cannot parse smarthost

Ce message d’erreur est adressé parce que le service SMTP n’arrive pas à comprendre l’ensemble identifiant@serveur dans votre règle action.

Vérifiez vos écritures, afin que :

  • votre table secrets renseigne bien le bon nom de fichier à interroger !
  • vous avez bien écrit une écriture de type identifiant username:password dans votre fichier secrets
  • vous avez bien remplacez la chaîne identifiant par celle que vous avez créée…
  • idem pour la chaîne serveur : assurez-vous de l’existence du nom de l’hôte relais.

Error: Sender address rejected: Domain not found

Ce message d’erreur vous est adressé lorsque le service SMTP ne trouve pas de correspondance avec le nom de domaine.

L’astuce est d’utiliser le paramètre mail-from, dans la règle action, de manière à cibler votre nom de domaine, tel que
mail-from "@votre-domaine.tld" - n’oubliez pas la présence du symbole @ (arobase).

Gestion des alias

Il est intéressant de gérer l’alias relatif à votre compte root voire celui de votre utilisateur principal…

Éditez le fichier /etc/mail/aliases, et vers la fin du fichier, modifiez root en lui indiquant vers quelle adresse mail, vous désirez que les messages systèmes adressés au compte root vous soit envoyés !

Faites de même pour votre utilisateur système ;)

N’oubliez pas de recharger la base des aliases, grâce à l’usage de la commande newaliases… avec des droits administrateurs !

Tests d’envois

Soit :

  • echo "Test d'envois de mail on $(hostname); date: $(date)" | mail -s "Test de mail" adresse_mail_à_qui_envoyer
  • echo "Test d'envois de mail on $(hostname); date: $(date)" | mail -s "Test de mail" root

Dans un cas, comme dans l’autre, le journal vous indiquera l'équivalent, en cas de réussite, d’un tel message :

Fichier : /var/log/maillog

1
2
3
4
5
6
7
()
Nov 3 19:22:34 *** smtpd[37263]: 062ec369dcc6160f mta connecting address=smtp+tls://217.70.178.9:25 host=mail.gandi.net
Nov 3 19:22:34 *** smtpd[37263]: 062ec369dcc6160f mta connected
Nov 3 19:22:34 *** smtpd[37263]: 062ec369dcc6160f mta starttls ciphers=version=TLSv1.2, cipher=ECDHE-RSA-CHACHA20-POLY1305, bits=256
Nov 3 19:22:35 *** smtpd[37263]: smtp-out: Server certificate verification succeeded on session 062ec369dcc6160f
Nov 3 20:49:48 *** smtpd[94764]: 2020e211382c500d mta delivery evpid=a30c319b18ad8967 from=<***@stephane-huc.net> to=<***@stephane-huc.net> rcpt=<-> source="192.168.***.***" relay="217.70.178.9 (mail.gandi.net)" delay=6m41s result="Ok" stat="250 2.0.0 Ok: queued as 91BD31C0003"
()

Autres informations

  • L’annonce de la sortie d’OpenSMTPD 6.4.0
  • Retrouvez les différents changements de syntaxe induits par la nouvelle version d’OpenSMTPD : en Anglais, en Français.