Smtp-авторизация средствами cyrus-sasl-saslauthd. Нюансы

Smtp-авторизация выполняется при помощи saslauthd. Но как правило настройка приводится для одного домена, где обычно передаётся логин без доменной части. Как быть если у нас мультидоменная почтовая система и передавать логин нужно с доменной частью? Покажу на примере FreeBSD. Все пользователи находятся в mysql

Устанавливаем cyrus-sasl2 saslauthd и pam_mysql

portinstall cyrus-sasl2 cyrus-saslauthd pam_mysql

Для cyrus-sasl2 выбираем

[x] AUTHDAEMOND
[x] LOGIN
[x] PLAIN

cyrus-saslauthd оставляем по умолчанию (без галочек)

В rc.conf.local добавляем

saslauthd_enable="YES"
saslauthd_flags="-n 10 -r -a pam"

-r — именно этот ключ отвечает за передачу логина с доменной частью

Настройка pam-mysql

После установки важно пролинковать библиотеку pam_mysql.so в /usr/lib/, потому что saslauthd будет искать её именно там

ln -sf /usr/local/lib/pam_mysql.so /usr/lib/pam_mysql.so

Вносим в /etc/pam.d/smtp следующие строки. Скорее всего файла smtp там нет, тогда создаём

auth required pam_mysql.so user=mailer passwd=*** host=127.0.0.1 db=mail table=users usercolumn=login passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mailer passwd=*** host=127.0.0.1 db=mail table=users usercolumn=login passwdcolumn=password crypt=1

crypt=1 — мы ведь собираемся использовать метод авторизации login/plain, при этом пароли в БД должны быть защифрованы стандартной функцией encrypt mysql’я

Запуск saslauthd

service saslauthd start

Настройка cyrus-sasl

vi  /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: login plain
sql_engine: mysql
sql_user: mailer
sql_passwd: ***
sql_hostnames: 127.0.0.1
sql_database: mail
sql_verbose: true
sql_select: select password from users where login = '%u@%r'

@%r — передача доменной части

Теперь настраиваем свой любимый МТА на работу с cyrus-sasl. При правильной настройке в логах будут записи вида

May 22 11:05:54 mx postfix/smtpd[8065]: 375C018CC3A: client=master.lan[192.168.41.10], sasl_method=LOGIN, sasl_username=user@my.domain

Александр Черных
системный администратор

Статьи по теме