--- 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" >}} ---