Postfix: comment utiliser un fichier simple pour l'authentification SASL?


8

J'aimerais exécuter Postfix sur un VPS Debian pour envoyer des e-mails depuis mon application. L'application (fonctionnant sur d'autres VPS) se connecterait à Postfix via SMTP. Postfix n'a pas à gérer les e-mails entrants; il s'agit simplement d'envoyer les messages sortants.

Pour éviter d'être un relais ouvert, l'authentification SASL doit être utilisée. Cependant, je ne veux pas exécuter Dovecot ou MySQL pour l'authentification SASL.

Comment configurer l'authentification SASL à l'aide d'un fichier simple (contenant des noms d'utilisateur et des mots de passe)?

J'ai déjà trouvé une question similaire ; cependant, aucune réponse satisfaisante n'a été donnée.


Utilisez un pare-feu pour ne laisser que les adresses IP des autres VPS se connecter. De plus, vous pouvez définir la variable mynetworks dans main.cf pour que postfix en soit conscient, même si le pare-feu échoue. Si vous voulez vraiment SASL, lisez le SASL_README fourni avec postfix et configurez SASL pour utiliser / etc / sasldb comme "base de données". Devrait fonctionner hors de la boîte. saslpasswd ajoute / supprime / modifie le fichier.
AndreasM

Réponses:


14

Postfix ne prend actuellement en charge que deux méthodes d'authentification SASL. L'un d'eux est Dovecot, dont vous ne voulez pas. L'autre est Cyrus, qui est à peu près aussi proche de ce que vous voulez qu'il est possible d'obtenir sans réécrire Postfix. Cela implique d'exécuter un démon d'authentification distinct ( saslauthd), mais le fichier d'authentification est facile à modifier et à mettre à jour.

Les bases de l'utilisation de Cyrus SASL sont disponibles sur le site de documentation de postfix , mais voici une brève description. Veuillez regarder le lien si quelque chose est déroutant de quelque façon que ce soit!

Commencez par installer Cyrus SASL avec le plugin sasldb. (Comment faire cela est laissé comme un exercice pour le lecteur; il y a probablement un paquet dans n'importe quel système de paquetage que votre marque d'Unix utilise.) Puisque la communication entre Postfix et SASL se fera via une socket de domaine Unix, vous voudrez peut-être ajoutez le suffixe au groupe SASL et assurez-vous que ce groupe dispose des autorisations de lecture et d'exécution sur le répertoire /var/run/saslauthd.

Configurer SASL

Configurez SASL pour utiliser sasldb en modifiant /etc/sasl2/smtpd.conf:

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM

Le plugin sasldb signifie que sasl utilisera un fichier Berkeley DB pour les noms d'utilisateur et les mots de passe. Vous ajoutez des utilisateurs avec la commande saslpasswd2:

$ saslpasswd2 -c -u example.com username
Password:
Again (for verification):

Notez que vous spécifiez un domaine avec le nom d'utilisateur et que l'utilisateur devra utiliser "username@example.com" plutôt que simplement "username" lors de l'authentification.

Vous pouvez vérifier quels utilisateurs ont été entrés en exécutant sasldblistusers2.

Démarrez saslauthd et vérifiez que l'authentification fonctionne en faisant

testsaslauthd -u username@example.com -p password

Configurer Postfix

Une fois cela fait, dites à Postfix d'utiliser SASL et de dire à Cyrus que c'est SMTP qu'il s'authentifie, en éditant /etc/postfix/main.cf pour contenir

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

Ensuite, rechargez postfix, et vous devriez être réglé.


Merci pour votre réponse détaillée! J'ai suivi toutes les étapes et tout semble bien fonctionner. sasldblistusers2affiche correctement la liste des utilisateurs que j'ai ajoutés. Cependant, lors de l' exécution testsaslauthd, je reçois ce résultat: 0: NO "authentication failed". Savez-vous comment je pourrais résoudre ce problème? Ceci est de mon /var/log/auth.log:saslauthd[30471]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=pam] [reason=PAM auth error]
Jonathan

Cela signifie que saslauthd essaie d'utiliser PAM au lieu de sasldb. Quelle était la ligne de commande utilisée pour le démarrer?
Jenny D

J'ai utilisé testsaslauthd (comme décrit dans votre réponse d'origine) et j'ai également essayé d'y ajouter -s smtpd. Si je mets MECHANISMS="sasldb"en /etc/default/saslauthdet redémarrer saslauthd, je reçois le même résultat testsaslauthd. Le journal d'authentification affiche un message différent:saslauthd[3706]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=sasldb] [reason=Unknown]
Jonathan

2
Hm, testsaslauthd fonctionne si je spécifie le nom d'utilisateur et la partie de domaine séparément, comme ceci: testsaslauthd -u username -r example.com -p XXXretours 0: OK "Success.". Maintenant, je vais vérifier si Postfix peut contourner ce problème…
Jonathan

Si vous utilisez, -s smtpdvous lui ferez utiliser PAM au lieu de sasldb, alors ne faites pas ça ...
Jenny D

1

Pour éviter d'être un relais ouvert, l'authentification SASL doit être utilisée.

SASL n'est qu'une des nombreuses façons d'empêcher cela. Un autre serait de mettre sur liste blanche les adresses IP que vous utilisez sur les autres VPS, ou d'exiger des certificats clients TLS (cela peut être considéré comme le moyen le plus sûr).

Il vous suffit de configurer une autorité de signature sur la machine postfix et de signer un certificat par VPS que vous souhaitez envoyer par e-mail.
Ensuite, exigez une vérification complète du certificat client pour tout le courrier soumis; désactiver toute autre méthode de soumission.

Ce que vous demandez n'est pas possible, car postfix ne prend pas directement en charge SASL.


1

Clarifiant juste quelques choses,

Créer un compte dans sasldb:

% saslpasswd2 -c -u fqdn username

Test de l'authentification:

% testsaslauthd -u username -p password

(remarque: le nom d'utilisateur n'est pas suivi du fqdn)

Je voudrais également ajouter que la création d'un compte root

% saslpasswd2 -c -u example.com root

ne vous laissera pas authentifier,

% testsaslauthd -u root -p some_password
0: NO "authentication failed"

Mais ce n'est pas un bug. C'est juste une caractéristique de sécurité.


0

Si vous n'avez pas besoin de gérer le courrier entrant, ne vous embêtez pas avec l'authentification. Bloquez simplement le trafic entrant avec un pare-feu et / ou limitez-le à localhost uniquement.

 inet_interfaces = 127.0.0.1

Plus de problème de relais ouvert, et vous évitez également de compliquer les choses pour les applications qui doivent envoyer du courrier via postfix.


Merci d'avoir répondu. L'application s'exécute sur d'autres VPS, donc Postfix recevra l'e-mail d'autres hôtes que localhost.
Jonathan

Pouvez-vous définir les IP des connexions attendues et les répertorier dans la configuration postfix ou dans une configuration de pare-feu? Par exemple, ils peuvent tous être dans un seul bloc réseau, ou un ensemble suffisamment petit d'adresses IP ou de blocs pour que vous puissiez facilement les répertorier. Vous pouvez également envisager d'utiliser un réseau privé entre vos hôtes virtuels.
mc0e
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.