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, 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 :
- où
identifiant
est l’identifiant que vous choisissez soigneusement, et qui vous servira plus tard dans la configuration du fichiersmtpd.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.
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
.
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 fichiersecrets
. 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
.
- dans le cas de Gandi, il faut la
remplacer par l’adresse de l’hôte mail de Gandi, à savoir :
- c’est justement là qu’il faut remplacer la chaîne
- 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 !
- REMARQUEZ l’écriture
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
devientlocal_mail
relay
devientunbound
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
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 !
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 fichiersecrets
- 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
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.