Modifications entre les versions 15 et 16
Version 15 à la date du 2007-02-27 18:50:30
Taille: 9118
Commentaire:
Version 16 à la date du 2007-11-30 12:25:28
Taille: 7466
Éditeur: ThomasNoël
Commentaire: gros nettoyage, en espérant que c'est bon...
Texte supprimé. Texte ajouté.
Ligne 3: Ligne 3:
Note : Je (JeanChristopheAndré) présente ici l'installation sur une Debian ''Sarge'' ou ''Etch''. == Prérequis IMPORTANT : chiffrement des communications en TLS ==

Afin de pouvoir s'authentifier en toute sécurité, il est très fortement conseillé d'activer le [:../Chiffrement:chiffrement TLS] des connexions SMTP. C'est même '''indispensable''' pour la configuration présentée ici, car on y utilise le mécanisme `PLAIN` qui consiste à transmettre le mot de passe en clair lors de l'authentification. Ceci est souvent nécessaire pour les mécanismes sous-jacents, qui doivent recevoir le mot de passe "tel quel" afin de le crypter avec leur propre algorithme.
Ligne 7: Ligne 9:
Afin de pouvoir s'authentifier en toute sécurité, il est fortement conseillé d'activer le [:../Chiffrement:chiffrement TLS] des connexions SMTP. C'est même indispensable pour la configuration que je présente ici, car on y utilise le mécanisme `PLAIN` qui consiste à transmettre le mot de passe en clair lors de l'authentification (nécessaire pour certains mécanismes sous-jacents). Il faut installer les modules SASL et les programmes nécessaires (dont le démon d'authentification `saslauthd`) :
 {{{
# aptitude install libsasl2-modules sasl2-bin
}}}
Ligne 9: Ligne 14:
Dans tous les cas, il faut au moins installer les modules SASL :
{{{
$ sudo aptitude install libsasl2-modules
== Configuration du démon d'authentification saslauthd ==

Ce démon sera interrogé par les systèmes qui veulent faire de l'authentification. C'est lui qui saura quel module contacter. La configuration se fait dans `/etc/default/saslauthd` :

 {{{ # extrait de /etc/default/saslauthd :
START=yes
# le mécanisme à utiliser (PAM est sans doute le plus générique)
MECHANISMS="pam"
MECH_OPTIONS=""
# 5 processus en parallèle, ça suffit :
THREADS=5
# Très important pour Postfix : (lire "man saslauthd")
# option -m : pour Postfix, qui tourne en chroot
# option -r : construit un identifiant prenom.nom@domain
OPTIONS="-r -m /var/spool/postfix/var/run/saslauthd"
Ligne 13: Ligne 30:

Il faut ensuite rendre le service d'authentification disponible depuis l'environnement ''chroot'' de Postfix :

 {{{
# invoke-rc.d saslauthd start # start/stop : astuce pour créer le répertoire /var/run/salsauthd
# invoke-rc.d saslauthd stop
# mkdir -p /var/spool/postfix/var/run
# mv /var/run/saslauthd /var/spool/postfix/var/run/
# ln -s /var/spool/postfix/var/run/saslauthd /var/run/
# adduser postfix sasl # ajoute postfix au groupe sasl (faire "id postfix" pour vérifier)
# invoke-rc.d saslauthd start
}}}

== Configuration de PAM pour utiliser MySQL ==

Nous avons dit à `saslauthd` d'utiliser PAM (Pluggable Authentication Modules). Il faut donc configurer PAM pour lui dire d'aller chercher les informations d'authentification dans MySQL.

On installe le module de PAM qui permet d'interroger une base MySQL :
 {{{
# aptitude install libpam-mysql}}}

Et on configure PAM pour lui dire d'utiliser ce module pour le service ``smtp`` (fichier `/etc/pam.d/smtp`) :
 {{{# fichier /etc/pam.d/smtp
# attention, c'est sur deux lignes seulement (votre navigateur les coupe certainement) :
auth required pam_mysql.so user=messagerie passwd=vousrevez host=127.0.0.1 db=mail table=utilisateurs usercolumn=source passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=messagerie passwd=vousrevez host=127.0.0.1 db=mail table=utilisateurs usercolumn=source passwdcolumn=password crypt=1
}}}

Dans cet exemple, nous avons un serveur MySQL local (127.0.0.1), avec une base ''mail'' qui contient une table ''adresses'' dans laquelle on trouve les colonnes ''source'' (le login, de type `prenom.nom``@auf.``org`) et ''password''.

Pour plus d'information, la documentation d'utilisation du module PAM est dans `/usr/share/doc/libpam-mysql/README.gz`
Ligne 16: Ligne 64:
=== Authentification via PAM, LDAP ou IMAP ===

Il faut ici utiliser l'authentification externe via `saslauthd`.

Pour ce faire, il faut installer les outils SASL :
{{{
$ sudo aptitude install sasl2-bin
On indique le système d'authentification dans `/etc/postfix/sasl/smtpd.conf`. Dans notre cas, on passe par `saslauthd` :
 {{{# dans /etc/postfix/sasl/smtpd.conf :
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN ANONYMOUS
log_level: 7
Ligne 25: Ligne 71:
On indiquera le système d'authentification dans `/etc/postfix/sasl/smtpd.conf` :
{{{
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN ANONYMOUS
Ensuite on active le tout au niveau de `/etc/postfix/main.cf` :
 {{{# activation de l'authentification :
smtpd_sasl_auth_enable = yes

# modifiez votre option smtpd_recipient_restrictions pour y ajouter une permission
# au niveau SASL : les clients authentifiés pourront utiliser le serveur pour envoyer
# des messages à qui il veulent (pas de restrictions sur les "recipients") :
# smtpd_recipient_restrictions = (...), permit_sasl_authenticated, reject_unauth_destination
# Sur une configuration classique, cela sera :
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

# IMPORTANT : n'offrir la possibilité de s'authentifier *que* si le canal
# est sécurisé via TLS (il faut donc aussi activer TLS)
# voir http://wiki.auf.org/wikiteki/Postfix/Chiffrement
smtpd_tls_auth_only = yes
Ligne 31: Ligne 88:
On spécifiera la méthode d'authentification dans `/etc/default/saslauthd` :
{{{
START=yes
MECHANISMS="pam"
}}}
ou bien :
{{{
START=yes
MECHANISMS="ldap"
}}}
ou encore :
{{{
START=yes
MECHANISMS="rimap"
PARAMS="-O localhost" # serveur imap
}}}

Pour LDAP il faudra alors créer un fichier supplémentaire `/etc/saslauthd.conf` :
{{{
ldap_servers: ldap://127.0.0.1/
ldap_search_base: o=AuF
ldap_filter: mail=%U@auf.org
ldap_use_sasl: no
ldap_auth_method: bind
}}}
Voir `/usr/share/doc/sasl2-bin/LDAP_SASLAUTHD.gz` pour les options disponibles.

Il faut ensuite rendre le service d'authentification disponible depuis l'environnement de Postfix :
{{{
$ sudo invoke-rc.d saslauthd start # astuce pour créer le répertoire de travail
$ sudo invoke-rc.d saslauthd stop
$ sudo mkdir -p /var/spool/postfix/var/run
$ sudo mv /var/run/saslauthd /var/spool/postfix/var/run/
$ sudo ln -s /var/spool/postfix/var/run/saslauthd /var/run/
$ sudo usermod -G $(id -Gn postfix | tr ' ' ','),sasl postfix # pour ajouter postfix au groupe sasl
$ sudo invoke-rc.d saslauthd start
}}}

=== Authentification via MySQL ===

<!> Attention : cette solution n'a pas encore été testée !
/!\ Je (JeromeSantini) vient de tester, et j'ai l'impression que cette méthode nécessite d'avoir le mot de passe en clair dans la base ? en tous cas, pas réussi à faire marcher avec le mot de passe au format compatible {{{crypt()}}} :-(

Dans ce cas on n'a pas besoin de `saslauthd` mais il faut en revanche installer les modules SQL :
{{{
$ sudo aptitude install libsasl2-modules-sql
}}}

Voici un exemple de configuration dans `/etc/postfix/sasl/smtpd.conf` :
{{{
pwcheck_method: auxprop
mech_list: PLAIN LOGIN ANONYMOUS
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfix
sql_passwd: XXXXX
sql_database: system
sql_select: SELECT password FROM system WHERE username='%u'
}}}

== Configuration de Postfix pour utiliser SASL ==

On pourra utiliser l'extrait de configuration suivant dans `/etc/postfix/main.cf` :
{{{
# n'offrir la possibilité de s'authentifier *que* si on est sécurisé via TLS
smtpd_tls_auth_only = yes

#===== SASL
# compatibilité avec les clients bogués (de chez Micro$oft...)
#broken_sasl_auth_clients = yes
#----- connexion entrante
smtpd_sasl_auth_enable = yes
#smtpd_sasl_security_options = noanonymous, noplaintext
#----- connexion sortante
#smtp_sasl_auth_enable = no
#smtp_sasl_password_maps = hash:$config_directory/saslpass
#smtp_sasl_security_options = noplaintext, noanonymous

# filtrage des envois pour n'autoriser que ceux authentifiés
smtpd_recipient_restrictions = ..., permit_sasl_authenticated, reject_unauth_destination
}}}

Il faut bien évidement penser à redémarrer (et non recharger) Postfix :
{{{
$ sudo invoke-rc.d postfix restart
}}}

== Filtrage des envois selon l'adél de l'émetteur ==

Après authentification, Postfix permet également de vérifier la ou les adéls utilisées par l'émetteur (pas obligatoire, mais peut être utile pour stopper les pourriels).

Par exemple, j'ai créé un fichier `/etc/postfix/sender_login` contenant :
{{{
bilou@microsoft.com bgates
}}}
(Ne pas oublier de lancer `postmap /etc/postfix/sender_login`.)

Puis j'ai ajouté les lignes suivantes dans `/etc/postfix/main.cf` :
{{{
smtpd_sender_login_maps = hash:$config_directory/sender_login
smtpd_sender_restrictions = ..., reject_sender_login_mismatch, ...
}}}
(Ne pas oublier de recharger Postfix.)

Après cela, l'utilisateur `bgates` ne peut plus utiliser d'autre adresse que `bilou@microsoft.com` faute de quoi son envoi sera simplement rejeté, ce avant même d'être mis dans la queue d'envoi.

== Discussions ==
 . ThomasNoël : On peut pas faire du SASL sans TLS ? Les mots de passe ne circulent pas en clair de toute façon, non ?
  . JeanChristopheAndré : Oui, on peut, en utilisant une authentification plus forte que le simple PLAIN (mot de passe encodé en base64) ; la config ci-dessus marche avec Mozilla mais je n'ai pas encore testé avec les outils Micro$oft...
  . JeanChristopheAndré : Ma priorité était surtout d'empêcher les virus de sortir via le port SMTP, ce qui fonctionne bougrement bien ! Pour un nomade il suffira de le configurer pour utiliser un accès SMTP authentifié sur le serveur de Montréal ou celui de Paris (s'assurer que les filtrages soient ouverts à cet effet), et éventuellement créer un login+mdp pour les invités qui l'utiliseront pour sortir en SMTP le temps de leur passage chez nous.
Il faut ensuite redémarrer Postfix : {{{# invoke-rc.d postfix restart}}}
Ligne 144: Ligne 91:
(merci à XavierFossouo pour l'inspiration ;-) )
Ligne 148: Ligne 94:
Ligne 155: Ligne 102:
== Exemples == = Annexes et historique =
Ligne 157: Ligne 104:
=== Authentification MySQL via PAM ===
(présenté par JeanFrançoisLancelot)
== Filtrage des envois selon l'adél de l'émetteur ==
Ligne 160: Ligne 106:
L'authentification des mots de passe au format "crypt" fonctionne avec "saslauthd + pam" cependant avec l'encodage md5 c'est pas encore au point. (doc de ProgFou)
Ligne 162: Ligne 108:
Ci-dessous [:JeanFrancoisLancelot:ma] configuration dans le cadre d'un mot de passe formaté "crypt". Après authentification, Postfix permet également de vérifier la ou les adéls utilisées par l'émetteur (pas obligatoire, mais peut être utile pour stopper les virus-pourriels si vous avez encore des clients Outlook et compagnie).
Ligne 164: Ligne 110:
<!> On installe le module pour que "Pam" puisse fonctionner avec "mysql"
{{{
$ sudo aptitude install libpam-mysql
Par exemple, j'ai créé un fichier `/etc/postfix/sender_login` contenant :
 {{{
# /etc/postfix/sender_login
# après chaque modif, lancer : postmap /etc/postfix/sender_login
bilou@microsoft.com bgates
Ligne 169: Ligne 117:
Système d'authentification dans `/etc/postfix/sasl/smtpd.conf` :
{{{
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN ANONYMOUS
log_level: 7
}}}
Le "log_level" à ce niveau est très utile et permet de visualiser les retours d'erreur dans /var/log/auth.log.

Dans le répertoire /etc/pam.d, on crée un fichier appelé "smtp" qui contient les lignes suivantes :
{{{
auth required pam_mysql.so user=xxxxx passwd=xxxx host=127.0.0.1 db="base" table="table" usercolumn="champ" passwdcolumn="champ" crypt=1
account sufficient pam_mysql.so user=xxxxx passwd=xxxx host=127.0.0.1 db="base" table="table" usercolumn="champ" passwdcolumn="champ" crypt=1
Puis j'ai ajouté les lignes suivantes dans `/etc/postfix/main.cf` :
 {{{
smtpd_sender_login_maps = hash:$config_directory/sender_login
smtpd_sender_restrictions = ..., reject_sender_login_mismatch, ...
Ligne 183: Ligne 123:
Si les configurations globales énoncées plus haut ont été respectées, il suffit de relancer les processus :
{{{
# /etc/init.d/postfix restart
# /etc/init.d/saslauthd start
Après cela, l'utilisateur `bgates` ne peut plus utiliser d'autre adresse que `bilou@microsoft.com` faute de quoi son envoi sera simplement rejeté, ce avant même d'être mis dans la queue d'envoi.

== Authentification via LDAP ==

(doc de ProgFou)

Pour une authentification directement via LDAP (déconseillée à cause des soucis avec le logiciel OpenLDAP) :
 {{{# extraits de /etc/default/saslauthd :
START=yes
MECHANISMS="ldap"
}}}
 {{{# fichier /etc/saslauthd.conf à créer :
ldap_servers: ldap://127.0.0.1/
ldap_search_base: o=AuF
ldap_filter: mail=%U@auf.org
ldap_use_sasl: no
ldap_auth_method: bind
Ligne 189: Ligne 142:
Pour l'utlisation des mots de passe encodés en md5, la solution préconisée dans la doc livrée avec "libpam-mysql" repose sur l'ajout du champ "md5" dans les lignes suivantes :
{{{
auth required pam_mysql.so user=xxxxx passwd=xxxx host=127.0.0.1 db="base" table="table" usercolumn="champ" passwdcolumn="champ" crypt=1 md5=1
account sufficient pam_mysql.so user=xxxxx passwd=xxxx host=127.0.0.1 db="base" table="table" usercolumn="champ" passwdcolumn="champ" crypt=1 md5=1
}}}

'''J'ai passé une journée entière a retourner le problème dans tous les sens mais ça ne fonctionne toujours pas !'''
Voir `/usr/share/doc/sasl2-bin/LDAP_SASLAUTHD.gz` pour les options disponibles.

