Настройка sendmail: различия между версиями
Nordwind (обсуждение | вклад)  | 
				Nordwind (обсуждение | вклад)   | 
				||
| Строка 1: | Строка 1: | ||
| − | Данная статья 100 % копипаст с [http://www.openbsd.ru www.openbsd.ru]  | + | :Данная статья 100 % копипаст с [http://www.openbsd.ru www.openbsd.ru]  | 
<br />  | <br />  | ||
| − | = Настройка TLS и SSL =  | + | == Настройка TLS и SSL ==  | 
Начиная с версии 8.11, sendmail поддерживает защиту ESMTP соединения с помощью расширения STARTTLS (RFC 2487). Для настройки TLS прежде всего нужно создать SSL сертификат и секретный DSA-ключ для шифрования:  | Начиная с версии 8.11, sendmail поддерживает защиту ESMTP соединения с помощью расширения STARTTLS (RFC 2487). Для настройки TLS прежде всего нужно создать SSL сертификат и секретный DSA-ключ для шифрования:  | ||
| Строка 25: | Строка 25: | ||
  # openssl x509 -in /etc/mail/certs/mycert.pem -text  |   # openssl x509 -in /etc/mail/certs/mycert.pem -text  | ||
| − | Если вы не планируете использовать TLS для авторизации (не путать с SMTP авторизацией) или используете сертификат, подписанный самим собой, следует создать symlink:  | + | Если вы не планируете использовать TLS для авторизации (не путать с [[#Настройка SMTP авторизации|SMTP авторизацией]]) или используете сертификат, подписанный самим собой, следует создать symlink:  | 
  # ln -s /etc/mail/certs/mycert.pem /etc/mail/certs/CAcert.pem  |   # ln -s /etc/mail/certs/mycert.pem /etc/mail/certs/CAcert.pem  | ||
| − | В противном случае следует поместить сертификат авторизации в файл   | + | В противном случае следует поместить сертификат авторизации в файл <tt>/etc/mail/certs/CAcert.pem</tt>. Не забудьте установить права, запрещающие чтение/запись файлов сертификатов и ключей простым пользователям:  | 
  # chmod 600 /etc/mail/certs/*  |   # chmod 600 /etc/mail/certs/*  | ||
| Строка 45: | Строка 45: | ||
</pre>  | </pre>  | ||
| − | После добавления вышеуказанных строк в файл конфигурации следует пересобрать его с помощью m4 (см. файл   | + | После добавления вышеуказанных строк в файл конфигурации следует пересобрать его с помощью m4 (см. файл <tt>/usr/share/sendmail/README</tt>) и рестартовать уже запущенный sendmail:  | 
  # kill -HUP `head −1 /var/run/sendmail.pid`  |   # kill -HUP `head −1 /var/run/sendmail.pid`  | ||
| Строка 75: | Строка 75: | ||
[http://www.openbsd.pw/files/www.openbsd.org/cgi-bin/man.cgi@query=starttls&sektion=8 starttls(8)],     | [http://www.openbsd.pw/files/www.openbsd.org/cgi-bin/man.cgi@query=starttls&sektion=8 starttls(8)],     | ||
[http://www.openbsd.pw/files/www.openbsd.org/cgi-bin/man.cgi@query=ssl&sektion=8 ssl(8)],     | [http://www.openbsd.pw/files/www.openbsd.org/cgi-bin/man.cgi@query=ssl&sektion=8 ssl(8)],     | ||
| − | [http://www.sendmail.org/~ca/email/starttls.html http://www.sendmail.org/~ca/email/starttls.html],   | + | [http://www.sendmail.org/~ca/email/starttls.html http://www.sendmail.org/~ca/email/starttls.html], <tt>/usr/share/sendmail/README</tt>.  | 
| − | |||
Для того чтобы научить sendmail работать по SSL (без использования STARTTLS), нужно создать и добавить в .mc файл сертификат и ключ для шифрования, как описано выше, а также добавить следующие строки:  | Для того чтобы научить sendmail работать по SSL (без использования STARTTLS), нужно создать и добавить в .mc файл сертификат и ключ для шифрования, как описано выше, а также добавить следующие строки:  | ||
| Строка 118: | Строка 117: | ||
</pre>  | </pre>  | ||
| − | = Настройка SMTP авторизации =  | + | == Настройка SMTP авторизации ==  | 
Для настройки авторизации следует пересобрать sendmail с поддержкой SASL. Для этого следует установить пакет ''cyrus-sasl2'' или порт ''security/cyrus-sasl2''. Для включения поддержки SASL нам потребуется перекомпилировать sendmail следующим образом:  | Для настройки авторизации следует пересобрать sendmail с поддержкой SASL. Для этого следует установить пакет ''cyrus-sasl2'' или порт ''security/cyrus-sasl2''. Для включения поддержки SASL нам потребуется перекомпилировать sendmail следующим образом:  | ||
| Строка 134: | Строка 133: | ||
Также можно воспользоваться набором site.tar.gz и пересобрать sendmail, установив настройку SENDMAIL_SASL=Yes в mk.conf.  | Также можно воспользоваться набором site.tar.gz и пересобрать sendmail, установив настройку SENDMAIL_SASL=Yes в mk.conf.  | ||
| − | Далее следует создать файл конфигурации SASL для sendmail (/usr/local/lib/sasl2/Sendmail.conf):  | + | Далее следует создать файл конфигурации SASL для sendmail (<tt>/usr/local/lib/sasl2/Sendmail.conf</tt>):  | 
  pwcheck_method: saslauthd  |   pwcheck_method: saslauthd  | ||
| − | Добавляем в /etc/rc.local строки для запуска saslauthd:  | + | Добавляем в <tt>/etc/rc.local</tt> строки для запуска saslauthd:  | 
<pre>  | <pre>  | ||
| Строка 200: | Строка 199: | ||
  # openssl s_client -starttls smtp -connect localhost: smtp  |   # openssl s_client -starttls smtp -connect localhost: smtp  | ||
| − | Смотрите также   | + | Смотрите также <tt>/usr/share/sendmail/README</tt>, [[#Настройка TLS и SSL|Настройка TLS и SSL]].  | 
| − | = Настройка sendmail как SMTP клиента с авторизацией =  | + | == Настройка sendmail как SMTP клиента с авторизацией ==  | 
В случае, когда sendmail выступает в роли клиента, демон saslauthd не требуется. В файл конфигурации необходимо внести следующие изменения:  | В случае, когда sendmail выступает в роли клиента, демон saslauthd не требуется. В файл конфигурации необходимо внести следующие изменения:  | ||
| Строка 213: | Строка 212: | ||
</pre>  | </pre>  | ||
| − | Указываем SMTP-сервер, имя и пароль пользователя, а также метод аутентификации в отдельном файле   | + | Указываем SMTP-сервер, имя и пароль пользователя, а также метод аутентификации в отдельном файле <tt>/etc/mail/authinfo</tt>:  | 
  AuthInfo: smtp.domain.ru «U:username@domain.ru» «P:mypassword» «M:CRAM-MD5»  |   AuthInfo: smtp.domain.ru «U:username@domain.ru» «P:mypassword» «M:CRAM-MD5»  | ||
| Строка 222: | Строка 221: | ||
| − | = Как заставить sendmail использовать /etc/hosts =  | + | == Как заставить sendmail использовать /etc/hosts ==  | 
| − | По умолчанию sendmail использует в первую очередь DNS. Чтобы заставить его сначала смотреть   | + | По умолчанию sendmail использует в первую очередь DNS. Чтобы заставить его сначала смотреть <tt>/etc/hosts</tt>, нужно создать файл <tt>/etc/mail/service.switch</tt> и прописать в нем следующую строку:  | 
  hosts files dns  |   hosts files dns  | ||
| Строка 233: | Строка 232: | ||
| − | = Хранение писем в Maildir =  | + | == Хранение писем в Maildir ==  | 
| − | По умолчанию sendmail использует mail.local в качестве локального агента доставки почты. При этом почта доставляется в формате стандартного BSD mailbox. Чтобы доставлять почту в Maildir, нам потребуется установить альтернативный агент доставки   | + | По умолчанию sendmail использует mail.local в качестве локального агента доставки почты. При этом почта доставляется в формате стандартного BSD mailbox. Чтобы доставлять почту в Maildir, нам потребуется установить альтернативный агент доставки mail.buhal, который можно скачать [http://www.openbsd.pw/files/pdp-11.org.ru/~form/openbsd/default.htm отсюда].  | 
Сначала нужно собрать и установить mail.buhal:  | Сначала нужно собрать и установить mail.buhal:  | ||
| Строка 250: | Строка 249: | ||
Теперь достаточно перекомпилировать файл конфигурации и перезапустить sendmail.  | Теперь достаточно перекомпилировать файл конфигурации и перезапустить sendmail.  | ||
| − | В портах OpenBSD, в категории mail, есть программы ''procmail'' и ''maildrop'', которые также поддерживают формат Maildir и дополнительные расширения данного формата.  | + | В портах OpenBSD, в категории mail, есть программы  ''procmail'' и ''maildrop'', которые также поддерживают формат Maildir и дополнительные расширения данного формата.  | 
| − | = Использование procmail в качестве LDA =  | + | == Использование procmail в качестве LDA ==  | 
После установки procmail из портов или пакетов, необходимо создать глобальный конфигурационный файл. Пример конфигурации:  | После установки procmail из портов или пакетов, необходимо создать глобальный конфигурационный файл. Пример конфигурации:  | ||
Версия 07:35, 2 июня 2013
- Данная статья 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.