---
title: "Devuan : Opensmtpd Client Auth"
date: 2020-04-27T09:19:56+02:00
description: "Installer OpenSMTPD sous Devuan et le configurer en tant que client avec authentification"
draft: false
tags: ['Debian','Devuan','Linux Mint','OpenSMPTD','smtp','client','mail','auth']
translationKey: "devuan-opensmtpd-auth-client"
---
## Description
**OpenSMTPD** est une libre implémentation du protocole SMTP
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.
**OpenSMTPD** fait partie du système de base du système d'exploitation
OpenBSD. Il a été "porté" sur d'autres OS, tel Devuan.
Informations :
* Site web : https://www.opensmtpd.org
---
{{< abbr Q "Question" >}} : **Pourquoi utiliser OpenSMTPD ?**
Parce qu'OpenSMTPD est :
- **facile à {{< anchor configurer configuration >}}** : un seul fichier
texte !
- reconnu comme étant fiable ET sécurisé.
---
Fonctionnel et testé sur :
- Debian Sid, Devuan Ceres
- Linux Mint
## Installation
`apt install opensmtpd`
* le journal se trouve être : `/var/log/mail.log`
## Configuration
* Le fichier de configuration principal est : `/etc/smtpd.conf`
Pour envoyer un mail par SMTP à un service de mails nécessitant une
identification, 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`.
### Fichier secrets
Création du fichier de secrets :
`$ mkdir -p .config/mail`
`$ touch .config/mail/secrets`
`$ chmod 0640 .config/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` ;
* `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 **0440**
sur le fichier - *par défaut : 0640*.
Même si l'accès au fichier par smtpd peut sans soucis être fait avec vos
droits personnels `$USER:$USER`, il est préférable de mettre à minima les
droits du groupe `opensmtpd`.
`# chown $USER:opensmtpd .config/mail/secrets`
`$ chmod 0440 .config/mail/secrets`
---
**Note à-propos d'un home chiffré** : veillez absolument à copier/déplacer
ce fichier vers /etc/mail/, autrement le service correspondant ne démarrera
pas, puisqu'il ne peut/pourra pas avoir accès au fichier à ce moment-là !
{{< /note >}}
### Fichier smtpd.conf
Maintenant modifions le fichier `/etc/smtpd.conf`
```cfg
# $OpenBSD: smtpd.conf,v 1.10 2018/05/24 11:40:17 gilles Exp $
# This is the smtpd server system-wide configuration file.
# See smtpd.conf(5) for more information.
table aliases file:/etc/aliases
table secrets file:/home/votre-id/.config/mail/secrets
queue compression
# To accept external mail, replace with: listen on all
listen on localhost
action "local" maildir alias
action "relay" relay host smtp+tls://identifiant@serveur:587 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"
match for local action "local"
match from local for any action "relay"
```
---
**Explications**
Par rapport à la version originale, nous avons donc rajouté :
* la ligne `table secrets` qui appelle le fichier `.config/mail/secrets` -
*ou son équivalent, si vous l'avez personnalisé*…
* la ligne `action relay` 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`, il faut la remplacer par l'adresse
du serveur de mail, par exemple :
`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…
il est bien sûr possible d'utiliser les autres protocoles, tel
que :
* `lmtp` pour se connecter avec une session
{{< abbr LMTP "Local Mail Transfer Protocol" >}}.
* `smtp` pour essayer de se connecter avec une session STARTTLS
si possible
* `smtp+tls` pour obliger une connexion par le biais d'une
session STARTTLS.
* `smtp+notls` pour se connecter "en clair", sans chiffrement
* `smtps` pour se connecter en forçant la connexion
{{< abbr TLS "Transport Layer Secure" >}}
- *port par défaut : 465*.
* si rien n'est spécifié, alors la connexion se fera sur le port
25.
* 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 "relay"` est l'action qui sera déclenchée
lors de l'envoi de mails à l'extérieur !
### Gestion des alias
Un mot sur la gestion des alias système !
Il est intéressant de gérer l'alias relatif à votre compte `root` voire
celui de votre utilisateur principal…
Éditez le fichier `/etc/aliases`, avec des droits administrateurs.
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` !
## Utilisation
{{< note warning >}}
Avant de redémarrer le service **opensmtpd** 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 >}}
Il est nécessaire de redémarrer le service :
`# service opensmtpd restart`, ou
`# /etc/init.d/opensmtpd restart` - si vous utilisez **openrc** en tant
que gestionnaire de service !
### Envois
{{< note info >}}
L'outil **mail** fait partie du paquet **mailutils** !
{{}}
Soit :
* `echo "Test d'envois de mail on $(hostname); date: $(date)" | mail -s "Test de mail" adresse_mail_à_qui_envoyer`
* ou, `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 :
```log
(…)
Apr 27 09:16:47 pc-z smtpd[1718]: 09cca279ca1178e4 smtp connected address=local host=***
Apr 27 09:16:47 pc-z smtpd[1718]: 09cca279ca1178e4 smtp message msgid=85868a25 size=474 nrcpt=1 proto=ESMTP
Apr 27 09:16:47 pc-z smtpd[1718]: 09cca279ca1178e4 smtp envelope evpid=85868a25fcb1569a from= to=
Apr 27 09:16:47 pc-z smtpd[1718]: 09cca279ca1178e4 smtp disconnected reason=quit
Apr 27 09:16:51 pc-z smtpd[1718]: 09cca27892fa38ea mta delivery evpid=85868a25fcb1569a from= to= rcpt= source="192.168.47.47" relay="80.67.160.70 (lautre.net)" delay=4s result="Ok" stat="250 2.0.0 Ok: queued as 53C92112839"
Apr 27 09:17:02 pc-z smtpd[1718]: 09cca27892fa38ea mta disconnected reason=quit messages=2
(…)
```
À partir de maintenant, vous pourrez envoyer depuis votre console ou vos
scripts shell des mails avec authentification SMTP !
### Erreurs
Retrouvez les différentes erreurs possibles sur mon article
{{< inside2 a="Gestion des erreurs" l="sys:openbsd:smtpd-config-auth" >}}
## Documentations
Le protocol SMTP est défini par la RFC 5321 :
{{< rfcdoc 5321 >}}
### Manpages
* {{< man smtpd.conf 5 >}}
### Wikipédia
* {{< wp "Local_Mail_Transfer_Protocol" >}}
---