Настройка связки Sendmail+SASL с использованием TLS/SSL (sendmail auth sasl ssl tls)

 
В связи с распространением мобильных устройств у сотрудников больших и
малых офисов, становится актуальной отправка почты из любой точки, где
есть подключение к Интернет. Кроме того, корпоративные стандарты и
здравый смысл подсказывают, что лучше всего это делать через
служебный/корпоративный SMTP сервер.

По-понятным причинам для реализации этого необходимо аутентифицировать
пользователя. Помогает в этом технология SASL (Simple Authentication and
Security Layer).

Самый простой способ аутентификации пользователя - по логину и паролю,
однако он же и самый небезопасный. Вполне логичным будет шифрование
процесса передачи через Интернет пользовательского логина/пароля. Для
этого ваш sendmail Должен быть собран с поддержкой TLS (команда
STARTTLS). Данная опция включена с Sendmail начиная с версии 8.11.

Я постараюсь детально и пошагово описать процесс настройки связки
Sendmail+Cyrus-SASL для аутентификации удаленных пользователей с
использованием сертификатов X.509.

В статье описывается процесс настройки Sendmail 8.13.6. В качестве SASL
модуля используется cyrus-sasl-2.1.22 + cyrus-sasl-saslauthd-2.1.22.
Кроме того используется OpenSSL 0.9.7e-p1. Все это работает под
управлением FreeBSD 6.1-RELEASE-p2.

Оговорюсь, что вся информация приведенная в этой статье общедоступна в
Интернет, найти ее не представляет особого труда. Моя задача стояла в
систематизации и группировке найденных советов и мануалов по отдельным
пунктам задачи.

Все ПО не входящее в стандартный комплект системы устанавливалось из
коллекции портов.

1. Установка и настройка OpenSSL

 После установки (я использовал системый OpenSSL), необходимо
 отредактировать файл конфигурации (openssl.cnf), чтобы при
 необходимости изменить каталоги в которых будут располагаться ключи,
 сертификаты и прочее во время настройки, а также имена ответственных
 лиц, наименование организации и пр. Как правило, конфиг располагается в
 каталоге /etc/ssl/.

2. Установка и настройка cyrus-sasl2

 Используем последние доступные в портах на данный момент версии
 cyrus-sasl-2.1.22 и cyrus-sasl-saslauthd-2.1.22. После установки
 необходимо создать файл конфигурации SASL для Sendmail:

        # echo "pwcheck_method: saslauthd" > /usr/local/lib/sasl2/Sendmail.conf
        # echo srvtab: /etc/srvtab >> /usr/local/lib/sasl2/Sendmail.conf


Не забываем добавить разрешение запуска SASL в /etc/rc.conf

        saslauthd_enable="YES"
        sasl_saslauthd_flags="-a sasldb"
        cyrus_pwcheck_enable="YES"


Запускаем cyrus-sasl2:

        # sh /usr/local/etc/rc.d/saslauthd.sh start


Проверяем запустился ли он:

        # ps ax | grep sasl
        67358  ??  Is     0:00.01 /usr/local/sbin/saslauthd -a sasldb
        67359  ??  I      0:00.01 /usr/local/sbin/saslauthd -a sasldb
        67360  ??  I      0:00.01 /usr/local/sbin/saslauthd -a sasldb
        67361  ??  I      0:00.01 /usr/local/sbin/saslauthd -a sasldb
        67362  ??  I      0:00.01 /usr/local/sbin/saslauthd -a sasldb


3. Создание сертификатов для TLS (Transport Layer Security).

Создаем каталог для хранения ключей/сетификатов

        # mkdir -p /etc/mail/certs


Далее переходим в него и создаем ключи и сетификат

        # cd /etc/mail/certs
        # openssl req -new -x509 -keyout cakey.pem -out cacert.pem -days 365
        # openssl req -nodes -new -x509 -keyout sendmail.pem -out sendmail.pem -days 365


Проверяем результат

        # openssl x509 -noout -text -in sendmail.pem


Назначаем права на файл с сертификатом и ключем

        # chmod 600 ./sendmail.pem


4. Настройка Sendmail

