Smtp авторизация с postfix
На постовом сервере потребовалась smtp авторизация. Для начала необходимо дополнительно установить из портов cyrus-sasl2, saslauthd и pam_mysql. При помощи двух последних защифрованая пара логин/пароль будет передаваться в базу данных mysql, где хранятся почтовые акааунты пользователей зашифрованные функцией encrypt
Основная задача — сделать защищенную передачу пароля от пользователя к БД
Ставим модуль:
Линкуем на /usr/lib, потому что система система ищет pam-модули именно там:
В /etc/pam.d создаём файл smtp со следующим содержимым:
auth required pam_mysql.so user=mailer passwd=pwd host=127.0.0.1 db=mail table=users usercolumn=login passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mailer passwd=pwd host=127.0.0.1 db=mail table=users usercolumn=login passwdcolumn=password crypt=1
crypt=1 — именно этот параметр отвечает за щифрование
cyrus-sasl2 собираем без поддержки mysql и с поддержкой механизмов авторизации login/plain. Устанавливаем cyrus-sasl2-saslauthd
В /etc/rc.conf.local пишем:
Ключ -r полезен тем, у кого мульти-доменный почтовый сервер и в логине должна передаваться доменная часть почтового адреса
в /usr/local/lib/sasl2 создаём файл smtpd.conf, в который пишем следующее:
pwcheck_method: saslauthd
mech_list: login plain
sql_engine: mysql
sql_user: mailer
sql_passwd: pwd
sql_hostnames: localhost
sql_database: mail
sql_verbose: true
sql_select: select password from users where login = '%u@%r'
К рассмотрению принимаются два механизма авторизации login — пара логин/пароль передаётся в две строки, и plain — пара логин/пароль передаётся одной строкой. Все они шифруются base64
%u@%r — формат передачи в БД, пользователь@доменнаячасть
Запуск:
В main.cf postfix’а нужно добавить параметры:
smtp_sasl_security_options = noanonymous
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = mysql:/usr/local/etc/postfix/sql/users.cf
smtp_sasl_security_options = noplaintext, noanonymous
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous
smtpd_sasl_exceptions_networks = 192.168.4.40, 192.168.4.195
broken_sasl_auth_clients = yes
Перегрузка postfix и проверка. Для проверки механизма plain сначала сгенерируем пару логин/пароль средствами перла
Пользователь test экранируется нулем, пароль экранируется тремя нулями.
В результатте получаем:
Соединяемся:
> *250-mymailserver*
> *250-PIPELINING*
> *250-SIZE 50000000*
> *250-ETRN*
> *250-STARTTLS*
> *250-AUTH LOGIN PLAIN*
> *250-AUTH=LOGIN PLAIN*
> *250-ENHANCEDSTATUSCODES*
> *250-8BITMIME*
> *250 DSN*
Работает. Можно настраивать почтовый клиент.
Еще всё это дело можно закрепить шифрованием канала между клиентом и сервером по SSL/TLS.
Если что-то не заработало — смотрим maillog и messages.