Настройка sendmail

Материал из OpenBSD-Wiki
Перейти к навигации Перейти к поиску
Данная статья 100 % копипаст с www.openbsd.ru


Настройка TLS и SSL

Начиная с версии 8.11, sendmail поддерживает защиту ESMTP соединения с помощью расширения STARTTLS (RFC 2487). Для настройки 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

Параметр -days позволяет указать количество дней, в течение которых сертификат будет действительным. Чтобы проверить созданный сертификат, можно воспользоваться следующей командой:

# openssl x509 -in /etc/mail/certs/mycert.pem -text

Если вы не планируете использовать TLS для авторизации (не путать с SMTP авторизацией) или используете сертификат, подписанный самим собой, следует создать symlink:

# ln -s /etc/mail/certs/mycert.pem /etc/mail/certs/CAcert.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

После добавления вышеуказанных строк в файл конфигурации следует пересобрать его с помощью m4 (см. файл /usr/share/sendmail/README) и рестартовать уже запущенный sendmail:

# kill -HUP `head −1 /var/run/sendmail.pid`

Для проверки настроек TLS можно воспользоваться командой telnet:

# telnet localhost smtp
Trying 127.0.0.1…
Connected to localhost.
Escape character is '^]'.
220 form.home.lan ESMTP Sendmail 8.13.1/8.13.1; Wed, 17 Nov 2004 13:42:08 +0600
(NOVT)
EHLO localhost
250-form.home.lan Hello root@localhost.home.lan [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP

При правильной настройке в ответе сервера на команду «EHLO» должна присутствовать строка «250-STARTTLS». Смотрите также по данной теме starttls(8), ssl(8), http://www.sendmail.org/~ca/email/starttls.html, /usr/share/sendmail/README.

Для того чтобы научить sendmail работать по SSL (без использования STARTTLS), нужно создать и добавить в .mc файл сертификат и ключ для шифрования, как описано выше, а также добавить следующие строки:

DAEMON_OPTIONS(`Name=MTA')dnl
DAEMON_OPTIONS(`Port=465, Name=MTA-SSL, M=s')dnl

Не забудьте перезапустить sendmail:

# kill -HUP `head −1 /var/run/sendmail.pid`

Для проверки можно воспользоваться командой openssl:

# openssl s_client -connect localhost:465
CONNECTED(00000004)

[…]

---
SSL handshake has read 1409 bytes and written 288 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-DSS-AES256-SHA
Server public key is 1024 bit
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-DSS-AES256-SHA
    Session-ID:
28CAD859854BC30F61B0013DF835E69CDB0037D82FD741F9C7A56DD1E25B655
    Session-ID-ctx:
    Master-Key:
F5BA53F5C0659E3E12D1057FE8D4AEA8177A868169B35949793ABECED7870A29FF4B3AFB9D479EA86618185D5192B837
    Key-Arg   : None
    Start Time: 1119252698
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
220 cvs.openbsd.ru ESMTP Sendmail 8.12.11/8.12.11; Mon, 20 Jun 2005 11:37:06 +0400 (MSD)

Настройка SMTP авторизации

Для настройки авторизации следует пересобрать sendmail с поддержкой SASL. Для этого следует установить пакет cyrus-sasl2 или порт security/cyrus-sasl2. Для включения поддержки SASL нам потребуется перекомпилировать sendmail следующим образом:

# echo WANT_SMTPAUTH=yes >> /etc/mk.conf
# cd /usr/src/gnu/usr.sbin/sendmail
# make cleandir
# make obj
# make depend
# make
# make install

Также можно воспользоваться набором site.tar.gz и пересобрать sendmail, установив настройку SENDMAIL_SASL=Yes в mk.conf.

Далее следует создать файл конфигурации SASL для sendmail ( /usr/local/lib/sasl2/Sendmail.conf):

pwcheck_method: saslauthd

Добавляем в /etc/rc.local строки для запуска saslauthd:

if [ -x /usr/local/sbin/saslauthd ]; then
 echo -n ' saslauthd'; /usr/local/sbin/saslauthd -a getpwent
fi

Теперь остается только включить поддержку авторизации в .mc файле конфигурации sendmail:

dnl
dnl Эту опцию следует включить, чтобы запретить авторизацию с помощью
dnl механизмов PLAIN и LOGIN по незащищенному соединению
dnl (без использования TLS).
dnl
define(`confAUTH_OPTIONS', `p')dnl
dnl
dnl Список допустимых механизмов авторизации. Для всех механизмов,
dnl кроме PLAIN и LOGIN, невозможна авторизация по системному файлу
dnl паролей. Для них следует использовать sasldb или другие способы
dnl авторизации (см. документацию sasl2).
dnl
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl
dnl
dnl Список механизмов, авторизация по которым разрешает использовать
dnl сервер для пересылки почты (relaying).
dnl
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl

Не забудьте перезапустить sendmail:

# kill -HUP `head −1 /var/run/sendmail.pid`

Для проверки настройки авторизации можно воспользоваться командой telnet:

# telnet localhost smtp
Trying 127.0.0.1…
Connected to localhost.
Escape character is '^]'.
220 form.home.lan ESMTP Sendmail 8.13.1/8.13.1; Wed, 17 Nov 2004 13:42:08 +0600
(NOVT)
EHLO localhost
250-form.home.lan Hello root@localhost.home.lan [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

При правильной настройке в ответе сервера на команду «EHLO» должна присутствовать строка «250-AUTH». В случае если в файле конфигурации запрещено использование PLAIN авторизации по незащищенному соединению, вместо команды telnet следует использовать команду openssl:

# openssl s_client -starttls smtp -connect localhost: smtp

Смотрите также /usr/share/sendmail/README, Настройка TLS и SSL.

Настройка sendmail как SMTP клиента с авторизацией

В случае, когда sendmail выступает в роли клиента, демон saslauthd не требуется. В файл конфигурации необходимо внести следующие изменения:

define(`SMART_HOST', `smtp: smtp.domain.ru')dnl
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl
FEATURE(`authinfo', `hash /etc/mail/authinfo')dnl

Указываем SMTP-сервер, имя и пароль пользователя, а также метод аутентификации в отдельном файле /etc/mail/authinfo:

AuthInfo: smtp.domain.ru «U:username@domain.ru» «P:mypassword» «M:CRAM-MD5»

Создаем хэшированную базу данных /etc/mail/authinfo.db:

# makemap hash /etc/mail/authinfo < /etc/mail/authinfo

Как заставить sendmail использовать /etc/hosts

По умолчанию sendmail использует в первую очередь DNS. Чтобы заставить его сначала смотреть /etc/hosts, нужно создать файл /etc/mail/service.switch и прописать в нем следующую строку:

hosts files dns

После этого достаточно перезапустить sendmail:

# kill -HUP `head −1 /var/run/sendmail.pid`


Хранение писем в Maildir

По умолчанию sendmail использует mail.local в качестве локального агента доставки почты. При этом почта доставляется в формате стандартного BSD mailbox. Чтобы доставлять почту в Maildir, нам потребуется установить альтернативный агент доставки mail.buhal, который можно скачать отсюда.

Сначала нужно собрать и установить mail.buhal:

# make depend && make && make install

Далее следует указать mail.buhal в файле конфигурации sendmail в качестве локального агента доставки:

define(`LOCAL_MAILER_PATH', `/usr/libexec/mail.buhal')dnl
MODIFY_MAILER_FLAGS(`LOCAL', `-m')dnl

Теперь достаточно перекомпилировать файл конфигурации и перезапустить sendmail.

В портах OpenBSD, в категории mail, есть программы procmail и maildrop, которые также поддерживают формат Maildir и дополнительные расширения данного формата.

Использование procmail в качестве LDA

После установки procmail из портов или пакетов, необходимо создать глобальный конфигурационный файл. Пример конфигурации:

# Секция общих настроек.
# 
DROPPRIVS=yes
COMSAT=no
VERBOSE=off
SHELL=/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
LOCKFILE=$HOME/.lockmail
LOGFILE=$HOME/procmail.log

# Складываем почту в формате Maildir.
# 
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR

# Входящую корреспонденцию можно резервировать в файлы формата mbox.
# 
#: 0 c
# /var/mail/$LOGNAME

# Либо передавать в хранилище на другом хосте.
# 
#: 0 c
# ! mail@mx2.domain.ru

Далее необходимо изменить локальный агент доставки (LDA) с mail.local на procmail:

FEATURE(local_procmail)dnl
MAILER(local)dnl
MAILER(smtp)dnl

Теперь достаточно перекомпилировать файл конфигурации и перезапустить sendmail.