Редактируем файл /etc/make.conf для включения поддержки SASL в Sendmail,
для этого добавляем в него строки:

        SENDMAIL_CFLAGS=        -I/usr/local/include -DSASL=2
        SENDMAIL_LDFLAGS=       -L/usr/local/lib
        SENDMAIL_LDADD=         -lsasl2 -lcrypto


После этого пересобираем Sendmail:

        # cd /usr/src/lib/libsm
        # make clean && make obj && make depend && make
        # cd /usr/src/lib/libsmutil
        # make clean && make obj && make depend && make
        # cd /usr/src/usr.sbin/sendmail
        # make clean && make obj && make depend && make && make install


Далее редактируем файл freebsd.mc обычно находящийся в директории
/etc/mail/ добавляя туда:

        define(`confCACERT_PATH', `/etc/mail/certs')dnl
        define(`confCACERT', `/etc/mail/certs/cacert.pem')dnl
        define(`confSERVER_CERT', `/etc/mail/certs/sendmail.pem')dnl
        define(`confSERVER_KEY', `/etc/mail/certs/sendmail.pem')dnl
        define(`confCLIENT_CERT', `/etc/mail/certs/sendmail.pem')dnl
        define(`confCLIENT_KEY', `/etc/mail/certs/sendmail.pem')dnl
        DAEMON_OPTIONS(`Family=inet, Port=465, Name=MTA-SSL, M=s')dnl

        TRUST_AUTH_MECH(`LOGIN')dnl
        define(`confAUTH_MECHANISMS', `LOGIN')dnl


и генерим конфигурационный файл Sendmail:

        # cd /etc/mail
        # make install


после этого необходимо перестартовать Sendmail

7. Проверка конфигурации Sendmail и его работоспособности

Ни когда не лишним будет проверить результаты настроек дабы исключить
ошибки. Проверяем с какими опциями был скомпилирован Sendmail:

        # /usr/sbin/sendmail -d0.1 -bv root


Если видим что-то похожее на: 

        Version 8.13.6
         Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
                NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS PIPELINING SASLv2
                SCANF STARTTLS TCPWRAPPERS USERDB XDEBUG


значит поддержка SASL и TLS включена в наш Sendmail.

Далее, при помощи telnet зайдем на сервер и проверим какие механизмы
аутентификации он поддерживает и стартовала ли поддержка TLS (правильно
ли мы сгенерили и подключили сертификаты).

        # telnet localhost 25
        Trying ::1...
        Trying 127.0.0.1...
        Connected to localhost.
        Escape character is '^]'.
        220 office.host.com.ua ESMTP Sendmail 8.13.6/8.13.6; Tue, 1 Aug 2006 10:52:09 +0300 (EEST)
        ehlo localhost
        250-office.host.com.ua Hello localhost [127.0.0.1], pleased to meet you
        250-ENHANCEDSTATUSCODES
        250-PIPELINING
        250-8BITMIME
        250-SIZE
        250-DSN
        250-ETRN
        250-AUTH LOGIN
        250-STARTTLS
        250-DELIVERBY
        250 HELP
        quit
        221 2.0.0 office.host.com.ua closing connection
        Connection closed by foreign host.


Если вы увидели строки содержащие AUTH LOGIN и STARTTLS, то ваш сервер
настроен верно.

9. Добавдение пользователей в базу SASL

        # saslpasswd2 -c newuser


Проверить какие пользователи добавлены можно командой:

        # sasldblistusers2


10. Настройка клиентов

Клиентские почтовые программы настраиваются в соответствии с инструкцией
на конкретный почтовый клиент. Для этого необходимо знать логин/пароль (см. п. 9)


Заключение.

Вся информация собранная в этом руководстве найдена в Интернет, на
сайтах производителей ПО, персональных страничках и получена в качестве
консультаций в специализированных рассылках (в частности благодарю колег
из рассылки UAFUG (http://uafug.org.ua).

Очень рекомендую обратиться к первоисточникам для прояснения ньюансов и
деталей:

  http://www.sendmail.org/~ca/email/cyrus2/index.html
  http://cyrusimap.web.cmu.edu/
  http://www.openssl.org/

Ну и конечно же, во многом помог Google :)

Источник статьи