---
categories: ['OpenBSD','Réseau','Client']
date: 2018-11-03T21:38:54+01:00
description: "Comment configurer le service smtpd avec authentification mail sous OpenBSD (>= v6.4), pour permettre l'accès à vos services de messagerie mails."
draft: false
tags: ['OpenBSD','smtpd','auth','mail']
title: "OpenBSD : Configurer smtpd.conf pour l'authentification (depuis OpenBSD 6.4 & ≥)"
translationKey: "openbsd-smtpd-auth-client"
---
## 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 :
* Site web : https://www.opensmtpd.org
* Version fournie : 6.4.0 → **6.7**
* OS : OpenBSD 6.4 → **7.3**
*Testé avec efficacité auprès des services de [Gandi][1], de l'association
[L'autre.net][2], 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](https://man.openbsd.org/smtpd.conf#EXAMPLES)
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** :
```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`
{{< color red >}}n'écrivez pas TEXTUELLEMENT cette information{{}},
remplacez-là par les informations ci-dessous :
* où `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.
{{< note warning >}}
Il est possible de nommer autrement ce fichier secrets, et de le mettre
ailleurs dans votre système de fichier ; comprenez-le principe et modifier
en conséquence.
De même, je vous encourage fortement à ne mettre QUE des droits **0400**
sur le fichier.
Même si l'accès au fichier par smtpd peut sans soucis être fait avec vos
droits personnels `$USER:$USER`,
si vous l'avez mis ailleurs, tel que dans votre `$HOME`, il est préférable
de mettre à minima les droits avec le groupe `_smtpd`.
{{< /note >}}
### Fichier `smtpd.conf`
Maintenant modifions le fichier `/etc/mail/smtpd.conf`
```cfg
# $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
action "unbound" relay host smtp+tls://identifiant@serveur auth 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](https://man.openbsd.org/smtpd.conf#host) 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](https://man.openbsd.org/smtpd.conf#auth) permet de
spécifier la table `secrets` fournissant les données d'identification
mail nécessaires.
* la chaîne [mail-from](https://man.openbsd.org/smtpd.conf#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` *{{< man smtpd.conf 5 "listen~2" >}}*
- modification de actions de correspondances du gestionnaire de queues **local** *{{< man 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
{{< note warning >}}
Avant de redémarrer le service smtpd pour qu'il prenne en compte les
modifications faites, il nous faut tester l'écriture de la
configuration : `# smtpd -n` qui devrait réponde par : `configuration OK`
informant ainsi que tout va bien…
Sinon, rééditez le fichier de configuration à la ligne indiquée en premier ;
c'est d'elle que vient l'erreur principale !
{{< /note >}}
Partons du principe que tout est bon, il suffit de redémarrer le service :
```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 :
`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 :
```log
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 {{< anchor "fichier secret" "fichier-etc-mail-secrets" >}} !
### 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](https://man.openbsd.org/smtpd.conf#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 :
{{< rfcdoc 5321 >}}
### Manpages
* {{< man "smtpd.conf" 5 >}}, {{< man "smtpctl" 8 >}}
### Autres informations
* L'annonce de la sortie d'[OpenSMTPD 6.4.0][3]
* Retrouvez les différents changements de syntaxe induits par la nouvelle
version d'OpenSMTPD : en [Anglais][4], en [Français][5].
---
[1]: https://gandi.net
[2]: https://lautre.net
[3]: https://blog.openbsd.fr.eu.org/index.php?article61/opensmtpd-6-4-0
[4]: https://www.openbsd.org/faq/upgrade64.html
[5]: https://wiki.openbsd.fr.eu.org/doku.php/openbsd.org/faq/upgrade64#changement-de-configuration-et-de-syntaxe
---