SMTP auth en TLS sous postfix avec SASL & courier-authdaemon

J'inaugure la catégorie howto de mon blog avec ce premier dossier.
Le SMTP auth vise à identifier les clients avec leur login et mot de passe (authentification chiffrée) pour leur autoriser à relayer des mails vers les domaines extérieurs.

Nous allons partir du principe que vous avez déjà un postfix fonctionnel avec un serveur pop ou/et imap basé sur courier, le tout sous Debian.
Le schéma est le suivant :

client >> postfix >> saslauthd >> courier-authdaemond >> mysql

Installons les paquets nécessaires :

# aptitude install postfix-tls libsasl2 libsasl2-modules sasl2-bin openssl

Générons le certificat SSL valable 1 an pour le TLS de postfix :

# cd /etc/postfix
# openssl req -new -outform PEM -out /etc/postfix/smtpd.cert -newkey rsa:2048 -nodes -keyout /etc/postfix/smtpd.key -keyform PEM -days 365 -x509


Répondez aux quelques questions demandées, la plus importante étant : "Common Name (eg, YOUR name) :", où il faudra indiquer le FQDN de votre machine (machine.domaine.org).
Corrigeons maintenant les droits sur le fichier de la clé pour éviter qu'un utilisateur mal intentionné vienne la lire.

# chmod o= /etc/postfix/smtpd.key

Ajoutez l'utilisateur postfix au groupe sasl, ceci permettra à postfix d'aller dialoguer avec saslauthd grâce au socket unix /var/run/saslauthd/mux.

# adduser postfix sasl

Corrigez les permissions sur le répertoire /var/run/courier/authdaemon afin que saslauthd dialogue avec courier-authdaemond.

# chmod 775 /var/run/courier/authdaemon

Passons maintenant à la configuration de saslauthd :
Editez le fichier /etc/default/saslauthd :
Décommentez START=yes en enlevant le # en début de ligne.
Spécifiez : MECHANISMS="sasldb". Cet argument est nécessaire pour le démarrage de saslauthd mais ne sera pas utilisé car on passe par le authdaemond de courier.

Ensuite créez le répertoire /etc/postfix/sasl :

# mkdir /etc/postfix/sasl && chown root:postfix /etc/postfix/sasl

Et créez y le fichier smtpd.conf contenant :

pwcheck_method: authdaemond
authdaemond_path: /var/run/courier/authdaemon/socket
mech_list: plain login
allow_plaintext: true


Et finissons avec la configuration de postfix :
Editons le fichier /etc/postfix/main.cf, et ajoutons :

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key


Enfin, redémarrons le tout :
# /etc/init.d/postfix restart
# /etc/init.d/saslauthd restart

Voila ! Il ne vous reste plus qu'à configurer votre client mail favori pour se connecter en TLS avec authentification "PLAIN", y indiquer votre login et votre mot de passe.

Commentaires

1. Le par pierre

j'ai essaye de suivre ton tuto, mais l'authentification ne fonctionne pas. j'ai ca dans mes logs :

warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory

2. Le par hacky

Tiens, un Pierre aussi :)
Salut à toi !

Ton postfix doit être chrooté, ce qui est le cas par défaut dans le paquet debian. Tu as 2 possibilités : sortir postfix de son chroot (en mettant les "n" dans la colonne qui va bien du fichier /etc/postfix/main.cf) ou copier le "vrai" fichier /etc/sasldb2 dans /var/spool/postfix/etc/sasldb2

Tiens moi au courant si cela a fonctionné.

3. Le par Mickael

Après avoir chrooté j'ai toujours un probleme d'identification..

Dec 6 16:29:03 dns postfix/smtpd[27603]: connect from chrlr-2-1-202-12.adsl.hyperline.be[85.234.202.12]
Dec 6 16:29:07 dns postfix/smtpd[27603]: warning: SASL authentication failure: no secret in database
Dec 6 16:29:07 dns postfix/smtpd[27603]: warning: chrlr-2-1-202-12.adsl.hyperline.be[85.234.202.12]: SASL CRAM-MD5 authentic$
Dec 6 16:29:07 dns postfix/smtpd[27603]: warning: SASL authentication failure: no secret in database
Dec 6 16:29:07 dns postfix/smtpd[27603]: warning: chrlr-2-1-202-12.adsl.hyperline.be[85.234.202.12]: SASL NTLM authenticatio$
Dec 6 16:29:07 dns postfix/smtpd[27603]: warning: SASL authentication failure: Password verification failed
Dec 6 16:29:07 dns postfix/smtpd[27603]: warning: chrlr-2-1-202-12.adsl.hyperline.be[85.234.202.12]: SASL PLAIN authenticati$
Dec 6 16:29:07 dns postfix/smtpd[27603]: warning: chrlr-2-1-202-12.adsl.hyperline.be[85.234.202.12]: SASL LOGIN authenticati$
Dec 6 16:29:10 dns postfix/smtpd[27603]: lost connection after AUTH from chrlr-2-1-202-12.adsl.hyperline.be[85.234.202.12]

