💾 Archived View for jumeaux.nappey.org › lunixite › opensmtpd-concis-ou-taiseux.gmi captured on 2022-06-11 at 20:56:39. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2021-12-04)
-=-=-=-=-=-=-
Title: OpenSMTPd : concis ou taiseux ?
Date: 2017-07-19 16:36
Author: jdn06
Category: Auto-hébergement
Tags: Mail, OpenBSD, OpenSMTPd
Je viens d’abandonner le vénérable
8.15.2 pour un petit jeune,
Pourquoi remplacer quelque chose qui marchait bien et m’a donné toute satisfaction ces sept dernières années ?
J’ai eu mon lot de déconvenues, au point que j’éprouve un peu de déception pour ce programme.
Commençons par les points positifs : la configuration de base est assez bien faite, si bien qu’on peut faire tourner un serveur complet avec signature DKIM avec un fichier de configuration de quinze lignes dans une syntaxe très claire et lisible ! Les valeurs par défaut permettent en effet d’obtenir une authentification SMTP sans programme extérieur en ajoutant le mot `auth` à la directive `listen`. Comparé à Sendmail qui n’authentifie rien par défaut et doit s’adjoindre les services d’un élément externe comme cyrus-sasl, il n’y a pas photo !
Mais cette concision et cette clarté sont un peu trompeuses. Ainsi, la syntaxe n’est pas aussi facile à comprendre que celle de Packet Filter, parce que les concepts utilisés restent un peu flous, comme par exemple le mot `local` qui manque de précision. Il vaut probablement mieux utiliser à la place `source { 192.168.1.0/24 }` si on veut quelque chose de précis.
Mon premier pépin de configuration a concerné les alias. J’ai voulu réutiliser le fichier qui servait à Sendmail, mais celui-ci mélangeait des noms d’utilisateurs seuls avec des noms d’utilisateurs suivis de leur domaine (utilisateur@domaine.fr). Qu’OpenSMTPd ne veuille que des noms d’utilisateurs sans domaine, pourquoi pas ; après tout, il dispose d’un procédé équivalent par ailleurs. Mais que lorsqu’OpenSMTPd ouvre un fichier `aliases` de ce genre, il le rejette purement et simplement sans produire d’erreur dans les logs, voilà qui est moins satisfaisant et rend la résolution du problème plus difficile. OpenSMTPd n’est pas seulement concis, il est aussi laconique, voire taiseux !
Si taiseux qu’il avale même parfois les syllabes. En effet, lorsque le nom d’un utilisateur dépasse les huit caractères, il ne conserve dans les logs que les huit premiers caractères. Du coup, quand j’ai été confronté à un problème d’authentification sur un compte de ce type, j’ai d’abord cru que le rejet de l’authentification provenait d’un nom d’utilisateur tronqué, alors qu’il n’est tronqué que dans les logs. Je ne suis apparemment
dans un premier temps que le problème venait de ces noms tronqués.
Plus ennuyeux encore, les erreurs de configuration ne pardonnent pas. Si par exemple, on croit avoir traité avec une directive `local` le cas des courriels provenant des autres jails ou des autres serveurs locaux et qu’on ne vérifie pas que tout marche bien, on peut se retrouver avec de sérieux problèmes. Si l’utilisateur local envoie à un autre utilisateur local un message qui n’est pas correctement traité par le fichier de configuration, il va se diriger vers le `relay` et former une boucle infinie que le serveur ne stoppe pas. Il s’agit certes d’une erreur de configuration, mais elle est assez aisée à commettre par exemple avec `root@localhost` et peut devenir très problématique lorsque les jails ou les serveurs locaux envoient la nuit suivante des dizaines de messages de bilans journaliers, qui se retrouvent tous dans une boucle sans fin !
Enfin, le module DKIM fourni par le programme fonctionne très bien, mais sa configuration est rendue redoutable par un défaut non documenté qui oblige à coller les arguments des options sans espace. Si l’on écrit `filter dkim-sign dkim-signer "-D mondomaine.fr -s monsélecteur -p /chemin/vers/ma/clef.key"`, le serveur va refuser de démarrer parce qu’il ne trouve pas la clef et si on contourne le problème en utilisant l’emplacement de clef par défaut et en supprimant l’option "-p", le serveur démarrera mais ne validera pas correctement la signature DKIM. Pourquoi ? Parce qu’il lit la configuration comme le domaine `" mondomaine.fr"` et le sélecteur `" monsélecteur"`, en conservant l’espace initiale ! Il faut donc écrire la configuration ainsi : `dkim-sign dkim-signer "-Dmondomaine.fr" "-smonsélecteur" "-p/chemin/vers/ma/clef.key"` Mais je n’ai trouvé aucune trace du problème dans la documentation assez pauvre du projet. Il m’a fallu tomber sur
par hasard, après des heures de recherche, pour comprendre ce qui se passait !
Tout cela n’est pas bien grave, mais ne donne pas l’impression d’un programme aussi soigneusement écrit et documenté qu’on pourrait l’espérer.