Я недавно установил postfix + dovecot на экземпляре aws ec2, следуя этому руководству: 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.
Что могло быть причиной этого?
Есть два распространенных метода использования постфиксный SASL с MySQL:
К сожалению, у второго метода есть серьезный недостаток безопасности: вы должны сохранить пароль в простой текст формат. Итак, в вашем случае вам нужно использовать saslauthd и pam_mysql.
В приведенной выше конфигурации вы смешали эти два метода: в pwcheck_method
вы ставите saslauthd, но настраиваете sasl для использования auxprop_plugin
с sql. В pwcheck_method
переопределит это, поэтому параметр auxprop_plugin (и все ваши sql_*
параметры) становятся бесполезными. Это объясняет, почему вы получаете неправильный запрос. Вместо этого SASL выполнит предоставленный запрос /etc/pam.d/smtp
. Чтобы удовлетворить ваше требование, укажите дополнительный параметр where
в конфигурации pam
... passwdcolumn=crypt crypt=1 debug where=enabled=1
... passwdcolumn=crypt crypt=1 debug where=enabled=1
И для вашего пропавшего царства (%r
) проблема, попробуйте установить smtpd_sasl_local_domain
в свой домен по умолчанию.