Table des matières

Postfix et SASL

… ou le smtp authentifié.

But: servir de relay mail, uniquement si l'envoyeur est authentifié.

On utilisera “Cyrius SASL” …

~~READMORE~~

Installer le service SASL

Package

# aptitude install sasl2-bin

On voit :

...
update-rc.d: warning: default stop runlevel arguments (0 1 6) do not match saslauthd Default-Stop values (1)
To enable saslauthd, edit /etc/default/saslauthd and set START=yes ... (warning).
...

Configurer

D’après la doc : /usr/share/doc/sasl2-bin/README.Debian.gz

On utilise un Postfix “chrooter” ? Oui par defaut.

En pratique:
Pour mettre la socket saslauthd dans le chroot Postfix, editer /etc/default/saslauthd et fixer OPTIONS comme cela (vous pouvez omettre -c):

OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

Et aussi, mettre/modifier:

# TJ -----------
#START=no
START=yes
# --------------

To set the run directory using dpkg-statoverride, run this command as root” :

# dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd

Et pour finir, ajouter le user Postfix au groupe sasl :

# adduser postfix sasl

Les lib sasl sont là:

/usr/lib/sasl2/

… et c'est bien. Par defaut, on a dans la conf:

# postconf -d | grep smtpd_sasl
smtpd_sasl_auth_enable = no
smtpd_sasl_authenticated_header = no
smtpd_sasl_exceptions_networks =
smtpd_sasl_local_domain =
smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
smtpd_sasl_type = cyrus

et c'est globalement bien (sauf que c'est encore disable), et notamment:

smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = cyrus

La conf du daemon “sasl” doit être dans :

/etc/postfix/sasl/smtpd.conf

… ce qui est en adéquation avec ça:

# postconf -d | grep smtpd_sasl_path
smtpd_sasl_path = smtpd

(le “.conf” est ajouté automatiquement)

Donc, dans /etc/postfix/sasl/smtpd.conf on a :

pwcheck_method: saslauthd
saslauthd_path: /var/run/saslauthd/mux
mech_list: login plain
:!: le paramètre “saslauthd_path” est relatif au chroot.

Comme dit la doc : Do not specify any other mechanisms in mech_list than PLAIN or LOGIN when using saslauthd

Et enfin :

# /etc/init.d/saslauthd start

(parce que le daemon n'avait pas encore demarré …)

Le “mux” est bien créé là: /var/spool/postfix/var/run/saslauthd/mux

Tester

# testsaslauthd -u <user> -p <password> -f /var/spool/postfix/var/run/saslauthd/mux

Si Ok:

0: OK "Success."

Sinon:

0: NO "authentication failed"
:!: Eviter de créer un compte test avec le mot de passe test (ou autres evidences) .
En moins de 24h, ce compte sera exploité par des intrus !!! LOL

Postfix

Maintenant, on va faire en sorte que Postfix utilise sasl (qui n'est qu'un simple daemon tout seul pour l'instant)

Par defaut, Postfix est prêt a causer avec “Cyrius” (on la vu plus haut): c'est bien.

Bug avec certains clients Outlook: ( lien: http://www.postfix.org/SASL_README.html ) .
Dans ce cas, prévoir d'ajouter dans /etc/postfix/main.cf :

broken_sasl_auth_clients = yes

… ce que je fais, puisque dixit la doc: ça ne casse rien pour les autres clients.

Mais surtout, il faut activer le SASL dans /etc/postfix/main.cf :

############################
# SASL
# smtp authentifié
############################
smtp_sasl_auth_enable = no
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $mydomain

unknown_local_recipient_reject_code = 450

smtpd_recipient_restrictions =
      permit_mynetworks,
      permit_sasl_authenticated,
      reject_unauth_destination

broken_sasl_auth_clients = yes

… et dans aussi :

# avec SASL devient:

smtpd_client_restrictions =
      permit_mynetworks,
      permit_sasl_authenticated

Et enfin:

# postfix reload

S'il y a des “warning” et autres “fatal” dans les logs:
Verifier que saslauthd_path (dans sasl/smtpd.conf) pointe bien sur la socket “mux”, que les droits sont corrects, et que “postfix” est dans le groupe “sasl”.

On test vite:

$ telnet 0 25

On tape:

EHLO titi.localdomain

On devrait voir la ligne:

...
250-AUTH PLAIN LOGIN
...

… ainsi que 250-AUTH=PLAIN LOGIN , si on a appliqué le broken_sasl_auth_clients = yes vu plus haut.

Quand un utilisateur est authentifié, on a alors:

... ns postfix/smtpd[6880]: 8EE724FF1D: client=milf94-7-xxxxx.livebox.net[xxxxxx], sasl_method=PLAIN, sasl_username=xxxxx@tjaouen.fr

Voila.

pam et smtp

UPDATE: 2016/09/11

L'authentification fonctionne, mais elle ne défini pas les utilisateurs ayant le droit de s'authentifier !!!

Ainsi, si par malheur vous avez un utilisateur quelconque avec un login/pass très simple (genre: test/test ), alors “saslauthd” lui permettra d'envoyer des mails !!!!

On peut restreindre les uid/gid en jouant avec les modules PAM.

Imaginons que les comptes crées ont un uid entre '2000' et '9999', et qu'ils sont tous dans le groupe “users” .

Alors on va créer un fichier là: “/etc/pam.d/smtp” , contenant (exemple):

auth       required     pam_succeed_if.so quiet_success user ingroup users
auth       required     pam_succeed_if.so quiet_success uid >= 2000
auth       required     pam_succeed_if.so quiet_success uid <= 9999

# Poursuivre l'authentification normale:

@include other
:!: Ne pas oublier le “@include other” , sinon vous transformez votre serveur en “open relay” !

Relancer le service:

# /etc/init.d/saslauthd restart

Tester:

$ testsaslauthd -r <domain> -s smtp -u login -p pass -f /var/spool/postfix/var/run/saslauthd/mux

Remplacer “<domain>” par ce que contient “$mydomain” dans votre conf.

Sources