4. Le par hacky


"Après avoir chrooté" ? dé-chrooté plutôt ?
Ton courier fonctionne correctement ? L'identification se passe bien sur celui ci ?
Sinon tu peux essayer l'autre howto avec la méthode rimap : smtp-auth-tls-postfix-avec-sasl-linke-a-imap

5. Le par SLYYY

Je ne sais pas si le problème vient de là mais dans mon fichier de conf j'avais une ligne :
smtpd_sasl_path = /etc/postfix/sasl:/usr/lib/sasl2
elle me foutait la merde, l'authentification ne fonctionnait pas, je l'ai mise en commentaire, redémarré postfix et saslauthd et depuis plus de problème... cela peut peut-être aider...

6. Le par Frenche

Salut.

Je viens de suivre ton HOW to mais j'ai un bug quand je souhaite me connecté au serveur SMTP depuis l'extérieur de mon réseau.

voici l'erreur dans le log:

warning: SASL authentification failure: cannot connect to Courier authdaemond: no such file or directory

Merci pour l'aide...

7. Le par hacky

@Frenche : as tu vérifié que /var/run/courier/authdaemon/socket existait et était accessible par postfix ? Est-ce que l'utilisateur postfix est bien dans le groupe sasl ?

Sinon, en dernier recours, as tu essayé en rimap ? Le lien est au commentaire 4.

8. Le par hodj

Quel est l'avantage d'exécuter saslauthd pour qu'il interroge authdaemond alors que postfix peut utiliser directement authdaemond via libsasl2 et éventuellement libsasl2-modules/mysql

Est tu sur que postfix (le daemon smtpd) utilise bien saslauthd car il n'y à aucune relation direct entre saslauthd et postfix ?

9. Le par hacky

@hodj: postfix appelle bien saslauthd indirectement via la libsasl. saslauthd gère son backend d'identification lui même (mysql, rimap, pam etc...) et ne fait que répondre que le login/mdp sont OK ou erronés.

Mais si tu as une autre méthode à m'expliquer je suis preneur :)

10. Le par nuxwin

Bonjour ;

Effectivement, il me semble que hodj a raison. Nullement besoin d'utiliser Saslauthd qui d'ailleurs n'est qu'une autre méthode de vérification de mot de passe et non pas à utiliser en conjonction avec authdaemond qui lui aussi est une méthode de vérification de mot de passe.

Cyrus SASL peut utiliser le service authdaemond de courrier. Il se connectera à la socket authdaemond de la bibliothèque authlib de Courier et lui communiquera les informations d'identifications du client de messagerie pour qu'elle les vérifie.

L'utilisation du service authdaemond fait bénéficier Cyrus SASL des nombreux backend que la bibliothèque authlib de Courrier reconnaît pour l'authentification des utilisateurs. Ce faisant, ce service est limité à l'utilisation des mécanismes de type texte en clair soit PLAIN et LOGIN, solution bien moin sécurisée que l'utilisation d'auxprop, qui est le seul à pouvoir utiliser les mécanismes de type secret partagé.

Pour info, si vous désirez utiliser authdaemon comme service de vérification de mot de passe, voici ce que doit contenir le fichier /etc/postfix/smtp.conf :

---
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/run/courier/authdaemon/socket.

---

A noter que j'ai déchrooté smtpd (fichier master.cf de postfix), que je l'ai redémarré et que j'ai appliqué un chmod 0755 sur les répertoires /var/run/courier et /var/run/courier/authdaemon

Bonne continuation.

Ps : Je n'utilise pas saslauthd, j'en suis certain dans la mesure ou il ne tourne pas en arrière plan.

11. Le par nuxwin

Re ;

Petite rectification pour l'emplacement du fichier smtpd.conf. Il se situe dans /etc/postfix/sasl et non dans /etc/postfix

Bonne continuation à vous.

12. Le par nuxwin

Re, c'est encore moi.

A défaut de passer pour le nouveau chieur de service, voici la preuve :

/etc/default/saslauthd :

  1. This needs to be uncommented before saslauthd will be run automatically
  2. START=yes
  1. You must specify the authentication mechanisms you wish to use.
  2. This defaults to "pam" for PAM support, but may also include
  3. "shadow" or "sasldb", like this:
  4. MECHANISMS="pam shadow"

MECHANISMS="pam"

Ici, comme vous pouvez aisément le constater, le service n'est pas démarré.

Bonne continuation à tous.

13. Le par hacky

Ok, merci à nuxwin pour les compléments !

