AUTHENTIFICATION avec Sendmail
Introduction
Vous pouvez être amené à vous connectez à votre serveur Sendmail depuis un poste distant ( ex: outlook express ou autre de chez vous avec un modem). La fonction d'anti-relai dans la configuration de Sendmail est traitée par la règle check_rcpt qui vérifie l'adresse IP et le nom pleinement qualifié de l'expéditeur. Vous ne pouvez donc pas utiliser ce mécanisme pour que Sendmail vous identifie (puisque vous vous connectez par l'intermédiaire d'un provider). Il existe plusieurs méthodes possibles, la plus utilisée est sans doute SASL. Sendmail contrôle les utilisateurs itinérants par une méthode d'authentification (AUTH).
Pré-requis : Cyrus-SASL et zlib
Vous avez probablement zlib d'installé sur votre machine, sinon installez le ( http://www.gzip.org/zlib/ )
Ttélécharger à ftp.andrew.cmu.edu/pub/cyrus-mail
Les librairies de Cyrus supportent le concept "realms": realm est basé sur le principe du triplet id (identifiant) authid (authentification) et mot de passe. SASL détermine si ce triplet est permis ou non. Plusieurs mécanismes d'authentifications sont supportés par SASL: PLAIN, CRAM-MD5, DIGEST-MD5, KERBEROS,.. Ces mécanismes d'authentification sont réalisés par l'appel de sasl_checkpass () dans /usr/local/sasl/Sendmail.conf (que vous créerrez pour préciser le type d'authentification à utiliser).
Stockage des mots de passe
Sasl utilise sa propre base de données pour stocker les mots de passe (sasl stocke mot de passe dans une base de données secrete sasldb) mais vous pouvez tout aussi bien utiliser /etc/passwd (option pwcheck_method), /etc/shadows (pb si le programme utilisant sasl ne tourne pas sous root). Kerberos_v4 peut être utilisé s'il est trouvé pendant la compilation. pam (pluggable authentivation module) par défaut sous Linux et Solaris. Seul Kerberos 4 (srvtab) est configurable et par défaut dans /etc/srvtab mais est modifiable par l'option srvtab.
En fonction du type de base utilisé (db, gdbm, ndbm) les extensions de ce fichier seront .pag, .dir,... Ces fichiers contiennent des informations importantes qui ne doivent pas être accessibles au simple utilisateur. l'utilitaire saslpasswd permet de changer les mots de passe, sasldblistusers pour visualiser les utilisateurs dans la base sasldb et la méthode d'authentification. Par défaut l'utilisateur authentifier peut être amené à écrire dans le fichier sasl (pour changer son mot de passe) et dans ce cas il faut mettre auto_transition à enable (non par défaut). Pour utiliser kerberos, Sendmail devra accéder à un service de clés stocké dans un fichier "srvtab" ou keytab (KERBEROS 5). Sendmail lit les fichiers de conf dans /usr/lib/sasl/Sendmail.conf L'upgrade de sasl ne nécessite pas de recompilation de Sendmail après l'installation: créer un lien /usr/local/lib/sasl vers /usr/lib/sasl ou bien copier les bibliothèques.
Mécanismes d'authentification
Le mécanisme PLAIN est peu sûr car le mot de passe est passé en clair (dans ce cas il est souhaitable de rajouter SSL en compilant Sendmail avec STARTTLS). Cyrus-SASL supporte la méthode d'authentification par "secret partagé": CRAM-MD5 et DIGEST-MD5 Ces méthodes reposent sur la méthode de secret partagé entre le client et le serveur. Ce mécanisme est bien sur plus sécurisé que la simple méthode PLAIN. Ce mot de passe partagé doit être sotcké sur le serveur dans une base sûre sinon le client ne pourra plus s'authentifier. Ces secrets sont stockés dans la base /etc/sasldb.
Installation et compilation de Cyrus-SASL
./configure --enable-login (ne pas oublier l'option sinon pas possible de s'authentifier !)
make
make install
Les bibliothèques seront installées dans /usr/local/lib/sasl
Créer le fichier /usr/local/lib/sasl/Sendmail.conf
mettez la ligne: pwcheck_method: sasldb (si les mots de passes sont stockés dans la base sasl).
Sendmail lit les fichiers dans /usr/lib :
cp -rf /usr/local/lib/sasl /usr/lib
cp /usr/local/lib/libsasl* /usr/lib/
chmod -R 500 /usr/local/lib/sasl /usr/local/lib/libsasl* /usr/lib/sasl /usr/lib/libsasl*
---Fin d'installation Cyrus-SASL----
Compilation de Sendmail
APPENDDEF(`confENVDEF', `-DSASL -D_FFR_UNSAFE_SASL')
APPENDDEF(`conf_sendmail_LIBS', `-lsasl')
APPENDDEF(`confLIBDIRS', `-L/usr/local/lib')
APPENDDEF(`confINCDIRS', `-I/usr/local/include/sasl')
# /usr/sbin/sendmail -bt -d0.1
Version 8.11.3
Compiled with: LDAPMAP MAP_REGEX LOG MATCHGECOS MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETUNIX NEWDB NIS QUEUE SASL SCANF SMTP USERDB XDEBUG
=========================
SYSTEM IDENTITY (after readcf)
=========================
(short domain name) $w = mail
(canonical domain name) $j = mail.webimmos.com
(subdomain name) $m = webimmos.com
(node name) $k = mail.webimmos.com
==============================
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Ce qui nous intéresse içi c'est la prise en charge SASL comme indiqué çi-dessus. Il reste à configurer. Si vous décidez d'utiliser votre propre base (et non les login/password de /etc/passwd) alors assurez vous d'avoir dans /usr/local/lib/sasl/Sendmail.conf: pwcheck_method: sasldb
Ensuite créez un utilisateur: saslpasswd
Dans votre fichier domaine.com.m4 vous devrez préciser
TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5')dnl
define(`confAUTH_MECHANISMS',`LOGIN PLAIN DIGEST-MD5')dnl
# telnet 127.0.0.1 25
Trying 127.0.0.1... Connected to localhost.webimmos.com.
Escape character is '^]'.
220 mail.webimmos.com ESMTP Sendmail 8.11.3/8.11.3; Tue, 28 Aug 2001 19:26:58 GMT
EHLO webimmos.com
250-mail.webimmos.com Hello localhost.webimmos.com [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ONEX
250-ETRN
250-XUSR
250-AUTH LOGIN PLAIN DIGEST-MD5 (voiçi le résultat de cette prise en charge)
250 HELP
Mettez le niveau de log à 14, vous devriez voir quelque chose comme:
Aug 28 19:26:58 mail sendmail[26903]: SASL: available mech=LOGIN PLAIN ANONYMOUS DIGEST-MD5, allowed mech=LOGIN PLAIN DIGEST-MD5