Cette page présente une façon de configurer [:Postfix:] afin d'y activer l'authentification des connexions via SASL.

Prérequis IMPORTANT : chiffrement des communications en TLS

Afin de pouvoir s'authentifier en toute sécurité, il est très fortement conseillé d'activer le [:../Chiffrement:chiffrement TLS] des connexions SMTP. C'est même indispensable pour la configuration présentée ici, car on y utilise le mécanisme PLAIN qui consiste à transmettre le mot de passe en clair lors de l'authentification. Ceci est souvent nécessaire pour les mécanismes sous-jacents, qui doivent recevoir le mot de passe "tel quel" afin de le crypter avec leur propre algorithme.

Installation des outils requis

Il faut installer les modules SASL et les programmes nécessaires (dont le démon d'authentification saslauthd) :

  • # aptitude install libsasl2-modules sasl2-bin

Configuration du démon d'authentification saslauthd

Ce démon sera interrogé par les systèmes qui veulent faire de l'authentification. C'est lui qui saura quel module contacter. La configuration se fait dans /etc/default/saslauthd :

  • {{{ # extrait de /etc/default/saslauthd :

START=yes # le mécanisme à utiliser (PAM est sans doute le plus générique) MECHANISMS="pam" MECH_OPTIONS="" # 5 processus en parallèle, ça suffit : THREADS=5 # Très important pour Postfix : (lire "man saslauthd") # option -m : pour Postfix, qui tourne en chroot # option -r : construit un identifiant prenom.nom@domain OPTIONS="-r -m /var/spool/postfix/var/run/saslauthd" }}}

Il faut ensuite rendre le service d'authentification disponible depuis l'environnement chroot de Postfix :

  • # invoke-rc.d saslauthd start   # start/stop : astuce pour créer le répertoire /var/run/salsauthd
    # invoke-rc.d saslauthd stop
    # mkdir -p /var/spool/postfix/var/run
    # mv /var/run/saslauthd /var/spool/postfix/var/run/
    # ln -s /var/spool/postfix/var/run/saslauthd /var/run/
    # adduser postfix sasl         # ajoute postfix au groupe sasl (faire "id postfix" pour vérifier)
    # invoke-rc.d saslauthd start

Configuration de PAM pour utiliser MySQL

Nous avons dit à saslauthd d'utiliser PAM (Pluggable Authentication Modules). Il faut donc configurer PAM pour lui dire d'aller chercher les informations d'authentification dans MySQL.

On installe le module de PAM qui permet d'interroger une base MySQL :

  • # aptitude install libpam-mysql

Et on configure PAM pour lui dire d'utiliser ce module pour le service smtp (fichier /etc/pam.d/smtp) :

  • {{{# fichier /etc/pam.d/smtp

# attention, c'est sur deux lignes seulement (votre navigateur les coupe certainement) : auth required pam_mysql.so user=messagerie passwd=vousrevez host=127.0.0.1 db=mail table=utilisateurs usercolumn=source passwdcolumn=password crypt=1 account sufficient pam_mysql.so user=messagerie passwd=vousrevez host=127.0.0.1 db=mail table=utilisateurs usercolumn=source passwdcolumn=password crypt=1 }}}

Dans cet exemple, nous avons un serveur MySQL local (127.0.0.1), avec une base mail qui contient une table adresses dans laquelle on trouve les colonnes source (le login, de type prenom.nom@auf.org) et password.

Pour plus d'information, la documentation d'utilisation du module PAM est dans /usr/share/doc/libpam-mysql/README.gz

Configuration de l'authentification SASL de Postfix

On indique le système d'authentification dans /etc/postfix/sasl/smtpd.conf. Dans notre cas, on passe par saslauthd :

  • {{{# dans /etc/postfix/sasl/smtpd.conf :

pwcheck_method: saslauthd mech_list: PLAIN LOGIN ANONYMOUS log_level: 7 }}}

Ensuite on active le tout au niveau de /etc/postfix/main.cf :

  • {{{# activation de l'authentification :

smtpd_sasl_auth_enable = yes

# modifiez votre option smtpd_recipient_restrictions pour y ajouter une permission # au niveau SASL : les clients authentifiés pourront utiliser le serveur pour envoyer # des messages à qui il veulent (pas de restrictions sur les "recipients") : # smtpd_recipient_restrictions = (...), permit_sasl_authenticated, reject_unauth_destination # Sur une configuration classique, cela sera : smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

# IMPORTANT : n'offrir la possibilité de s'authentifier *que* si le canal # est sécurisé via TLS (il faut donc aussi activer TLS) # voir http://wiki.auf.org/wikiteki/Postfix/Chiffrement smtpd_tls_auth_only = yes }}}

Il faut ensuite redémarrer Postfix : # invoke-rc.d postfix restart

Erreurs classiques

  • no SASL authentication mechanisms

    • Vérifiez que les mécanismes d'authentification du client, de postfix (option smtpd_sasl_security_options) et de saslauthd sont compatibles. En particulier vérifiez que vous n'avez pas mis à la fois mech_list: PLAIN et smtpd_sasl_security_options = noplaintext.

  • Sender address rejected: not logged in

    • Vous avez bien mis une ligne pour votre adél dans le fichier sender_login, mais vous avez sans doute oublié d'activer l'authentification SMTP du coté client. Autre cas possible : vous utilisez un filtre de contenu et votre message passe alors deux fois par postfix, la première fois avec authentification et la seconde fois sans (puisque c'est le logiciel de filtrage qui le renvoie). Dans ce cas il faut s'assurer que le fitrage puisse faire son renvoi sans blocage en l'autorisant avant la vérification du login. Par exemple : smtpd_sender_restrictions = permit_mynetworks, reject_sender_login_mismatch, permit.

  • SASL PLAIN authentication failed

    • Si vous ne vous êtes pas trompé de mot de passe, c'est sans doute qu'il y a un problème avec le service d'authentification, par exemple avec saslauthd. Dans ce cas, pensez à vérifier /var/log/auth.log pour avoir des détails sur le problème.

Annexes et historique

Filtrage des envois selon l'adél de l'émetteur

(doc de ProgFou)

Après authentification, Postfix permet également de vérifier la ou les adéls utilisées par l'émetteur (pas obligatoire, mais peut être utile pour stopper les virus-pourriels si vous avez encore des clients Outlook et compagnie).

Par exemple, j'ai créé un fichier /etc/postfix/sender_login contenant :

  • # /etc/postfix/sender_login
    # après chaque modif, lancer : postmap /etc/postfix/sender_login
    bilou@microsoft.com bgates

Puis j'ai ajouté les lignes suivantes dans /etc/postfix/main.cf :

  • smtpd_sender_login_maps = hash:$config_directory/sender_login
    smtpd_sender_restrictions = ..., reject_sender_login_mismatch, ...

Après cela, l'utilisateur bgates ne peut plus utiliser d'autre adresse que bilou@microsoft.com faute de quoi son envoi sera simplement rejeté, ce avant même d'être mis dans la queue d'envoi.

Authentification via LDAP

(doc de ProgFou)

Pour une authentification directement via LDAP (déconseillée à cause des soucis avec le logiciel OpenLDAP) :

  • {{{# extraits de /etc/default/saslauthd :

START=yes MECHANISMS="ldap" }}}

  • {{{# fichier /etc/saslauthd.conf à créer :

ldap_servers: ldap://127.0.0.1/ ldap_search_base: o=AuF ldap_filter: mail=%U@auf.org ldap_use_sasl: no ldap_auth_method: bind }}}

Voir /usr/share/doc/sasl2-bin/LDAP_SASLAUTHD.gz pour les options disponibles.

Postfix/Authentification (dernière édition le 2012-05-03 08:27:00 par TruongTungLam)