Настройка sendmail: различия между версиями

Материал из OpenBSD-Wiki
Перейти к навигации Перейти к поиску
Строка 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
  
В противном случае следует поместить сертификат авторизации в файл ''/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 (см. файл ''/usr/share/sendmail/README'') и рестартовать уже запущенный sendmail:
+
После добавления вышеуказанных строк в файл конфигурации следует пересобрать его с помощью 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>.
''/usr/share/sendmail/README''.
 
  
 
Для того чтобы научить 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
  
Смотрите также ''/usr/share/sendmail/README'', [http://openbsd.pw/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_sendmail#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_TLS_.D0.B8_SSL Настройка TLS и SSL].
+
Смотрите также <tt>/usr/share/sendmail/README</tt>, [[#Настройка TLS и SSL|Настройка TLS и SSL]].
  
  
= Настройка sendmail как SMTP клиента с авторизацией =
+
== Настройка sendmail как SMTP клиента с авторизацией ==
  
 
В случае, когда sendmail выступает в роли клиента, демон saslauthd не требуется. В файл конфигурации необходимо внести следующие изменения:
 
В случае, когда sendmail выступает в роли клиента, демон saslauthd не требуется. В файл конфигурации необходимо внести следующие изменения:
Строка 213: Строка 212:
 
</pre>
 
</pre>
  
Указываем SMTP-сервер, имя и пароль пользователя, а также метод аутентификации в отдельном файле ''/etc/mail/authinfo'':
+
Указываем 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. Чтобы заставить его сначала смотреть ''/etc/hosts'', нужно создать файл ''/etc/mail/service.switch'' и прописать в нем следующую строку:
+
По умолчанию 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, нам потребуется установить альтернативный агент доставки ''mail.buhal'', который можно скачать отсюда.
+
По умолчанию 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.