我最近按照本指南在 aws ec2 实例上设置了 postfix + dovecot:http: //flurdy.com/docs/postfix/#config-secure-auth
目前我坚持使用 SASL。
SQL 查询似乎不是已配置的内容。以下是配置:
/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
现在配置文件定义select crypt from users where id='%u@%r' and enabled = 1
为密码的选择查询。
当身份验证失败并检查/var/log/secure
时,我发现使用了错误的选择查询:
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。
在上面的配置中,您混合了这两种方法:在
pwcheck_method
您放置 saslauthd 但您将 sasl 配置为auxprop_plugin
与 sql 一起使用。将pwcheck_method
覆盖它,因此参数 auxprop_plugin (以及您的所有sql_*
参数)变得无用。这就解释了为什么你得到错误的查询。相反,SASL 将执行提供的查询/etc/pam.d/smtp
。为了满足您的要求,请where
在 pam 配置中添加其他参数对于您缺少领域 (
%r
) 的问题,请尝试设置smtpd_sasl_local_domain
为您的默认域。