Установка Sendmail 8.10/8.11 c SASL аутентификацией (sendmail+sasl-auth)


From: Teresa Kalitowska
Sendmail 8.10/8.11 поддерживают SMTP AUTH как это описано в RFC 2554, которая базируется на SASL. Постараюсь выложить тут всё необходимое для реализации этой функции в Sendmail.
Для начала стоит задуматься для чего вам это нужно. Потому как не все е-майловые клиенты в полной мере поддерживают SMTP AUTH. Вот по этому адресу можно посмотреть табличку совместимости для разных клиентов :
http://www.sendmail.org/~ca/email/mel/SASL_ClientRef.html
Сначала нам потребуются библиотеки Cyrus SASL. Берем последние исходники : ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
Пусть это будет версия 1.5.24
   tar -xzf cyrus-sasl-1.5.24.tar.gz
   cd cyrus-sasl-1.5.24/
   ./configure --prefix=/usr
   make
   make install #под правами рута конечно
Теперь гляньте есть ли библиотеки в каталогах /usr/lib и инклуды в /usr/include.
Посмотрите, чтоб файлы принадлежали руту...
Теперь надо сделать конфигурационный файл для Sendmail, который будет использовать SASL каждый раз когда пойдет проводить аутентификацию для Sendmail.
Делаем файл /usr/lib/sasl/Sendmail.conf и пишем во внутрь:
   pwcheck_method: sasldb
Об этом больше описано в cyrus-sasl-1.5.24/doc/sysadmin.html , а нам пока хватит этого. Теперь нужно организовать базу данных для всех ваших юзеров, которые могут отсылать почту. Для этого есть две программы, которые должны были встать в /usr/sbin :
   saslpasswd -a sendmail newuser
   password:<passwdorf for newuser>
Эту процедуру проводим для всех юзеров которые у вас есть. Теперь есть вторая программа sasldblistusers которая вам покажет все введённые записи в базу. В результате вы увидите, что-то в этом духе :
   user: newuser realm: yourhost mech: CRAM-MD5
   user: newuser realm: yourhost mech: DIGEST-MD5
   user: newuser realm: yourhost mech: PLAIN 
Что значит что вы можете делать аутентификацию под юзером newuser тремя методами : CRAM-MD5, DIGEST-MD5, PLAIN. Последний метод очень не надёжен и советую от него воздержаться. Но вот Нетскейп 4.76 другого способа не знает. Теперь перейдем к самому Sendmail. Сначала посмотрим, возможно в вашем дистрибутиве уже скомпилировали поддержку SASL .
   sendmail -d0.1 -bv root | grep SASL 
Если в результате такой команды вы увидите знакомое слово SASL то можете смело переходить к следующему пункту, а если нет - вам придется заново собрать Sendmail. Собираем Sendmail: скачиваем нужную, или последнюю версию с www.sendmail.org.
   tar -xzf senmail-x.xx.xx.tar.gz
   cd sendmail-x.xx.xx/ 
Теперь очень важно: заходим в sendmail-8.xx.x/devtools/Site и делаем там файл site.config.m4 в котором пишем :
   APPENDDEF(`confENVDEF', `-DSASL')
   APPENDDEF(`conf_sendmail_LIBS', `-lsasl')
   APPENDDEF(`confLIBDIRS', `-L/usr/lib/')
   APPENDDEF(`confINCDIRS', `-I/usr/include/')
возвращаемся в каталог sendmail-8.xx.xx/ и запускаем скрипт
   ./Build
   ./Build install 
Теперь проверим что у нас получилось:
   sendmail -d0.1 -bv root | grep SASL 
Если всё работает идем дальше. Сконфигурируем Sendmail : впишем в свой файл sendmail.mc :
   TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN')dnl
   define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN')dnl
   define(`confDEF_AUTH_INFO', `/etc/mail/auth/auth-info')dnl
   FEATURE(`no_default_msa')dnl turn off default entry for MSA
   DAEMON_OPTIONS(`Port=25, Name=MSA, M=E')dnl
Советую выключить из списка PLAIN метод авторизации ! Теперь :
   m4 senmail.mc>sendmail.cf 
Копируем файл туда, где Sendmail берёт конфиг файл :
 cp sendmail.cf /etc/mail/sendmail.cf 
  
Проверяем насколько готов sendmail:
   telnet localhost 25
   Trying 127.0.0.1...
   Connected to localhost
   Escape character is '^]'.
   220 local.sendmail.ORG ESMTP Sendmail 8.10.0/8.10.0; Thu, 9 Sep 1999 10:48:44 -0700 (PDT)
   ehlo localhost
   250-local.sendmail.ORG Hello localhost [127.0.0.1], pleased to meet you
   250-ENHANCEDSTATUSCODES
   250-DSN
   250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN
   250 HELP
   quit
Теперь можете поиграть с вписаниями в заголовках письма информации о аутентификации. В /etc/sendmail.cf поищите:
   #########################
   # Format of headers #
   #########################
   Впишите к примеру такое :
   $.$?{auth_type}(authenticated with ${auth_type} from ${auth_author}$.)
   Тогда в письмах, в заголовках  появится такое :
   (authenticated with CRAM-MD5 from newuser)
В емайл - клиентах не забудьте указать: login : newuser@yourhost password: passwowdfornewuser

(c) by Teresa Kalitowska'2001