SASL pour Postfix

SASL est un daemon qui permet l’authentification smtp avec Postfix.
L’idée c’est : Postfix => SASL => PAM => MySQL

apt-get install sasl2-bin libsasl2-2 libsasl2-modules libsasl2-modules-sql libpam-mysql

on ajoute dans main.cf

nano  /etc/postfix/main.cf 

# Support Authentification SASL
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd
smtpd_sasl_local_domain = $myhostname
smtpd_tls_auth_only = no
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions =
	permit_mynetworks,
	permit_sasl_authenticated,
	reject_unauth_destination,
	reject_unauth_pipelining,
	reject_non_fqdn_hostname,
	reject_non_fqdn_sender,
	reject_non_fqdn_recipient,
	reject_invalid_hostname,
	reject_rbl_client list.dsbl.org,
	reject_rbl_client bl.spamcop.net,
	reject_rbl_client sbl-xbl.spamhaus.org

On rajoute ceci dans le fichier /etc/postfix/sasl/smtpd.conf, histoire que Postfix puisse communiquer avec SASL

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
log_level: 5

allow_plaintext: true
password_format: crypt

auxprop_plugin: mysql
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: postfix
sql_passwd: votre_mot_de_passe
sql_database: postfix
sql_select: SELECT password FROM mailbox WHERE username = '%u'

On modifie le fichier /etc/default/saslauthd pour que SASL communique avec PAM :

START=yes
MECHANISMS="pam"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

On supprime le répertoire /var/run/saslauthd et on crée un lien symbolique entre /var/spool/postfix/var/run/saslauthd et /var/run/saslauthd

rmdir /var/run/saslauthd/
ln -s /var/spool/postfix/var/run/saslauthd/ /var/run/

Il faut ensuite créer le fichier /etc/pam.d/smtp et mettre ceci dedans pour que PAM communique avec MySQL :

auth	required	pam_mysql.so host=127.0.0.1 user=postfix passwd=votre_mot_de_passe db=postfix table=mailbox usercolumn=name passwdcolumn=password crypt=1
account	sufficient	pam_mysql.so host=127.0.0.1 user=postfix passwd=votre_mot_de_passe db=postfix table=mailbox usercolumn=name passwdcolumn=password crypt=1

On rajoute l’utilisateur postfix au groupe sasl :

adduser postfix sasl

Enfin, on modifie le script de démarrage de Postfix pour qu’il tienne compte du fichier /etc/postfix/sasl/smtpd.conf :

nano /etc/init.d/postfix
FILES="etc/localtime etc/services etc/resolv.conf etc/hosts \
etc/nsswitch.conf etc/nss_mdns.config etc/postfix/sasl/smtpd.conf"

et on relance les services saslauthd et postfix

service saslauthd restart
service postfix restart

pour tester la connexion:

testsaslauthd -u fred@domaine.tld

9 Comments

  1. Hey ! Merci, super tuto !
    Juste le dernier passage « Enfin, on modifie le script de démarage de Postfix pour qu’il tienne compte du fichier  » il est ou ce script de démarrage ? Tu pourrais juste me donner le chemin du fichier car impossible de le trouver…

  2. je me suis replonger sur le tuto, en faite il faut juste relancer les services postfix et saslauthd

  3. Ha dac :-/
    Suivi 4 fois a la lettre et même sur un systéme neuf, mais saslauthd refuse de demarrer

  4. t’as jeté un oeil dans /var/log/syslog? lorsque tu relances
    saslauthd

  5. salut je viens d’installer mandriva et je constate qu’il ne plante 5 secondes et puis la souris n’est pas rapide.
    je voudrais savoir si je dois installer des paquets pour les regler ou si je dois configuer dans le desktop.
    merci et a plus.
    toshiba L300 2go ram et 320 Hdd.

  6. Page en favoris, juste parfait ;)
    1 semaine que je coinçais pour réussir à configurer ça, il me manquait juste la partie auth (la plus importante quand même :p)

    Marche du 1er coup avec ton tuto, un grand merci à toi !

  7. Bonjour,

    J’aurais voulu faire une authentification SASL sur notre systeme de messagerie,
    Le probleme ce que: J’ai deux tables mail_user et domain
    ci-desous les descriprtion:

    mail_users:
    Field | Type | Null | Key | Default | Extra |
    +——————-+——————+——+—–+———+—————-+
    | mail_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
    | mail_acc | varchar(200) | YES | | NULL | |
    | mail_pass | varchar(150) | YES | | NULL | |
    | mail_crypt | varchar(150) | YES | | NULL | |
    | mail_forward | text | YES | | NULL | |
    | domain_id | int(10) unsigned | YES | | NULL | |
    | mail_type | varchar(20) | YES | | NULL | |
    | sub_id | int(10) unsigned | YES | | NULL | |
    | status | varchar(255) | YES | | NULL | |
    | mail_auto_respond | text | YES | | NULL | |
    | mail_host | varchar(128) | YES | | NULL

    domain:

    | Field | Type | Null | Key | Default | Extra |
    +———————-+——————+——+—–+———+—————-+
    | domain_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
    | domain_name | varchar(200) | YES | | NULL | |
    | domain_gid | int(10) unsigned | NO | | 0 | |
    | domain_uid | int(10) unsigned | NO | | 0 | |
    | domain_admin_id | int(10) unsigned | NO | | 0 | |
    | domain_created_id | int(10) unsigned | NO | | 0 | |
    | domain_created | int(10) unsigned | NO | | 0 | |
    | domain_last_modified | int(10) unsigned | NO | | 0 | |
    | domain_mailacc_limit | int(11) | YES | | NULL | |
    | domain_ftpacc_limit | int(11) | YES | | NULL | |
    | domain_traffic_limit | int(11) | YES | | NULL | |
    | domain_sqld_limit | int(11) | YES | | NULL | |
    | domain_sqlu_limit | int(11) | YES | | NULL | |
    | domain_status | varchar(255) | YES | | NULL | |
    | domain_alias_limit | int(11) | YES | | NULL | |
    | domain_subd_limit | int(11) | YES | | NULL | |
    | domain_ip_id | int(10) unsigned | YES | | NULL | |
    | domain_disk_limit | int(30) unsigned | YES | | NULL | |
    | domain_disk_usage | int(30) unsigned | YES | | NULL | |
    | domain_php | varchar(15) | YES | | NULL | |
    | domain_cgi | varchar(15) | YES | | NULL |

    le nom de l’utilisateur se trouve dans mail_acc
    et le nom du domain
    domain_name

    donc mon soucie se trouve dans le fichier
    /etc/pam.d/smtp
    car
    auth required pam_mysql.so host=127.0.0.1 user=postfix passwd=votre_mot_de_passe db=postfix table=mailbox
    usercolumn=name passwdcolumn=password crypt=1
    account sufficient pam_mysql.so host=127.0.0.1 user=postfix passwd=votre_mot_de_passe db=postfix table=mailbox
    usercolumn=name passwdcolumn=password crypt=1

    car le nom de l’utilisateur et le domaine est separe mais pas comme votre base
    donc je voulais obtenir comme
    usercolumn=name le mail_acc@domain_name qui se trouve dans les deux tables,
    Est-ce qu’il serait possible de faire une requete complexe SQL pour joindre ces deux chaine dans ce fichier pour avoir
    usercolumn=name car mon tables mailbox est different de la votre.

    Pourriez vous m’aider s’il vous plait????

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.