我最近在aws ec2实例上按照这个指南设置了postfix + dovecot: http : //flurdy.com/docs/postfix/#config-secure-auth
目前我坚持SASL。
SQL查询似乎没有被configuration。 这里是configuration:
/etc/postfix/sasl/smtpd.conf
节目
pwcheck_method: saslauthd mech_list: plain login log_level: 7 allow_plaintext: true auxprop_plugin: sql sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: mail sql_passwd: passwd sql_database: maildb sql_select: select crypt from users where id='%u@%r' and enabled = 1
和
/etc/sasl2/smtpd.conf
节目
pwcheck_method: saslauthd mech_list: plain login log_level: 7 allow_plaintext: true auxprop_plugin: sql sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: mail sql_passwd: password sql_database: maildb sql_select: select crypt from users where id='%u@%r' and enabled = 1
和
/etc/pam.d/smtp #%PAM-1.0 auth required pam_mysql.so user=mail passwd=password host=127.0.0.1 db=maildb table=users usercolumn=id passwdcolumn=crypt crypt=1 debug account sufficient pam_mysql.so user=mail passwd=password host=127.0.0.1 db=maildb table=users usercolumn=id passwdcolumn=crypt crypt=1 debug
现在,configuration文件定义了select crypt from users where id='%u@%r' and enabled = 1作为密码的select查询。
当auth失败,我检查/var/log/secure我发现一个错误的select查询被使用:
Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - SELECT crypt FROM users WHERE id = 'admin' Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - SELECT returned no result. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_mysql_check_passwd() returning 1. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_mysql_sql_log() called. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_mysql_sql_log() returning 0. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_sm_authenticate() returning 10. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_mysql_release_ctx() called. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_mysql_destroy_ctx() called. Jun 1 15:50:13 ip-172-31-23-97 saslauthd[19892]: pam_mysql - pam_mysql_close_db() called.
这可能是什么原因?
有两种常见的方法来使用MySQL的Postfix SASL :
不幸的是,第二种方法存在严重的安全缺陷 :您必须以明文格式存储密码。 所以,你的情况你需要使用saslauthd和pam_mysql。
在上面的configuration中,你混合了这两个方法:在pwcheck_method你把saslauthd,但你configurationsasl使用auxprop_plugin与SQL。 pwcheck_method会覆盖这个,所以参数auxprop_plugin(和所有的sql_*参数)变得没用。 这就是为什么你得到错误的查询。 相反,SASL将执行提供/etc/pam.d/smtp查询。 为了满足您的要求,请在pamconfiguration中添加其他参数
... passwdcolumn=crypt crypt=1 debug where=enabled=1 ... passwdcolumn=crypt crypt=1 debug where=enabled=1
而对于你缺less的领域( %r )的问题,尝试将smtpd_sasl_local_domain设置为默认域。