Главная Мой профиль Регистрация Выход Вход
Пятница
1.11.2024
07:28
Приветствую Вас Гость | RSS ВходРегистрацияГлавная
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
sendmail+tls+sasl2
StibiumДата: Понедельник, 26.10.2009, 11:49 | Сообщение # 1
Админ НАХ
Группа: Администраторы
Сообщений: 76
Репутация: 8
Статус: Offline
В настоящее время программа sendmail имеет встроенные средства аутентификации и шифрования. Мы рассмотрим реализацию защиты программы sendmail на основе аутентификации - построенной на базе SASL, и шифрования - построенного на STARTTLS. Начиная с версии 8.11 и выше, реализована система SMTP-аутентификации и SSL (Secure Sockets Layer - протокол защищенных сокетов). Протокол SSL в sendmail сейчас называется TLS (Transport Layer Security - безопасность транспортного уровня) и реализован в виде дополнения STARTTLS к протоколу SMTP. Протокол TLS поддерживает систему аутентификации и шифрования согласно документа RFC 2487. И его (протокол TLS) труднее настроить, так как требуется поддержка со стороны центра сертификации. Система SMTP-аутентификации (определена в документе RFC 2487) основывается на технологии SASL (Simple Authentication and Security Layer - простой протокол аутентификации и защиты), представляющий собой систему совместного использования секретного ключа между двумя узлами. В ней нужно явно задавать пары серверов, осуществляющих взаимную аутентификацию. SASL - это базовый механизм аутентификации, который может быть встроен в ряд других протоколов. Например sendmail, сервер imap компании Cyrus, почтовые программы Outlook, и т.д. В протоколе SASL реализованы две основные концепции: идентификатор авторизации и идентификатор аутентификации. Эти идентификаторы могут быть связаны с правами доступа к файлам, паролям учетных записей, мандатам Kerberos и т.д. Библиотека функций SASL состоит из двух частей: модуля аутентификации и модуля шифрования.

Перечисленный протоколы SASL и TLS можно использовать вместе. Ну а теперь перейдем от краткой теории к практике. Рассмотрим процесс настройки аутентификации и шифрования.

Следует отметить, что статья писалась по памяти не имея под собой "живого сервера", поэтому я не гарантирую полную работоспособность. Это первая, пробная версия данной статьи. Предполагается, что статья будет переработана и дополнена в ближайшем будущем.

Исходные данные:
Имеется предустановленная обычная ОС - FreeBSD;
Имеется программа Sendmail.
1. Настройка STARTTLS
Для настройки TLS необходимо создать SSL сертификат и секретный ключ DSA для шифрования
# mkdir -m 700 /etc/mail/certs
# openssl dsaparam 1024 -out dsa1024.pem
# openssl req -x509 -nodes -days 365 \
? -newkey dsa:dsa1024.pem \
? -out /etc/mail/certs/MYcert.pem \
? -keyout /etc/mail/certs/MYkey.pem
# rm -f dsa1024.pem

Подпишем его самим собой
# openssl req -x509 -new -days 365 \
? -key /etc/mail/certs/MYkey.pem \
? -out /etc/mail/certs/MYcert.pem

Проверим вновь созданный сертификат
# openssl x509 -in /etc/mail/certs/MYcert.pem -text

Для использования TLS-авторизации нужно использовать сертификат подписанный самим собой, или создать symlink как в примере:
# ln -s /etc/mail/certs/MYcert.pem /etc/mail/certs/CAcert.pem

Установим специальные права доступа:
# chmod 600 /etc/mail/certs/*

