Главная | Контакты | Настройки СМЕНИТЬ ПАЛИТРУ:

Главная > Программы

Sendmail с SMTP авторизацией

Содержание: Установка и настройка OpenSSL
Установка и настройка cyrus-sasl2
Создание сертификатов для TLS
Настройка Sendmail
Добавление пользователей в базу SASL
Настройка клиентов
Заключение

Статья о том как настроить sendmail в роли клента на релей с SMTP авторизацией.

Необходима связка sendmail+cyrus-sasl, в моем случая sendmail 8.12.9 и cyrus-sasl 1.5.28.

Можно проверить:

# sendmail -d0.1 -bv root | grep SASL

если видим SASL то все нормально, преходим самому sendmail, если нет, то:

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

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

Самый простой способ аутентификации пользователя - по логину и паролю, однако он же и самый небезопасный. Вполне логичным будет шифрование процесса передачи через Интернет пользовательского логина/пароля. Для этого ваш sendmail должен быть собран с поддержкой TLS (Transport Layer Security, в SMTP поддерживается посредством команды 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.

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

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

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

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

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

Используем последние доступные в портах на данный момент версии, в моем случае это cyrus-sasl-2.1.22 и cyrus-sasl-saslauthd-2.1.22. После установки необходимо создать файл конфигурации SASL для Sendmail (/usr/local/lib/sasl2/Sendmail.conf), содержащий следующие строки:

pwcheck_method: saslauthd
srvtab: /etc/srvtab

Не забываем добавить разрешение запуска 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

Создание сертификатов для TLS

Создаем каталог для хранения ключей/сертификатов:
# 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

Настройка 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.

проверка конфигурации 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, то ваш сервер настроен верно.

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

# saslpasswd2 -c newuser
Проверить, какие пользователи добавлены, можно командой:
# sasldblistusers2

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

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

Заключение

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


В ваш senmail.mc фаил добавляем:

FEATURE(`mailertable', `hash -o /etc/mail/mailertable')
FEATURE(`authinfo', `DATABASE_MAP_TYPE /etc/mail/authinfo')
создаем sendmail.cf
  1. m4 sendmail.mc > /etc/mail/sendmail.cf

в mailertable пишем
. esmtp:some.domain.com

где some.domain.com адрес на который будет sendmail отсылать все исходящие сообщения, пересобираем maillertable

  1. makemap hash mailertable.db < mailertable

в /etc/mail/ создаем фаил authinfo, в него добавляем

AuthInfo:some.domain.com "U:username" "P:password" собираем authinfo,

  1. makemap hash authinfo.db < authinfo

перезапускаем sendmail и в качестве проверки отправляем куданить письмо, затем смотрим maillog и если видим запись о том что письмо было успешно доставлено на some.domain.com, то ура все работаеn, если нет то не повезло, все проверяем занова.


Главная > Программы