Настройка связки 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 :)
Источник статьи