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

- Системный администратор с 2000 года
- Участник Хабр Q&A и cyberforum
- Кейсы