14. Le par Nicolas

Bonjour, tout d'abord un grand merci pour ton How-to.
Je l'ai bien suivit a la lettre et ouf l'authentification fonctionne a une chose pret : il ne reconnait aucun nom d'utilisateur.
Comment dois-je faire pour qu'il accepte mon nom d'utilisateur "user" par exemple ?

Merci pour vos reponses.

15. Le par hacky

@Nicolas, tente simplement avec user@domaine.tld au lieu de user tout court. Ça devrait marcher.

16. Le par Nicolas

Bonjour,

Voila je suis a bout. Grrrr
Je viens d'essayer 7 tutos differents et j'ai reinstaller 7 fois Debian 4.0 sur une machine pour essayer Auth SMTP avec SASL.
J'ai essayer plusieurs methode : Mysql, SASLDB2, PAM, ... toutes on aboutit au meme echec, Authentification failed : Generic failure.
J'ai beau faire toutes les manips une par une, sa ne fonctionne pas. Je suis tomber sur un Tutos ou ils explique comment faire pas a pas et installant les paquets avec leurs sources, meme sa sa ne fonctionne pas.

J'avoue ne plus savoir quoi faire et je me retrouve dans une impasse.
Le point positif c'est que les configurations sur mon POP3/IMAP fontionne toutes mais Postfix ne fonctionne que en local et sa ne m'interresse pas.

Pouvez-vous m'aidez Ou m'indiquez une ultime voie a suivre? Meme sur le site de Debian il n'explique pas comment faire fonctionner l'authentification avec Postfix.

:'( Merci a vous de vos reponses.

Nicolas

17. Le par Nicolas

Re, pardonnez-moi,
je viens de refaire une tentative
J'ai une nouvelle erreur "SASL authentication failure: cannot connect to Courier authdaemond: No such file or directory"
J'ai verifier /var/run/courier/authdaemon/socket existe bel est bien.

Autre phenomene, jai aussi essayer avec Imap et lorsque je fais testsaslauthd -u user -p pass j'ai comme reponse 0: OK "Succes" mais sa ne marche pas pour autant avec mon client mail!!!!!!!!!!

Voila, merci de votre aide

18. Le par Nicolas

Desoler de vous avoir importuner,
je suis tomber sur un totus tres complet que j'ai decider de faire ce midi.
J'ai donc installer une machine virtuelle avec Debian 4.0 et est suvi ce tuto --> http://www.starbridge.org/spip/spip...
Tout fonctionne. L'authentification, les virtualbox, etc ...

Ouaaa apres 2 semaines de galere je trouve enfin ma solution.

Merci quand meme pour ton tuto, mais les informations que tu donne et celles que j'ai trouvee sont les memes. Je me demande si ce n'est pas moi qui a fait une erreur quelque part mais sa metonnerai que sur 8 installation de base il n'y en a que une de correcte.

Bref, je suis content. Je vais aller chercher des aspirines et me reposer le cerveau.

Merci ;-)

Nicolas

19. Le par cbn38

Tuto utile merci !
Pour répondre à des problèmes que certains ont rencontré avec courier-authdaemon sous Debian, il faut comprendre que postfix tourne dans un environnement chrooté (une prison dont il ne peut sortir : /var/spool/postfix). Quand on indique dans /etc/postfix/sasl/smtpd.conf (ou similaire) d'aller chercher le socket unix d'authdaemond ici /var/run/courier/authdaemon/socket, en fait postfix va le chercher là : /var/spool/postfix/var/run/courier/authdaemon/socket. Il faut donc le hardlinker après chaque redemarrage de courier-authdaemon. Est-ce un bug ? Je ne sais pas. Mais je vous invite à patcher /etc/init.d/courier-authdaemon de la sorte: ajouter les 2 lignes suivantes à la fin de la séquence de start:
rm -f /var/spool/postfix/var/run/courier/authdaemon/socket
ln /var/run/courier/authdaemon/socket /var/spool/postfix/var/run/courier/authdaemon/socket

Christophe.

20. Le par DevNull

Bonjour à toutes et à tous,

ben voilà 3h00 de recherches pour trouver la solution ici :-) Sur ma debian Testing si je fais :

rm -f /var/spool/postfix/var/run/courier/authdaemon/socket
ln /var/run/courier/authdaemon/socket /var/spool/postfix/var/run/courier/authdaemon/socket

comme préconisé par Christophe, ça roule, je n'ai plus le message "warning: SASL authentication failure: cannot connect to Courier authdaemond: No such file or directory"

Merci

21. Le par R4F4L

Moi j'ai ce message quand je veux envoyer un mail: RCPT TO <fshizzle@hotmail.fr> a échoué : <fshizzle@hotmail.fr>: Relay access denied

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs