
Настройка sendmail
Начиная с версии 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.