%
Puffy image/svg+xml Puffy 2019-06-14 Stéphane HUC OpenBSD Team Inkscape Puffy OpenBSD https://www.openbsd.org/art4.html English "Puffy", it's a symbol of OpenBSD

OpenBSD : Configurer smtpd.conf pour l'authentification (depuis OpenBSD 6.4 & ≥)

Article publié, le et modifié le
7 minutes de lecture

Cet article contient 1436 mots.
Source brute de l'article :
Commit version : fce98db

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, puis sur mes propres serveurs MX.

Installation

OpenBSD, depuis sa version 6.4, embarque nativement la nouvelle version d’OpenSMTPD… 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.
  • 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 nous donne un exemple de ce qu’il faut faire - regardez le premier exemple, si besoin, mais je le restitue ici - :

Fichier 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 :

# 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 ; admettons pour l’exemple que ce sera la chaine de caractères : perso.
  • 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 smtpd.conf

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

#	$OpenBSD: smtpd.conf,v 1.14 2019/11/26 20:14:38 gilles 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
#
## add on 6.7
listen on socket

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"
### 6.6 writings
#match for local action "local_mail"
#match for any action "unbound"
### 6.7 writings
match from local for local action "local_mail"
match from local for any action "outbound"

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. Dans le contexte de notre exemple, il faudra écrire la chaine de caractères perso.
      • quant à la chaîne serveur, c’est le nom du serveur SMTP qu’il faut renseigner.
        • 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 le protocol 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 !

Changements 6.7

La v6.7 d’OpenBSD a apporté de légers changements de syntaxe :

  • ajout de listen on socket smtpd.conf(5)#listen2
  • modification de actions de correspondances du gestionnaire de queues local smtpd.conf(5)#match : match from local for local action "local_mail" match from local for any action "outbound"

Changements 6.4 > 6.6

La syntaxe des noms d’actions a légèrement changé entre les versions 6.4 et 6.6 :

  • local devient local_mail
  • relay devient unbound

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 !

Utilisation

Attention

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

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

Le journal quant à lui indiquera le bon redémarrage par une ligne d’information semblable à la suivante : Apr 3 07:17:05 sh1 smtpd[68810]: info: OpenSMTPD 7.0.0 starting

De même, pensez à utiliser le contrôleur smtpctl… je vous renvoie à son manpage qui est très complet !

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, par exemple :

Apr  3 07:20:20 sh1 smtpd[56183]: 2cda1df4efff97f2 mta connecting address=smtp+tls://89.234.141.148:587 host=mail2.automario.eu
Apr  3 07:20:20 sh1 smtpd[56183]: 2cda1df4efff97f2 mta connected
Apr  3 07:20:21 sh1 smtpd[56183]: 2cda1df4efff97f2 mta tls ciphers=TLSv1.3:AEAD-CHACHA20-POLY1305-SHA256:256
Apr  3 07:20:21 sh1 smtpd[56183]: 2cda1df4efff97f2 mta cert-check result="valid" fingerprint="SHA256:17af91bcb27a530cc278cd8be90551593bee38ebaf6ade68053a508b14a8f817"
Apr  3 07:20:21 sh1 smtpd[56183]: 2cda1df4efff97f2 mta delivery evpid=4138560f4bd626cf from=<***@huc.fr.eu.org> to=<***@stephane-huc.net> rcpt=<-> source="46.23.90.29" relay="89.234.141.148 (mail2.automario.eu)" delay=1s result="Ok" stat="250 2.0.0 eb1a48cf Message accepted for delivery"

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).

Documentations

Le protocol SMTP est défini par la RFC 5321 :

RFC 5321

IETF Tools
HTML, PDF, TXT
RFC Editor
HTML, PDF, TXT

Manpages

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.