Назад | Перейти на главную страницу

Postfix + SASL использует неправильный запрос для аутентификации

Я недавно установил 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
  • Использование sasl auxprop с плагином sql

К сожалению, у второго метода есть серьезный недостаток безопасности: вы должны сохранить пароль в простой текст формат. Итак, в вашем случае вам нужно использовать 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 в свой домен по умолчанию.