Теперь следует настроить sendmail. В .mc файле конфигурации нужно добавить следующие строки:
define(`CERT_DIR', `MAIL_SETTINGS_DIR`'certs')dnl
define(`confCACERT_PATH', `CERT_DIR')dnl
define(`confCACERT', `CERT_DIR/CAcert.pem')dnl
define(`confSERVER_CERT', `CERT_DIR/MYcert.pem')dnl
define(`confSERVER_KEY', `CERT_DIR/MYkey.pem')dnl
define(`confCLIENT_CERT', `CERT_DIR/MYcert.pem')dnl
define(`confCLIENT_KEY', `CERT_DIR/MYkey.pem')dnl

Теперь компилируем конфигурационные файлы и перезапустим программу sendmail:
# cd /etc/mail/
# make cf
# make install
# make restart

Для проверки настройки необходимо воспользоваться командой telnet
# telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 m.ru ESMTP Sendmail 8.13.8/8.13.8; Mon, 31 Dec 2007 17:06:50 +0300 (MSK)
EHLO localhost
250-m.ru Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5
250-STARTTLS
250-DELIVERBY
250 HELP
QUIT
221 2.0.0 m.ru closing connection
Connection closed by foreign host.

Обращаем внимание на строчку 250-STARTTLS

2. Настройка SASL
В стандартной комплектации ОС FreeBSD, поддержка SASL отсутствует. Для установки этого дополнения необходимо: Изменяем файл /etc/make.conf. Добавляем в него строчку
SENDMAIL_CF_DIR= /usr/local/share/sendmail/cf
Остановим старый sendmail, и установим новый из портов:
# cd /etc/mail/
# make stop
# cd /usr/ports/mail/sendmail-sasl/
# make install && make clean
# rehash
Вместе с SASL автоматически должны установится порты cyrus-sasl2 и cyrus-sasl2-saslauthd. После это приступаем к рекомендациям, которые были выведены на экран после успешной установки. Если до этого стоял более старый sendmail, устанавливаем файл submit.cf
# cd /etc/mail/
# make submit.cf
Для запуска sendmail будем использовать следующий сценарий:
# mv /usr/local/etc/rc.d/sendmail.sh.sample /usr/local/etc/rc.d/sendmail.sh
# echo sendmail_enable=\"YES\" >> /etc/rc.conf
# echo saslauthd_enable=\"YES\" >> /etc/rc.conf
# touch /usr/local/lib/sasl2/Sendmail.conf
Если мы хотим использовать системную авторизацию, то:
# echo saslauthd_flags=\"-a getpwent\" >> /etc/rc.conf
# echo "pwcheck_method: getpwent" >> /usr/local/lib/sasl2/Sendmail.conf
А если хотим использовать авторизацию через демон saslauthd, то:
# echo saslauthd_flags=\"-a sasldb\" >> /etc/rc.conf
# echo "pwcheck_method: saslauthd" >> /usr/local/lib/sasl2/Sendmail.conf
Для нормального запуска обновленной версии мы должны указать путь к ней (файл /etc/mail/mailer.conf). Это можно сделать либо при помощи команды
# cd /etc/mail/
# make mailer.conf
либо вручную, изменив пути в файле mailer.conf:
sendmail /usr/local/sbin/sendmail
send-mail /usr/local/sbin/sendmail
mailq /usr/local/sbin/sendmail
newaliases /usr/local/sbin/sendmail
hoststat /usr/local/sbin/sendmail
purgestat /usr/local/sbin/sendmail
Отредактируем файл sendmail.mc, добавив в него следующие строчки:
dnl Запрет использования механизмов PLAIN и LOGIN
dnl по незащищенному соединению (без использования TLS)
define(`confAUTH_OPTIONS', `p')dnl
dnl Список механизмов, авторизация по которым разрешает использовать relaying
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5')dnl
dnl Список допустимых механизмов авторизации
define(`confAUTH_MECHANISMS',`DIGEST-MD5 CRAM-MD5')dnl
Отредактируем файл submit.mc:
dnl Указываем, что локально пересылать можно без авторизации
DAEMON_OPTIONS(`Name=NoMTA, Addr=127.0.0.1, M=EA')dnl
Теперь конфигурационные файлы необходимо скомпилировать:
# cd /etc/mail/
# make cf
# make install
На этом установка sendmail окончена. Осталось столько запустить его командой
# /usr/local/etc/rc.d/saslauthd.sh start
# /usr/local/etc/rc.d/sendmail.sh start
sendmail sm-msp-queue
Или
# /usr/local/etc/rc.d/saslauthd.sh start
# cd /etc/mail/
# make start
sendmail sm-msp-queue
Сообщения sendmail sm-msp-queue говорят о том, что все прошло нормально.

3. Тестирование и отладка
Проверим правильность сборки программы sendmail:
# sendmail -d0.1 -bv root | grep SASL
эта команда должна вывести:
NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS PIPELINING SASLv2
Обращаем внимание на строчку - SASLv2, если она присутствует, то все нормально. Для проверки настройки авторизации, необходимо воспользоваться командой telnet
# telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 m.ru ESMTP Sendmail 8.13.8/8.13.8; Mon, 31 Dec 2007 17:10:36 +0300 (MSK)
EHLO localhost
250-m.ru Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-DSN
250-AUTH DIGEST-MD5 CRAM-MD5
250-STARTTLS
250 HELP
QUIT
221 2.0.0 m.ru closing connection
Connection closed by foreign host.
Обращаем внимание на строчку 250-AUTH

Окончательное тестирование
Окончательно протестировать, и более того почувствовать сам процесс авторизации, позволяет "ручной способ" с помощью программы telnet. А самое простое - почтовой программой, попробовав отправить и получить сообщение. Но мы не ищем легких решений, проверяем telnet'ом. Для проверки авторизации LOGIN и PLAIN необходимо добавить данные механизмы в конфигурационные файлы и заново их скомпилировать. Подготовим тестового пользователя:
# pw groupadd test && \
? pw useradd test -c test_User -d /nonexistent -g test -s /usr/sbin/nologin
# passwd test
Changing local password for test
New Password:1234
Retype New Password:1234
И нам потребуется установка утилиты mmencode для конвертирования в base64.
# cd /usr/ports/converters/mmencode
# make install && make clean
Проверка LOGIN авторизации:
# printf "test" | mmencode
dGVzdA==
# printf "1234" | mmencode
a3VrdTEyMw==
# telnet server 25
Trying 192.168.0.1...
Connected to server.
Escape character is '^]'.
220 m.ru ESMTP Sendmail 8.13.8/8.13.8; Mon, 31 Dec 2007 18:16:30 +0300 (MSK)
AUTH LOGIN
334 VXNlcm5hbWU6
dGVzdA== <-сюда нужно ввести конвертированное имя пользователя
334 UGFzc3dvcmQ6
a3VrdTEyMw== <-сюда нужно ввести конвертированный пароль пользователя
235 2.0.0 OK Authenticated
QUIT
221 2.0.0 m.ru closing connection
Connection closed by foreign host.
Если настроенное все правильно, то должны увидеть:
235 2.0.0 OK Authenticated
Проверка PLAIN авторизации:
# printf "test\0test\01234" | mmencode
dGVzdAB0ZXN0AGt1a3UxMjM=
# telnet server 25
Trying 192.168.0.1...
Connected to server.
Escape character is '^]'.
220 m.ru ESMTP Sendmail 8.13.8/8.13.8; Mon, 31 Dec 2007 18:16:30 +0300 (MSK)
AUTH PLAIN dGVzdAB0ZXN0AGt1a3UxMjM=
235 2.0.0 OK Authenticated
QUIT
221 2.0.0 m.ru closing connection
Connection closed by foreign host.
Если настроенное все правильно, то должны увидеть:
235 2.0.0 OK Authenticated
Для изменения уровня отладки, следует выполнить:
# cd /etc/mail
# make stop
запускаем программу sendmail в тестовом режиме
# sendmail -O LogLevel=15 -bd
И смотрим в логии, какие проблемы возникают.
# vi /var/log/maillog


 
  • Страница 1 из 1
  • 1
Поиск:


Copyright MyCorp © 2024
Бесплатный хостинг uCoz